蓝牙通信,实现手机端远程(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 <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() //设置串行通信 本晶振为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) //字节的发送
{
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; 将数据放于缓冲位实现发送。
}
}
这样就可以实现了。
现象如下:文章来源:https://www.toymoban.com/news/detail-570423.html
文章如有不对的地方,期待您的指正。文章来源地址https://www.toymoban.com/news/detail-570423.html
到了这里,关于C51单片机利用HC-05蓝牙模块实现手机点灯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!