#include<reg52.h>#include<intrins.h> //因为要用到左右移函数,所以加入这个头文件
#define uchar unsigned char
#define uint unsigned int
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
unsigned char Dat;
unsigned char i,j;
void flag1();
void flag2();
sbit moto1=P1^0; //定义电机1管脚
sbit moto21=P1^1; //定义电机2管脚
sbit moto22=P1^2;
sbit led1=P2^0; //定义P2.0口是led1
sbit led2=P2^6; //定义P2.1口是led2
sbit led3=P2^4;
void main()
{ moto1=0;
moto21=0;
moto22=0;
led3=0;
SCON=0x50;
PCON=0x00;
TMOD=0x20;
EA=1;
ES=1;
TL1=0xfd; //波特率9600
TH1=0xfd;
TR1=1;
while(1)
{
}
}
void serial() interrupt 4 //串行中断服务函数
{
// ES=0; //暂时关闭串口中断
// RI=0;
Dat=SBUF;
//把收到的信息从SBUF放到buf中。
RI=0;
// switch(Dat)
// {
if(Dat==1)
{ flag1(); // 指令1
}
else //指令2
{ flag2();
}
}
// ES=1; //重新开启串口中断
// }
void delay(u16 i) //延时函数
{
while(i--);
}
void flag1()
{
led3=1;
moto1=1;
led1=0;
for(i=0;i<100;i++) //循环100次,也就是大约5S
{
delay(5000); //大约延时50ms
}
moto1=0; //关闭电机1
led1=1; //关闭指示灯
while(1)
{
moto21=1; //电机2正转
moto22=0;
led2=0;
for(j=0;j<195;j++)
{
delay(5000);
}
moto21=1; //停车 moto22=1;
for(j=0;j<5;j++)
{
delay(5000);
}
moto21=0; //反转
moto22=1;
led2=~led2;
for(j=0;j<195;j++)
{
delay(5000);
}
moto21=1; //停车
moto22=1;
for(j=0;j<5;j++)
{
delay(5000);
}
}
}
void flag2()
//电机1、2停止
{
while(1)
{
moto1=0;
moto21=1;
moto22=1;
led1=1;
led2=1;
led3=0;
}
}