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 <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; 将数据放于缓冲位实现发送。
        }
    }

这样就可以实现了。

现象如下:

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

猜你喜欢

转载自blog.csdn.net/qq_62262788/article/details/128567401
今日推荐