STC89C52單片機(jī)通過(guò)HC06藍(lán)牙模塊與Android手機(jī)通信
1、任意單片機(jī)開(kāi)發(fā)板即可(當(dāng)時(shí)用的芯片STC90C516RD+),約定為下位機(jī)
2、無(wú)線藍(lán)牙串口透?jìng)髂KHC-06從機(jī)
3、windows xp操作系統(tǒng)
4、Android智能手機(jī)(藍(lán)牙串口通信助手軟件),約定為上位機(jī)
二、連接的部分電路圖(有集成板子的直接插上就可以了,但是要注意若單片機(jī)的TXD無(wú)上拉能力需要加上拉電阻)
上拉電阻的阻值有人問(wèn)我,我當(dāng)時(shí)用的是1KΩ。
三、下位機(jī)測(cè)試程序
(各位大神如果分?jǐn)?shù)比較多可以贊助我一下,就1個(gè)積分)
程序地址(整個(gè)工程):http://download.csdn.net/detail/itas109/5430553
/*STC90C51RD+與HC-06藍(lán)牙連線:藍(lán)牙 STC90C51RD+RXD TXDTXD RXD其他連線:P2.0、P2.1、P2.3分別接一個(gè)指示燈?。。。。。。?!注意:若單片機(jī)TXD(P3.1)無(wú)上拉能力,必須在P3.1端接上拉電阻。本次測(cè)試需要接上拉電阻?。。?!手機(jī)采用藍(lán)牙串口通信助手最后已改用Android自編藍(lán)牙通信軟件By itas109http://blog.csdn.net/itas109*/#include#include unsigned char tmp;unsigned int c=0;sbit led1=P2^0; //指示燈0sbit led2=P2^1; //指示燈1sbit led3=P2^3; //指示燈3void init(); //串口初始化void send(unsigned char a); //單字節(jié)發(fā)送函數(shù)void ctrl(); //接收處理函數(shù)void main(){init();while(1){ if(RI==1) //是否有數(shù)據(jù)到來(lái){RI = 0;tmp = SBUF; //暫存接收到的數(shù)據(jù)ctrl();} }}void init() //串口初始化{ES=0; //關(guān)中斷SCON = 0x50; // REN=1允許串行接受狀態(tài),串口工作模式1,//10位UART(1位起始位,8位數(shù)據(jù)位,1位停止位,無(wú)奇偶校驗(yàn)),波特率可變TMOD = 0x20; //定時(shí)器1工作于方式2,8位自動(dòng)重載模式,用于產(chǎn)生波特率TH1=TL1=0xFD; //波特率9600 (本次測(cè)試采用晶振為11.0592)PCON &= 0x7f; //波特率不倍增TR1 = 1; //定時(shí)器1開(kāi)始工作,產(chǎn)生波特率//發(fā)送標(biāo)志位置0TI=0; //接收標(biāo)志位置0RI=0;//EA=0;ES=1;led1=0; //初始化設(shè)置3個(gè)指示燈全亮led2=0;led3=0;}void send(unsigned char a) //單字節(jié)數(shù)據(jù)發(fā)送{ //注意:若單片機(jī)TXD(P3.1)無(wú)上拉能力,必須在P3.1端接上拉電阻。本次測(cè)試需要接上拉電阻TI=0; SBUF=a;while(TI==0);TI=0;if(c%2) //發(fā)送指示燈標(biāo)志,每接收一次,此燈亮滅交替led3=1;elseled3=0;c++;} void ctrl() //接收處理函數(shù){switch(tmp){case 1:led1=1; //收到字符1,指示燈0滅send(tmp);break; case 2: //收到字符2,指示燈1滅led2=1;send(tmp);break;case 3: //收到字符3,指示燈0、1亮led1=0;led2=0;send(tmp);break;case 4: //收到字符4,指示燈0、1滅led1=1;led2=1;send(tmp);break;case 5: //收到字符5,指示燈3亮led3=0;send(tmp);break;default: //其他,燈全滅led1=1;led2=1;led3=1;send(tmp);}}
四、上位機(jī)軟件可以用藍(lán)牙串口通信助手軟件
評(píng)論