#include "STC.H"
// sbit s=P1^0 ;
unsigned?char?dat;?//用于存储单片机接收发送缓冲寄存器SBUF里面的内容
sbit pul=P0^0; //脉冲信号输出,LED0.0可显示状态
sbit dir=P0^1; //方向信号输出,LED0.1可显示状态
sbit ena=P0^2; //使能信号输出,LED0.2可显示状态
sbit S1=P1^4; // 方向控制 独立按键K5
sbit S2=P1^5; // 使能控制 独立按键K6
void delay_1ms(unsigned int i) //1MS 延时
{
unsigned int j;
for(;i>0;i--)
for(j=0;j<125;j++)
{;}
}
void delay(unsigned int i)// us级延时
{
while(--i);
}
void keyscan() //键盘扫描
{
if(S2==0)
{
delay_1ms(10);//延时,防抖
if(S2==0)
ena=~ena;// 使能改变
}
if(S1==0)
{
delay_1ms(10);//延时,防抖
if(S1==0)
dir=~dir;// 方向改变
}
}
///
void init_com()
{
TMOD = 0x21;
TH0 = 0x3c;
TL0 = 0xb0;
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1;
SM0 = 0;
SM1 = 1;
REN = 1;
EA = 1;
ES = 1;
RI = 0;
ena=1 ;//高电平使能,初始化为低电平。
//delay(5) ;//使能信号要至少要早于方向信号5us建立
dir=1 ;//初始化转动方向
//delay(5) ; //因为方向信号要至少要早于脉冲信号5us建立
}
void main(void)
{
init_com();
/* while(1)
{
P1=0xf0;
if(RI==1)
{
P0=SBUF;
RI=0;
}
// keyscan();
// delay(5) ; //因为方向信号要至少要早于脉冲信号5us建立
pul=0; //pul输出低电平
delay_1ms(1); //周期的1/2时间
pul=1; //pul 输出高电平
delay_1ms(1); //
}*/
while(1)
{
if (RI) //扫描判断是否接收到数据
{
dat = SBUF; //接收数据SBUF赋与dat
if(dat==0xFF) //如果PC发送十六进制FF,表示打开或关闭电机
{
P1.4=1;//方向不变
P1.5=1;//启动或关闭电机
}
else if(dat==0xEF) //如果PC发送十六进制FF,表示改变电机方向
{
if(P1.5==1)//先判断电机是否打开
{
P1.4=0;//电机反相
}
}
RI=0; //RI 清零。
}
if(P1.5==1)//先判断电机是否打开
{
pul=0; //pul输出低电平
delay_1ms(1); //周期的1/2时间,单位毫秒
pul=1; //pul 输出高电平
delay_1ms(1); //周期的1/2时间,单位毫秒
}
}
}
// sbit s=P1^0 ;
unsigned?char?dat;?//用于存储单片机接收发送缓冲寄存器SBUF里面的内容
sbit pul=P0^0; //脉冲信号输出,LED0.0可显示状态
sbit dir=P0^1; //方向信号输出,LED0.1可显示状态
sbit ena=P0^2; //使能信号输出,LED0.2可显示状态
sbit S1=P1^4; // 方向控制 独立按键K5
sbit S2=P1^5; // 使能控制 独立按键K6
void delay_1ms(unsigned int i) //1MS 延时
{
unsigned int j;
for(;i>0;i--)
for(j=0;j<125;j++)
{;}
}
void delay(unsigned int i)// us级延时
{
while(--i);
}
void keyscan() //键盘扫描
{
if(S2==0)
{
delay_1ms(10);//延时,防抖
if(S2==0)
ena=~ena;// 使能改变
}
if(S1==0)
{
delay_1ms(10);//延时,防抖
if(S1==0)
dir=~dir;// 方向改变
}
}
///
void init_com()
{
TMOD = 0x21;
TH0 = 0x3c;
TL0 = 0xb0;
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1;
SM0 = 0;
SM1 = 1;
REN = 1;
EA = 1;
ES = 1;
RI = 0;
ena=1 ;//高电平使能,初始化为低电平。
//delay(5) ;//使能信号要至少要早于方向信号5us建立
dir=1 ;//初始化转动方向
//delay(5) ; //因为方向信号要至少要早于脉冲信号5us建立
}
void main(void)
{
init_com();
/* while(1)
{
P1=0xf0;
if(RI==1)
{
P0=SBUF;
RI=0;
}
// keyscan();
// delay(5) ; //因为方向信号要至少要早于脉冲信号5us建立
pul=0; //pul输出低电平
delay_1ms(1); //周期的1/2时间
pul=1; //pul 输出高电平
delay_1ms(1); //
}*/
while(1)
{
if (RI) //扫描判断是否接收到数据
{
dat = SBUF; //接收数据SBUF赋与dat
if(dat==0xFF) //如果PC发送十六进制FF,表示打开或关闭电机
{
P1.4=1;//方向不变
P1.5=1;//启动或关闭电机
}
else if(dat==0xEF) //如果PC发送十六进制FF,表示改变电机方向
{
if(P1.5==1)//先判断电机是否打开
{
P1.4=0;//电机反相
}
}
RI=0; //RI 清零。
}
if(P1.5==1)//先判断电机是否打开
{
pul=0; //pul输出低电平
delay_1ms(1); //周期的1/2时间,单位毫秒
pul=1; //pul 输出高电平
delay_1ms(1); //周期的1/2时间,单位毫秒
}
}
}