藍(lán)牙通信,實(shí)現(xiàn)手機(jī)端遠(yuǎn)程(15米)控制單片機(jī),這聽(tīng)起來(lái)對(duì)于初學(xué)者的我來(lái)說(shuō),是那么不可思議,經(jīng)過(guò)不斷地實(shí)驗(yàn),閱讀其他大佬的文章,終于實(shí)現(xiàn)了。
在有基礎(chǔ)的通信原理知識(shí)的前提下,知,HC-05藍(lán)牙模塊與51的通信其實(shí)很簡(jiǎn)單,就是藍(lán)牙模塊的RXD(接收端)接單片機(jī)的TXD(發(fā)送端),同樣,TXD接RXD。
51單片機(jī)的P3^0為其R XD,P3^1為其TXD。
接線如圖所示:

手機(jī)端我推薦使用SPP藍(lán)牙串口,界面簡(jiǎn)單清晰,適合初次使用HC-05的同學(xué),長(zhǎng)這樣:

給藍(lán)牙模塊接上電后就可以在這個(gè)軟件上找到它的信號(hào)了,可以直接連接。(接電后未連接的情況下模塊會(huì)持續(xù)閃爍,連接成功后后閃爍頻率降低)。

原理圖:(不好意思,畫(huà)圖能力有限),功能實(shí)現(xiàn)的原理大致就是手機(jī)端通過(guò)軟件控制HC-05藍(lán)牙模塊,手機(jī)端發(fā)送數(shù)據(jù)給藍(lán)牙模塊,實(shí)際就成為藍(lán)牙模塊發(fā)送數(shù)據(jù)給單片機(jī),同樣單片機(jī)也能發(fā)送數(shù)據(jù)給藍(lán)牙模塊,即雙方通過(guò)TXD,RXD都能發(fā)送和接收。
利用此原理,我們就可以這樣編寫(xiě)代碼來(lái)設(shè)計(jì)單片機(jī):當(dāng)接收到什么數(shù)據(jù)的時(shí)候,做出什么反應(yīng),就可以實(shí)現(xiàn)手機(jī)點(diǎn)燈了。
dat為接收到的數(shù)據(jù)
switch(dat)
{
? ? case 1:......//當(dāng)dat=1時(shí)
? ? case 2:......//當(dāng)dat=2時(shí)
? ? case 3:......//.....
? ? .............
}
數(shù)據(jù)的發(fā)送與接收是通過(guò)串口通信實(shí)現(xiàn)的,所以我們需對(duì)串口初始化,寫(xiě)中斷函數(shù)。
工程總代碼如下:
#include <REGX52.H>
#include <stdlib.h>
sbit LED1=P2^0;
sbit LED2=P2^1;
sbit LED3=P2^2;
sbit LED4=P2^3;
sbit LED5=P2^4;
sbit LED6=P2^5;
sbit LED7=P2^6;
sbit LED8=P2^7;
unsigned char dat;
void UART_init() //設(shè)置串行通信 本晶振為11.0592MHZ
{
TMOD = 0x20;
TH1 = 0xfd;
TL1 = 0xfd; //波特率9600
SM0 = 0;
SM1 = 1; // 串口工作方式1 10位異步
REN = 1; //串口允許接收
TR1 = 1;
EA = 1;
ES =1 ; //串口中斷
}
void UART_SendByte(unsigned char Byte) //字節(jié)的發(fā)送
{
SBUF = Byte;
while(TI == 0);//當(dāng)數(shù)據(jù)發(fā)送完成時(shí),TI會(huì)變?yōu)橐? TI = 0;
}
void main()
{
UART_init();
LED1=1,LED2=1,LED3=1,LED4=1,LED5=1,LED6=1,LED7=1,LED8=1;
while(1)
{
switch(dat)
{
case 1 :{LED1=0;break;}
case 2 :{LED2=0;break;}
case 3 :{LED3=0;break;}
case 4 :{LED4=0;break;}
case 5 :{LED5=0;break;}
case 6 :{LED6=0;break;}
case 7 :{LED7=0;break;}
case 8 :{LED8=0;break;}
}
}
}
void UART_INTERRUPT() interrupt 4
{
if(RI==1)//RI=1時(shí)表示接收到了數(shù)據(jù)
{
dat = SBUF;//創(chuàng)建變量dat接收緩存區(qū)的數(shù)據(jù),實(shí)現(xiàn)接收。
RI = 0;
UART_SendByte(SBUF);//或SBUF = dat; 將數(shù)據(jù)放于緩沖位實(shí)現(xiàn)發(fā)送。
}
}
這樣就可以實(shí)現(xiàn)了。
現(xiàn)象如下:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-570423.html

文章如有不對(duì)的地方,期待您的指正。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-570423.html
到了這里,關(guān)于C51單片機(jī)利用HC-05藍(lán)牙模塊實(shí)現(xiàn)手機(jī)點(diǎn)燈的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!