#include <reg52.h>//头文件
sbit ENA= P2^0;//定义L298N驱动
sbit IN1= P2^1;
sbit IN2= P2^2;
sbit IN3= P2^3;
sbit IN4= P2^4;
sbit ENB= P2^5;
sbit C1=P1^0;//传感器1,2
sbit C2=P1^1;
unsigned char a;//定义一个变量a,用来读取串口的数据
void qianjing()//前进
{
ENA=1;
ENB=1;
IN1=0;
IN2=1;
IN3=0;
IN4=1;
}
void huotui()//后退
{
ENA=1;
ENB=1;
IN1=1;
IN2=0;
IN3=1;
IN4=0;
}
void zuozhuan()//左转
{
ENA=1;
ENB=1;
IN1=1;
IN2=0;
IN3=0;
IN4=1;
}
void youzhuan()//右转
{
ENA=1;
ENB=1;
IN1=0;
IN2=1;
IN3=1;
IN4=0;
}
void tingzhi()//停止
{
ENA=0;
ENB=0;
}
void hongwaibizhang()//红外避障子程序
{
if(C1==0&&C2==0)
{
huotui();
}
else if(C1==1&&C2==0)
{
zuozhuan();
}
else if(C1==0&&C2==1)
{
youzhuan();
}
else if(C1==1&&C2==1)
{
qianjing();
}
else
{
tingzhi();
}
}
void init()//初始化子程序
{
TMOD=0x20;//设置定时器T1为工作方式2
TH1=0xfd;//T1定时器装初值
TL1=0xfd;//T1定时器装初值
TR1=1;//启动定时器T1
REN=1;//允许串口接收
SM0=0;//设置串口工作方式1
SM1=1;//设置串口工作方式1
EA=1;//开总中断
ES=1;//开串口中断
}
void main()//主程序
{
init();//调用初始化子程序
while(1)//死循环
{
switch(a)//判断a从串口读取到的数据
{
case 0x0A://如果是0x0A就前进
qianjing();
break;
case 0x0B://如果是0x0B就后退
huotui();
break;
case 0x0C://如果是0x0C就左转
zuozhuan();
break;
case 0x0D://如果是0x0D就右转
youzhuan();
break;
case 0x0F://如果是0x0F就停止
tingzhi();
break;
case 0x09://如果是0x09就开启红外避障模式
hongwaibizhang();
break;
default: break;
}
}
}
void ser() interrupt 4//串口中断服务程序
{
RI=0;//软件清除串口响应
a=SBUF;//读取单片机串口接受的蓝牙模块发送的数据
}