#include "reg51.h"
#define uint unsigned int
#define uchar unsigned char
//电机IO
#define GPIO_MOTOR P1
unsigned char code FFW[8]={0xf4,0xf5,0xf1,0xf9,0xf8,0xfa,0xf2,0xf6}; //管脚
unsigned char Direction=0,Speed=0;
unsigned char receiveData='0';
void UsartConfiguration();
void Delay(unsigned int t);
void Motor();
/*******************************************************************************
void main(void)
{
//unsigned char i;
UsartConfiguration();
Speed=180; //默认初始速度 数字越小 延时时间越短 速度越快
while(1)
{
if(receiveData=='1') //转动
{
//消除抖动
Direction=1;
receiveData='0';
}
Motor();
Direction=0;
}
}
void UsartConfiguration()
{
SCON=0X50; //设置为工作方式1
//TMOD=0X20; //设置计数器工作方式2
TMOD=0X21; //设置计数器工作方式2 和定时器0
PCON=0X80; //波特率加倍
//TH1=0XF4; //计数器初始值设置,注意波特率是4800的
//TL1=0XF4;
TH1=0XFA; //计数器初始值设置,注意波特率是9600的
TL1=0XFA;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1;
//打开计数器
}
void Usart() interrupt 4
{
receiveData=SBUF;//出去接收到的数据
RI = 0;//清除接收中断标志位
}
/*******************************************************************************
void Motor()
{
unsigned char i;
for(i=0;i<8;i++)
{
if(Direction==1)
{
GPIO_MOTOR = FFW[i];
}
Delay(Speed); //调节转速
}
}
/*******************************************************************************
步进电机是通过脉冲信号来控制转动的
一般有一个脉冲信号来控制步进电机的方向
一个脉冲信号来控制步进电机的转多少步
一般步进电机会配一个配置器来设置步进电机转一圈需要多少个波
假设 步进电机转一圈需要6400个波
转1度就是6400/360 个波转一度