手机蓝牙小车,教你DIY自己的玩具——程序篇

版权声明:文章版权归本人所有,转载请注明出处 https://blog.csdn.net/qq_35105528/article/details/89452110

       上次给大家讲解了蓝牙小车的硬件部分,这次给大家讲解蓝牙小车的程序部分。这里说的程序部分指的是单片机的程序,关于安卓app的编写下次继续教大家。
       总的来说,我们常用的蓝牙模块,如hc05采用的是串口通讯协议。串口通讯是初学者面对的比较重要的知识点 ,也是单片机比较基础的通讯协议,所以建议大家好好理解一下。蓝牙小车的程序其实就是51单片机串口接收数据的程序,它的工作原理是安卓手机和蓝牙模块配对连接后,安卓手机采用串口发送制定的字符,单片机按照串口通讯协议接收该字符后,判断接收的字符是否是小车行动指令,来控制驱动信号线高低电平,进而控制小车的前进与转弯。
       下面就是51单片机串口接收数据的程序,希望可以给大家带来思路

#include<reg52.h>//声明头文件

#define uchar unsigned char//宏定义

#define uint unsigned int//宏定义

uchar a=0;//定义一个变量a,用来读取串口的数据

void delay(uint z)//一个带参数的延时程序

{

int i,j;//定义两个变量

for(i=10;i>0;i--)

for(j=z;j>0;j--);//将参数z赋值给j

}

void init()//初始化子程序

{

TMOD=0x20; //设置定时器T1为工作方式2

TH1=0xfd;

TL1=0xfd; //T1定时器装初值

TR1=1; //启动定时器T1

REN=1; //允许串口接收

SM0=0;

SM1=1; //设置串口工作方式1

EA=1; //开总中断

ES=1; //开串口中断

}

void main()//主程序

{

init();//调用初始化子程序

while(1)//死循环

{

switch(a)//判断a从串口读取到的数据

{

case 0001://如果是0x1f就前进

P2=0x01;

break;

case 0002://如果是0x2f就后退

P2=0x02;

break;

case 0003://如果是0x3f就左转

P2=0x04;

break;

case 0004://如果是0x4f就右转

P2=0x0f;

break;

case 0x05://如果是0x00就停止

P2=0xf0;

break;

}

}

}

void chuan() interrupt 4//串口中断服务程序

{

RI=0;//软件清除串口响应

a=SBUF;//读取单片机串口接受的蓝牙模块发送的数据

}

猜你喜欢

转载自blog.csdn.net/qq_35105528/article/details/89452110
今日推荐