51单片机-HC-06蓝牙模块
HC-06
HC-06 蓝牙模块介绍
HC-06 蓝牙串口通信模块,是基于 Bluetooth Specification V2.0 带 EDR 蓝牙协议的数传模块。无线工作频段为 2.4GHz
ISM,调制方式是 GFSK。模块最大发射功率为 4dBm,接收灵敏度-85dBm,板载 PCB 天线,可以实现 10 米
距离通信。
注意
模块的 电源为 3.3V,不能直接接 5V
, 5V 的电源必须通过 LDO 降压到 3.3V 后再给模块供电。HC-06-USB 默认为主机
,HC-06 默认为从机
;可以跟安卓手机连接,但是iPhone 搜索不到 HC-06 信号,我网上搜索过说不支持,所以就没搞
;跟电脑连接需要 USB 转 TTL 模块
连接 HC-06模块再插入电脑!(切记 USB转TTL模块勿将 VCC与GND短接,不然可能会烧坏
)
步骤:
- ① USB 转 TTL 接线然后插入电脑(注意别连错否则可能蓝牙模块报废)
HC06 | 串口线 |
---|---|
STATE | 不连 |
RXD | TXD |
TXD | RXD |
GND | GND |
VCC | +5V |
EN | 不连 |
- ② 打开串口调试助手 sscom
调好 ssom 的波特率(蓝牙模块一般默认 9600
),测试通信:输入 " AT" 如果有回复 " `OK" 就行了
如果需要改蓝牙名字或者密码的也可以输入命令来修改:
修改蓝牙名字命令: AT+NAMExxx
(xxx就是你需要改的名字)
修改蓝牙密码命令: AT+PINxxxx
(密码默认1234,你可以修改成任意4位数密码)
具体命令可以去查看手册或者文档!
软件编程
手机下载 " SSP蓝牙串口
" app用来连接蓝牙;蓝牙模块跟51单片机连接方式:
蓝牙模块 | 51开发板 |
---|---|
VCC | VCC |
GND | GND |
TXD | P30 |
RXD | P31 |
main.c(蓝牙控制LED1亮灭例1)
# include <reg52.h>
sbit P1_0 = P2^0;
bit flag_REC=0;
bit flag =0;
unsigned char i=0;
unsigned char dat=0;
unsigned char buff[5]=0; //接收缓冲字节
void BlueteethInit()
{
SCON = 0x50;
TMOD = 0x20;
PCON = 0x00;
REN = 1;
TH1 = 0xfd;
TL1 = 0xfd;
RI = 0;
EA = 1;
ES = 1;
TR1 = 1;
}
/************************************************************************/
void Serial() interrupt 4 //中断接收3个字节
{
if(RI) //是否接收中断
{
RI=0;
dat=SBUF;
if(dat=='O'&&(i==0)) //接收数据第一帧
{
buff[i]=dat;
flag=1; //开始接收数据
}
else if(flag==1)
{
i++;
buff[i]=dat;
if(i>=2)
{i=0;flag=0;flag_REC=1 ;} // 停止接收
}
}
}
/*********************************************************************/
/*--主函数--*/
void main(void)
{
BlueteethInit();
P1_0=1; //初始化P10口
TI = 0;
while(1) /*无限循环*/
{
if(flag_REC==1) //
{
flag_REC=0;
if(buff[0]=='O'&&buff[1]=='N') //第一个字节为O,第二个字节为N,第三个字节为控制码
{
P1_0=0;
}
if(buff[0]=='O'&&buff[1]=='F'&&buff[2]=='F') //第一个字节为O,第二个字节为N,第三个字节为控制码
{
P1_0=1;
}
}
}
}
main.c(蓝牙控制LED1亮灭例2)
/*-----------------------------------------------------------------------------
* 实 验 名 : RS232串口试验
* 实验说明 : 单片机串口接收数据控制灯亮灭
* 连接方式 :
* 注 意 : 该试验使用的晶振是11.0592
*******************************************************************************/
# include<reg52.h>
# include<intrins.h>
# define uchar unsigned char
# define uint unsigned int
uchar PuZh[36] = "广州汇承信息科技有限公司www.hc01.com";
//--定义使用的IO--//
sbit LED=P2^0;
//--声明全局函数--//
void UsartConfiguration();
void Delay_1ms(uint i);
/********************************************************************
* 名称 : Com_Int()
* 功能 : 串口中断子函数
* 输入 : 无 * 输出 : 无
***********************************************************************/
void Com_Int(void) interrupt 4
{
uchar i;
uchar receive_data;
EA = 0;
if(RI == 1) //当硬件接收到一个数据时,RI会置位
{
RI = 0;
receive_data = SBUF;//接收到的数据
if(receive_data == '1')
{
LED =0;//接收到1亮灯
}
else
{
LED =1; //其他情况灯灭
}
}
for(i=0; i<36; i++)
{
SBUF = PuZh[i]; //将要发送的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
Delay_1ms(1);
}
EA = 1;
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
UsartConfiguration();//初始化串口
while(1);
}
/*******************************************************************************
* 函 数 名 : UsartConfiguration()
* 函数功能 : 设置串口
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void UsartConfiguration()
{
SCON=0X50; //设置为工作方式1,8位数据,可变波特率
TMOD=0X20; //设置计数器工作方式2
PCON=0X00; //波特率不加倍
TH1=0XFd; //计数器初始值设置,9600@11.0592MHz
TL1=0XFd;
TR1=1; //打开计数器
ES = 1; //开串口中断
EA = 1; //开总中断
}
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms
* x * 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay_1ms(uint i)//1ms延时
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}