求纠错,急急急急急急!
时间:10-02
整理:3721RD
点击:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar R,ch; //定义接收缓冲区
bit ReceOK_Flag = 0;
uchar code zz[]={0x01,0x02,0x04,0x08};
uchar code fz[]={0x08,0x04,0x02,0x01};
uchar code azz[]={0x10,0x20,0x40,0x80};
uchar code afz[]={0x80,0x40,0x20,0x10};
void send_char_com(uchar ch) ;
void Delay_ms(uint x) //延时程序,xms是形式参数
{
uint y, z;
for(y=x;y>0;y--) // i=xms,即延时xms, xms由实际参数传入一个值
for(z=10;z>0;z--); //此处分号不可少
}
void series_init()
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
//AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T
// AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xF3; //设定定时初值
TH1 = 0xF3; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
EA = 1;
ES = 1;
}
void motor_zz()//第二个电机正转
{
uint i,j;
for(i=0;i<8;i++) //转的角度
{
for(j=0;j<4;j++)//转圈
{
P2=zz[j];//开始转
}
}
}
void motor_fz()//第二个电机反转
{
uint i,j;
for(i=0;i<8;i++)//转的角度
{
for(j=0;j<4;j++)//转圈
{
P2=fz[j];//开始转
}
}
}
void motor_zz1()//第一个电机正转
{
uint i,j;
for(i=0;i<8;i++)//转的角度
{
for(j=0;j<4;j++)//转圈
{
P2=azz[j];//开始转
}
}
}
void motor_fz1()//第一个电机反转
{
uint i,j;
for(i=0;i<8;i++)//转的角度
{
for(j=0;j<4;j++)//转圈
{
P2=afz[j];//开始转
}
}
}
void main()
{
unsigned int i;
series_init(); //调串行口初始化函数
while(1) //等待中断
{
P1=0xff;//初始化P1全部高电平
if( ReceOK_Flag ){ ReceOK_Flag = 0;
SBUF = R;
}
else if(R==1)
{
motor_zz();
}
else if(R==2)
{
motor_fz();
}
else if(R==3)
{
motor_zz1();
}
else if(R==4)
{
motor_fz1();
}
else if(R==0)
{
P1==0xfb;
}
else if(P1==0xfe)//判断1键是否按下
{
while(P1==0xfe);//软件去抖,确认是1键按下
P0=0xfe;//1灯亮
motor_zz();//第二个电机转
delay_ms()
}
else if(P1==0xfd)//2键按下
{
while(P1==0xfd)//软件去抖,确认2键按下
P0=0xfd;//2灯亮
motor_fz();//第二个电机反转
delay_ms()
}
if(P1==0xef)//5键按下
{
while(P1==0xef);//软件去抖,确认5键按下
P0=0xef;//5灯亮
motor_zz1();//第一个电机正转
delay_ms()
}
else if(P1==0xdf)//6键按下
{
while(P1==0xdf)//软件去抖,6键按下
P0=0xdf;//6灯亮
motor_fz1();//第一个点机反转
delay_ms()
}
else
{
P0=0xfb;
P2=0x03;
}
}
}
void send_char_com(uchar ch)
{
SBUF=ch;
while(TI==0);
TI=0 ;
}
void series() interrupt 4
{
if( RI == 1 ){
RI = 0;
R = SBUF;
ReceOK_Flag = 1 ;
}
}
#define uchar unsigned char
#define uint unsigned int
uchar R,ch; //定义接收缓冲区
bit ReceOK_Flag = 0;
uchar code zz[]={0x01,0x02,0x04,0x08};
uchar code fz[]={0x08,0x04,0x02,0x01};
uchar code azz[]={0x10,0x20,0x40,0x80};
uchar code afz[]={0x80,0x40,0x20,0x10};
void send_char_com(uchar ch) ;
void Delay_ms(uint x) //延时程序,xms是形式参数
{
uint y, z;
for(y=x;y>0;y--) // i=xms,即延时xms, xms由实际参数传入一个值
for(z=10;z>0;z--); //此处分号不可少
}
void series_init()
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
//AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T
// AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xF3; //设定定时初值
TH1 = 0xF3; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
EA = 1;
ES = 1;
}
void motor_zz()//第二个电机正转
{
uint i,j;
for(i=0;i<8;i++) //转的角度
{
for(j=0;j<4;j++)//转圈
{
P2=zz[j];//开始转
}
}
}
void motor_fz()//第二个电机反转
{
uint i,j;
for(i=0;i<8;i++)//转的角度
{
for(j=0;j<4;j++)//转圈
{
P2=fz[j];//开始转
}
}
}
void motor_zz1()//第一个电机正转
{
uint i,j;
for(i=0;i<8;i++)//转的角度
{
for(j=0;j<4;j++)//转圈
{
P2=azz[j];//开始转
}
}
}
void motor_fz1()//第一个电机反转
{
uint i,j;
for(i=0;i<8;i++)//转的角度
{
for(j=0;j<4;j++)//转圈
{
P2=afz[j];//开始转
}
}
}
void main()
{
unsigned int i;
series_init(); //调串行口初始化函数
while(1) //等待中断
{
P1=0xff;//初始化P1全部高电平
if( ReceOK_Flag ){ ReceOK_Flag = 0;
SBUF = R;
}
else if(R==1)
{
motor_zz();
}
else if(R==2)
{
motor_fz();
}
else if(R==3)
{
motor_zz1();
}
else if(R==4)
{
motor_fz1();
}
else if(R==0)
{
P1==0xfb;
}
else if(P1==0xfe)//判断1键是否按下
{
while(P1==0xfe);//软件去抖,确认是1键按下
P0=0xfe;//1灯亮
motor_zz();//第二个电机转
delay_ms()
}
else if(P1==0xfd)//2键按下
{
while(P1==0xfd)//软件去抖,确认2键按下
P0=0xfd;//2灯亮
motor_fz();//第二个电机反转
delay_ms()
}
if(P1==0xef)//5键按下
{
while(P1==0xef);//软件去抖,确认5键按下
P0=0xef;//5灯亮
motor_zz1();//第一个电机正转
delay_ms()
}
else if(P1==0xdf)//6键按下
{
while(P1==0xdf)//软件去抖,6键按下
P0=0xdf;//6灯亮
motor_fz1();//第一个点机反转
delay_ms()
}
else
{
P0=0xfb;
P2=0x03;
}
}
}
void send_char_com(uchar ch)
{
SBUF=ch;
while(TI==0);
TI=0 ;
}
void series() interrupt 4
{
if( RI == 1 ){
RI = 0;
R = SBUF;
ReceOK_Flag = 1 ;
}
}