【51】HC-06蓝牙模块使用

说到蓝牙模块,就不得不说下主、从机:

主机 : 用于向从机下发指令,能够搜索从机并主动建立连接的一方。

从机 : 用于接收主机下发的命令,不能主动建立连接,只能等别人连接自己。

主从一体 : 能够在主机和从机模式间切换,即可做主机也可作从机。

HC-06与HC-05不同的是 :

  1.   HC-05一般都是主从机一体,既可以设置为主机也可以设置为从机。
  2.   而HC-06在市场上分为两种情况,一种是:主从机一体;另外一种是:只有从机功能。

当购买回来的蓝牙模块需要进行设置时(如主从机设置、波特率、蓝牙名称以及密码修改等):

进入AT指令方法,具体要看手册,不同模块有不同进入方法,我这里的商家给的资料是:

1、接线方法:

2、指令测试:

打开串口,设置与蓝牙模块相同波特率:

3、主、从机模式设置:

 主、从机模式需要通过设置实现(蓝牙模块都默认为从机模式,不需要改请忽略),既通过串口发送AT指令设置:

AT+ROLE设置主从模式: AT+ROLE?是查询主从状态;AT+ROLE=1是设成主;AT+ROLE=0是设成从。 (由于我的HC-06是只有从机模式,设置不了,就不演示设置过程了)。

4、波特率设置:

        波特率一般默认为9600。波特率越低,传输速度越慢,但也不是越高越好,看具体情况而定,一般单片机用的都是9600。(注意:蓝牙模块的波特率需要和单片机的相同,否则传输不了数据

这个默认波特率不是每个蓝牙模块都一样的,有的蓝牙模块默认波特率是115200,使用的时候需要看下商家资料。或者每个波特率试着改一下。

指令代码部分先还有很多(比如:改蓝牙名称、蓝牙密码),感兴趣的话可以看一下数据手册,这里就不说那么多。

------------------------------分界线---------------------------

来到实际使用部分内容。

这里需要讲一下晶振,这个关乎蓝牙模块能否发送、接收数据成功。

C51开发板上的晶振有11.0592Mhz的,也有12Mhz的。

11.0592Mhz的使用串口可以省略很多问题,因为11.0592就是为了串口而生的,在设置波特率的时候可以不用考虑误差问题,误差会使蓝牙模块接收到错误的数据,所以在使用串口时一般考虑用11.0592晶振:

先说11.0592MHz的使用方法,打开ISP烧录软件。

一、设置波特率:

按步骤1~8设置。其中3、4、5、6步在C51系列单片机是固定的,也就是说除了上面设置的这几个外其它选项都是其它单片机型号的。

二、把生成代码复制到代码中,稍微修改下:

  

  这样波特率就设置好了。

三、然后把代码烧录进单片机

(在烧录时单片机TXD、RXD不能连接其它模块,否则烧录不上):

#include <REGX52.H>

//串口初始化
void UartInit(void)		//9600波特率 @11.0592MHz
{
	PCON &= 0x7F;		//波特率不倍速
	SCON = 0x50;		//8位数据,可变波特率
	TMOD &= 0x0F;		//设置定时器模式
	TMOD |= 0x20;		//设置定时器模式
	TL1 = 0xFD;			//设置定时初始值
	TH1 = 0xFD;			//设置定时重载值
	ET1 = 0;			//禁止定时器%d中断
	TR1 = 1;			//定时器1开始计时
	ES = 1;				//打开串口
	EA = 1;				//打开总中断
}

void main()				//主程序
{
	
	UartInit();		 //串口初始化
	while(1)
	{
			
	}
}

void Uart_Bluetooth() interrupt 4		//串口中断
{
	 if(RI == 1)		//接收
	{
		P2 = SBUF;	 	//把接收数据赋给单片机P2口(该接收数据是16进制)
		RI = 0;			//软件置0
	}
}

四、烧录完成后进行接线:

 五、去应用商店下载手机蓝牙调试助手

(我用的是这个,用其他的也行)

打开应用,发送00(代表0x00),单片机P2口会全部置0,可以发送其它的

比如:FF(代表0xFF,单片机P2口全部置1)。

可用万用表测电压的变化。

因为我是在程序中把 SBUF 赋给了 P2 口,所以只有P2口有反应。

# 11.0592MHz 完

-------------------------------分界线-------------------------------

下面讲12MHz 的使用

一、配置波特率

 因为9600波特率误差在8.5%,所以配4800波特率,发现误差还是很大(6.99%),把波特率倍速勾上:

 误差已经很小,现在可以用了。

老规矩:

#include <REGX52.H>

void UartInit(void)		//4800波特率 @12.000MHz
{
	PCON |= 0x80;		//使能波特率倍速位SMOD
	SCON = 0x50;		//8位数据,可变波特率
	AUXR &= 0xBF;		//定时器时钟12T模式
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//设置定时器模式
	TMOD |= 0x20;		//设置定时器模式
	TL1 = 0xF3;			//设置定时初始值
	TH1 = 0xF3;			//设置定时重载值
	ET1 = 0;			//禁止定时器%d中断
	TR1 = 1;			//定时器1开始计时
	ES = 1;				//打开串口
	EA = 1;				//打开总中断
}

void main()          //主程序
{
	UartInit();		 //串口初始化
	while(1)
	{
			
	}
}

void Uart_lya() interrupt 4		//串口中断
{
	 if(RI == 1)
	{
		P2 = SBUF;	 	//把接收数据赋值到单片机P2口
		RI = 0;
	}
}

别急,蓝牙的波特率还没有设置,也要进行4800波特率设置,保证跟单片机一致。

1.接线方法:

2.串口AT指令发送,设置蓝牙模块波特率:

3.单片机与蓝牙接线 :

4.发送指令

 

蓝牙接收发给单片机,LED全部点亮:

版权声明:本文为CSDN博主「阿维啊」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_51272949/article/details/121892762

生成海报
点赞 0

阿维啊

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

基于8051单片机实现电子时钟+数字秒表设计

概述 电子时钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显 示直观、无机械传动装置等优点,因而得到广泛应用。随着人们生活环境的不断改善和美化,在许

普中51-单核-A2单片机

合伙创业、商业需求 Q:1274510382 https://www.bilibili.com/video/av286413345/ 功能与使用 单核A2产品 基于STC89C52 低功耗,高性能的51内核的CMOS 8位单片

51单片机学习笔记7 -- 超声波测距

1.超声波 蝙蝠和某些海洋动物都能够利用高频率的声音进行回声定位或信息交流。它们能通过口腔或鼻腔把从喉部产生的超声波发射出去,利用折回的声波来定向,并判定附近物体的位置、大小以及是否在移动。超声波是一种频率高于20