HC-05蓝牙模块连接STC89C52单片机控制LED灯

**首先声明我用的是52单片机,板子型号为HC6800-ES V2.0;如果
非同类型,实现不了,概不认账。**
要实现这个玩法,首先得掌握串口通信的知识,不需要太多,只要知道如何接收/发送数据就行。
串行通信:
按照数据传送方向分为:
*单工
数据传输只支持数据在一个方向上传输。
*半双工
允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信。
*全双工
允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。
通信方式:
*同步通信:
带时钟同步信号传输。 SPI,IIC通信接口。
*异步通信:
不带时钟同步通信。 UART(通用异步收发器),单总线。
串口通讯:(简单介绍)
同步通信:简单来说,同步通信是一种比特(bit)同步通信技术,要求发收双方具有同频同相的同步时钟信号,只需在传送报文的最前面附加特定的同步字符,使发收双方建立同步,此后便在同步时钟的控制下逐位发送/接收。但这时还有两种不同的同步方式.一种是使用全网同步,用一个非常精确的主时钟对全网所有结点上的时钟进行同步.另一种是使用准同步,各结点的时钟之间允许有微小的误差,然后采用其他措施实现同步传输。
异步通信:异步通信在发送字符时,所发送的字符之间的时隙可以是任意的。但是接收端必须时刻做好接收的准备(如果接收端主机的电源都没有加上,那么发送端发送字符就没有意义,因为接收端根本无法接收)。发送端可以在任意时刻开始发送字符,因此必须在每一个字符的开始和结束的地方加上标志,即加上开始位停止位,以便使接收端能够正确地将每一个字符接收下来。异步通信的好处是通信设备简单、便宜,但传输效率较低(因为开始位和停止位的开销所占比例较大,每帧之间还有间隔)。
先来看一下过程图:
这里写图片描述
有两个物理上独立的接收,发送缓冲器SBUF,它们占用同一个地址99H;接收器是双缓冲结构。发送缓冲器:因为发送时CPU是主动的,所以不会产生重叠错误。
TXD和RXD:T 代表 Transmit(发送)
R 代表 Receive(接收)
X 代表要交叉,也就是说A方的TX接B方的RX、B方的TX接A方的RX。
串行通信的数据结构:
这里写图片描述
起始位+数据位(数据的最低位,8位或9位看工作方式,数据的最高位)+校验位+停止位
工作方式寄存器SCON:
这里写图片描述
*RI:接收中断标志位
接受结束时,会由硬件置1,向CPU发出中断请求。(要由软件复位)
*TI:发送中断标志位
发送结束时,会由硬件置1,向CPU发出中断请求。(要由软件复位)
*TB8:用来存放发送的第9位
*RB8:用来存放接收的第9位。
*REN:是串行接收允许位
0时:禁止串行接收
1时:允许串行接收
串行口的工作方式:
这里写图片描述
SM2:多机通信控制位
* 因为多级通信控制是在工作方式2和工作方式3下进行的,因此SM2主要是用在工作方式2和工作方式3。
当SM2=0时:不论接收的第9位是0还是1,都接收数据产生中断。当SM1=1时:只有在接收到第9位为1时,才接收数据,并产生中断:
而如果接收到的第9位为0 时,则将接收到的数据丢弃,不产生中断。
工作方式寄存器PCON:
这里写图片描述
要注意的是:PCON是没有位寻址的,也就是说不能直接操作,SMOD是直接操作PCON寄存器
*SMOD:是波特率是否加倍的选择位。
0时:波特率不加倍。
1时:波特率加倍。
波特率的概念
* 波特率的定义是:串行口每秒钟发送的位数称为波特率。
比如说2400的波特率就是每秒钟发送2400个位数。
* 串行口的波特率是定时器T1作为波特率发生器的,这时定时器设置在工作方式2(可自动重装初值)
* 波特率=(2*SMOD)/32*定时器T1的溢出率 (当SMOD是0(2*SMOD)=1,为1时值为2)
* 定时器T1的溢出率=单片机内部时钟频率/(256-X) X是定时器的初值
* 波特率=(2*SMOD)/32*(单片机内部时钟频率/(256-X))
串口的操作步骤:
*先设置波特率:
设置定时器T1为工作方式工作方式2(设置TMOD寄存器)
给计数器赋初值(工作方式会自动重装)
*设置串口的工作方式
*设置SCON(如果允许)
*如果使用中断方式,那么打开相应的中断和总中断。
*打开定时器T1,开始产生波特率

void UsartConfiguration()
{
    SCON=0X50;          //设置为工作方式1
    TMOD=0X20;          //设置计数器工作方式2
    PCON=0X80;          //波特率加倍
    TH1=0XF3;           //计数器初始值设置,注意波特率是4800的
    TL1=0XF3;
    ES=1;               //打开接收中断
    EA=1;               //打开总中断
    TR1=1;              //打开计数器1
}

下面介绍一下HC-05 蓝牙模块:
引用一句话“模块就是拿来用的”。作为初学者刚开始拿到这个东西,也是很懵逼的,在网上找资料,看到这句话,觉得很有道理,这些新的事物对我们来说就是拿来用的,不用担心,不要畏惧,即使多走点弯路也是值得的。前行的路上有了这些才显得弥足珍贵!
说正事吧!首先可以看一下我分享的这个资料,对蓝牙模块有个初步了解。链接:http://pan.baidu.com/s/1bpF2Z5H 密码:uk88。(补充一下,进入AT指令模式,我的做法是:按住按键,然后再给它上电,慢闪就代表进入AT模式了,接线要用USB 转TTL)用一个简单的例子来解释一下这个模块吧,我们可以把它当作一个传话者,我们发消息给她,她就把消息传给MCU,MCU再去执行相应的操作。
单片机接线是3.0和3.1,记得TX和RX是交叉接线!
下面附上代码:

#include<reg52.h>
#define uchar unsigned char
uchar receiveData;
sbit led = P0^0;
sbit led2 = P0^1;
void UsartConfiguration();
void main()
{
        UsartConfiguration();
        led = 0;
        led2 = 0;                         //检测是否接收到字符,即是否进入串行口中断
        TI = 0;
        while(1)
        {
                if(receiveData == 'A')
               led = 1;                //点亮
                if(receiveData == 'B')
                   led = 0;                //熄灭
        }
}
void UsartConfiguration()
{
        SCON=0X50;                        //设置为工作方式1
        TMOD=0X20;                        //设置计数器工作方式2
        PCON=0X80;                        //波特率加倍
        TH1=0XF3;                         //计数器初始值设置,注意波特率是4800的(晶振为12.0MHz)
        TL1=0XF3;
        ES=1;                             //打开接收中断
        EA=1;                             //打开总中断
        TR1=1;                            //打开计数器1
}

void Usart() interrupt 4                        //串行口中断,为什么是4可以参考上一篇中断的文章
{
    receiveData=SBUF;                      //出去接收到的数据
        RI = 0;                                //清除接收中断标志位
        SBUF=receiveData;                      //将接收到的数据放入到发送寄存器
        while(!TI);                            //等待发送数据完成
        TI=0;                                  //清除发送完成标志位
} 

