手機藍牙小車,教你DIY自己的玩具——程序篇

上次給大家講解了藍牙小車的硬件部分,這次給大家講解藍牙小車的程序部分。這裡說的程序部分指的是單片機的程序,關於安卓app的編寫下次繼續教大家。

手機藍牙小車,教你DIY自己的玩具——程序篇

藍牙小車

總的來說,我們常用的藍牙模塊,如hc05採用的是串口通訊協議。串口通訊是初學者面對的比較重要的知識點 ,也是單片機比較基礎的通訊協議,所以建議大家好好理解一下。藍牙小車的程序其實就是51單片機串口接收數據的程序,它的工作原理是安卓手機和藍牙模塊配對連接後,安卓手機採用串口發送制定的字符,單片機按照串口通訊協議接收該字符後,判斷接收的字符是否是小車行動指令,來控制驅動信號線高低電平,進而控制小車的前進與轉彎。

手機藍牙小車,教你DIY自己的玩具——程序篇

小車

下面就是51單片機串口接收數據的程序,希望可以給大家帶來思路

#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;//讀取單片機串口接受的藍牙模塊發送的數據

}


分享到:


相關文章: