C51单片机利用HC-05蓝牙模块实现手机点灯

蓝牙通信,实现手机端远程(15米)控制单片机,这听起来对于初学者的我来说,是那么不可思议,经过不断地实验,阅读其他大佬的文章,终于实现了。

在有基础的通信原理知识的前提下,知,HC-05蓝牙模块与51的通信其实很简单,就是蓝牙模块的RXD(接收端)接单片机的TXD(发送端),同样,TXD接RXD。

51单片机的P3^0为其R XD,P3^1为其TXD。

接线如图所示:

手机端我推荐使用SPP蓝牙串口,界面简单清晰,适合初次使用HC-05的同学,长这样:

给蓝牙模块接上电后就可以在这个软件上找到它的信号了,可以直接连接。(接电后未连接的情况下模块会持续闪烁,连接成功后后闪烁频率降低)。

原理图:(不好意思,画图能力有限),功能实现的原理大致就是手机端通过软件控制HC-05蓝牙模块,手机端发送数据给蓝牙模块,实际就成为蓝牙模块发送数据给单片机,同样单片机也能发送数据给蓝牙模块,即双方通过TXD,RXD都能发送和接收。

利用此原理,我们就可以这样编写代码来设计单片机:当接收到什么数据的时候,做出什么反应,就可以实现手机点灯了。

dat为接收到的数据
switch(dat)
{case 1:......//当dat=1时case 2:......//当dat=2时case 3:......//..................
}

数据的发送与接收是通过串口通信实现的,所以我们需对串口初始化,写中断函数。

工程总代码如下:

#include 
#include 
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()    //设置串行通信 本晶振为11.0592MHZ
{TMOD = 0x20;TH1 = 0xfd;TL1 = 0xfd;  //波特率9600SM0 = 0;  SM1 = 1;   // 串口工作方式1 10位异步REN = 1;  //串口允许接收TR1 = 1;EA = 1;ES =1 ;  //串口中断
}void UART_SendByte(unsigned char Byte)  //字节的发送
{SBUF = Byte;while(TI == 0);//当数据发送完成时,TI会变为一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时表示接收到了数据{dat = SBUF;//创建变量dat接收缓存区的数据,实现接收。RI = 0;  UART_SendByte(SBUF);//或SBUF = dat; 将数据放于缓冲位实现发送。}}

这样就可以实现了。

现象如下:

文章如有不对的地方,期待您的指正。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部