忘了一点:还需要下载一个手机APP,“蓝牙串口”这一类的APP,提醒一下,有的APP是不能用的,并非代码问题。
好了,,先说到这里,继续前行!

  • 16
    点赞
  • 159
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
步骤: 1. 两个蓝牙模块必须一个作为主机,另一个作为从机才能建立连接(上电后,从机一直处于接受状态,等待被连接。而主机则主动发出信号,寻找目标从机,前提是该目标从机的mac地址事先被写入到主机的flash芯片中储存) 2. 蓝牙模块上电前一直按住key按键不放,上电后松开,此时LED处于慢闪状态(每秒闪1次),提示已经进入AT指令响应状态,可以进行接收AT指令控制 3. PC端打开安可信串口助手(带AT指令),打开相应的串口,发送AT+ROLE?\n查询该模块的主从角色,如果为0,则为从机,如果为1则为主机。本例中,此模块(图中左边的HC-05模块)设为主机,则发送AT+ROLE=1\n,设为主机,成功返回OK 4. 发送AT+ADDR?\n查询此模块的mac地址,本例中为98d3:33:80ebdf,记下来稍后为从机的地址绑定用。同样的方法将另一个模块(图中右边的HC-05模块)设置为从机(AT+ROLE=0\n),并且查询到mac地址为98d3:36:aac2 5. 向主机串口中发送AT+BIND=98d3,36,aac2\n绑定从机的mac地址,成功则返回OK。发送AT+CMODE=0\n将主机设为指定蓝牙地址连接模式(即只允许主机向绑定好mac地址的蓝牙从机设备发起连接) 6. 同样地,向从机串口发送AT+BIND=983d,33,80ebdf\n绑定主机的mac地址,成功则返回OK。发送AT+CMODE=0\n将从机也设为指定蓝牙地址连接模式(即只允许从机接受绑定好mac地址的蓝牙主机设备发起的连接) 7. 至此,主从机均设置完毕。主从两模块松开key键重新上电,LED都快闪(每秒闪2次),表明均处于等待配对状态,随后大约几秒钟后,LED闪烁频率发生变化(不确定),表明已经侦测到目标设备,正在建立连接。随后大约一秒钟,很快 LED变成慢双闪状态(每2秒闪一次,每次连闪2下),提示已经配对成功,可以通过蓝牙协议传输数据了 8. 此时,在串口助手中发送一串字符,如果另一个蓝牙模块的串口助手里收到了同样的字符,且回送的字符,对方亦能收到,则通信成功。
### 回答1: HC-05蓝牙模块可以与STC89C52单片机进行通信,实现无线数据传输。需要注意的是,STC89C52单片机需要具备串口通信功能,并且需要通过串口与HC-05蓝牙模块进行连接。在程序设计时,需要根据HC-05蓝牙模块的通信协议进行数据的发送和接收。同时,还需要注意数据的格式和编码方式,以确保数据的正确传输和解析。 ### 回答2: HC-05蓝牙模块是一种低功耗蓝牙通信模块,可以用于蓝牙数据传输和通信控制STC89C52是一种基于8051核的单片机,具有高性能、低功耗、易于开发等优点。将HC-05蓝牙模块STC89C52单片机结合起来,可以实现在无线环境下进行数据传输和通信控制的功能。 具体实现方法是:先将HC-05蓝牙模块STC89C52单片机进行连接,可以通过串口通信或者蓝牙模块提供的AT命令进行配置。然后可以通过单片机的IO口控制蓝牙模块发送或者接收数据,同时也可以通过蓝牙模块控制单片机的IO口输出高低电平。 在实际应用中,HC-05蓝牙模块STC89C52单片机的结合可以用于智能家居、无线遥控、自动化控制等领域。比如,在智能家居中,通过连接HC-05蓝牙模块STC89C52单片机,可以让手机或者电脑等设备与家中光、电器等进行无线连接,实现远程控制。 总之,将HC-05蓝牙模块STC89C52单片机结合起来,可以实现在无线环境下进行数据传输和通信控制,具有广泛的应用前景和市场需求。 ### 回答3: HC-05是一款经典蓝牙模块STC89C52STC公司推出的8051系列单片机。这两种电子产品可以通过HC-05蓝牙模块实现无线传输通信,具有广泛的应用前景。 首先,HC-05蓝牙模块可以通过TX,RX两个引脚与STC89C52单片机进行串口通信。因为HC-05蓝牙模块具有UART通信协议,所以我们可以通过STC89C52串口通信,将数据通过蓝牙模块发送出去或者接收蓝牙模块发送的数据信息。 其次,在实际使用中,我们可以将STC89C52单片机HC-05蓝牙模块组装成一个多功能控制系统。例如:我们可以将STC89C52单片机连接到电机或者其他的硬件电路中,可以动态控制硬件的运行,同时可以通过蓝牙模块实现远程遥控。 此外,我们还可以通过STC89C52单片机HC-05蓝牙模块实现与手机或者其他蓝牙设备的相互通信。通过使用适当的通信协议,我们可以让STC89C52单片机中的程序通过与蓝牙设备之间的交互,实现多种功能,比如远程控制、数据处理以及其他扩展应用等等。 总之,HC-05蓝牙模块STC89C52的搭配使用,可以实现单片机蓝牙设备之间的无线通信,具有很高的应用价值。在实际应用中,我们可以根据具体的需求,选择合适的通信协议、控制算法和硬件结构,实现更加多样化、智能化的电子控制系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值