基于51单片机的蓝牙小车程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于51单片机的蓝牙小车程序
程序中有我写的注释,看不懂程序的话,可以参考。
#include
#define uchar unsigned char
#define uint unsigned int
uint PWM1,PWM2,num1=0,num2=0;
sbit IN1=P2^1;//左电机输入端1
sbit IN2=P2^2;//左电机输入端2
sbit IN3=P2^3;//右电机输入端1
sbit IN4=P2^4;//右电机输入端2
sbit ENA=P2^0;//右电机使能控制端
sbit ENB=P2^5;//左电机使能控制端
uint bht;//蓝牙
uint bht_mode=0,forward=0,backward=0,left=0,right=0,stop=0;
void Time0init() //定时器0的初始化函数,用于产生PWM,控制小车的速度{
TH0=0xff;//定时0.1ms
TL0=0xa3;
TMOD=0x01;//工作方式1
EA=1;//开总中断
ET0=1;//开定时器中断
TR0=1;//开定时器0中断
}
void time0() interrupt 1//定时计数器0
{
TH0=0xff;
TL0=0xa3;
num1++;
num2++;
if(num1==100) //PWM的周期为100*0.1=10ms
num1=0;
if(num2==100)
num2=0;
if(num1 ENA=1;//打开右电机使能控制端 if(num2 ENB=1; if(num1>PWM1) ENA=0;//关闭右电机使能控制端 if(num2>PWM2) ENB=0; } void UsartInit()//定时计数器1的初始化子函数 { TH1=0XFA;//计数器初始值设置,注意波特率是9600的 TL1=0XFA; SCON=0X50;//设置为工作方式1 ES=1;//打开接收中断 EA=1;//打开总中断 TR1=1;//打开计数器 TMOD|=0X20;//设置计数器工作方式2 (特别注意第二次设置工作方式时要加或) PCON=0X80;//波特率加倍 } void usart() interrupt 4//串口中断子函数 { bht=SBUF;//出去接收到的数据 RI = 0;//清除接收中断标志位 SBUF=bht;//将接收到的数据放入到发送寄存器 while(!TI);//等待发送数据完成 TI=0; if(bht=='Y')//开关控制函数 { bht_mode=1;//允许发送数据 forward=0; backward=0; left=0; right=0; stop=0; } if(bht=='N')//开关控制函数 { bht_mode=0; forward=0; backward=0; left=0; right=0; stop=0; } if(bht_mode==1) { if(bht=='f')//前进控制 { forward=1; backward=0; left=0; right=0; stop=0; } else if(bht=='b')//后退控制 { forward=0; backward=1; left=0; right=0; stop=0; } else if(bht=='l')//左转控制 { forward=0; backward=0; left=1; right=0; stop=0; } else if(bht=='r')//右转控制 { forward=0; backward=0; left=0; right=1; stop=0; } else if(bht=='s')//停止控制 { forward=0; backward=0; left=0; right=0; stop=1; } } else { forward=0; backward=0; left=0; right=0; stop=1; } } void forwardg()//前进函数{ IN1=1; IN2=0; IN3=1; IN4=0; PWM1=25;//右轮 PWM2=20; } void backwardg()//后退函数 { IN1=0; IN2=1; IN3=0; IN4=1; PWM1=20; PWM2=20; } void leftg()//左转函数 { IN1=1; IN2=0; IN3=1; IN4=0; PWM1=10; PWM2=20; } void rightg()//右转函数 { IN1=1; IN2=0; IN3=1; IN4=0; PWM1=20; PWM2=10; } void stopg()//停止函数 { IN1=1; IN2=1;