蓝牙模块学习笔记.docx

上传人:b****7 文档编号:16658211 上传时间:2023-07-16 格式:DOCX 页数:19 大小:930.08KB
下载 相关 举报
蓝牙模块学习笔记.docx_第1页
第1页 / 共19页
蓝牙模块学习笔记.docx_第2页
第2页 / 共19页
蓝牙模块学习笔记.docx_第3页
第3页 / 共19页
蓝牙模块学习笔记.docx_第4页
第4页 / 共19页
蓝牙模块学习笔记.docx_第5页
第5页 / 共19页
蓝牙模块学习笔记.docx_第6页
第6页 / 共19页
蓝牙模块学习笔记.docx_第7页
第7页 / 共19页
蓝牙模块学习笔记.docx_第8页
第8页 / 共19页
蓝牙模块学习笔记.docx_第9页
第9页 / 共19页
蓝牙模块学习笔记.docx_第10页
第10页 / 共19页
蓝牙模块学习笔记.docx_第11页
第11页 / 共19页
蓝牙模块学习笔记.docx_第12页
第12页 / 共19页
蓝牙模块学习笔记.docx_第13页
第13页 / 共19页
蓝牙模块学习笔记.docx_第14页
第14页 / 共19页
蓝牙模块学习笔记.docx_第15页
第15页 / 共19页
蓝牙模块学习笔记.docx_第16页
第16页 / 共19页
蓝牙模块学习笔记.docx_第17页
第17页 / 共19页
蓝牙模块学习笔记.docx_第18页
第18页 / 共19页
蓝牙模块学习笔记.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

蓝牙模块学习笔记.docx

《蓝牙模块学习笔记.docx》由会员分享,可在线阅读,更多相关《蓝牙模块学习笔记.docx(19页珍藏版)》请在冰点文库上搜索。

蓝牙模块学习笔记.docx

蓝牙模块学习笔记

蓝牙模块学习

刚拿到蓝牙模块,心中有点小激动啊;

民用级:

HC-05,HC-06(HC-06-M,HC-06-S)

HC-05-D,HC-06-D(是带底板的模块,主要是用户用于测试和评估)

本文介绍的为HC-06蓝牙串口模块。

蓝牙串口模块用于把串口转换为蓝牙,这种模块工作的时候分为主机和从机,其中偶数命名的型号出厂时就确定了是从机或者是主机,并无法更改。

奇数命名的型号可以用户自己通过AT指令修改模块为主机或者从机。

主机:

HC-06-M,M=master

从机:

HC-06-S,S=slaver

串口模块的使用,是不需要驱动的,只要是串口就可以接入,配对完毕即可通信,模块与模

块的通信需要至少2个条件:

1、必须是主机与从机之间

2、必须密码一致(密码:

1234)

主机:

记忆最后一次配对过的从机,并只与该从机配对,直到KEY(26脚)高电平触发时放弃记忆,26脚默认应该接低电平。

配对方式:

主机自动搜索从设备进行配对。

典型方式:

在一定条件下,主从之间自动配对

AT模式:

配对前就是AT模式,配对完毕后透明通信

图1是HC-06图片及主要引脚

现在你手中拿到的HC-06引出了四个引脚,分别为VCC、GND、TXD、RXD。

四个引脚分别对应单片机的电源5V或3.3V;GND接地;TXD、RXD交叉连接(对应单片机的P3^0,P3^1)。

连接好,单片机上电,此时蓝牙模块上led闪烁,表示尚未连接其他蓝牙设备。

此时用手机蓝牙搜索,可以搜索到HC-06.点击连接,输入pin密码则可以连接。

连接好后,利用蓝牙串口助手就可以对蓝牙模块通信了,编程也就可以把蓝牙当作普通串口来对待。

注意编写好程序后,向单片机烧录时,必须将TXD、RXD拔出才能烧写!

问题:

串口发送字符串时,最后没有标志可寻。

可以将字符串接收到数组中,发送数据到12864,检测是否到’\0’,如果检测得到,将标识符flag置为1;串口中断服务程序中,检测到flag为1时,这证明数据显示成功。

此时应当清屏!

清屏方法:

while(Tem[i]!

='\0')

{

Tem[i]='';

i++;

}

 

/***********************************************************

STC89C52RC与HC-06蓝牙连线:

RXDTXD

TXDRXD

其他连线:

P2.0、P2.1、P2.3分别接一个指示灯

***********************************************************/

#include

#include

unsignedchartmp;

unsignedintc=0;

sbitled1=P1^0;//指示灯0

sbitled2=P1^1;//指示灯1

sbitled3=P1^2;//指示灯2

sbitbeep=P3^2;//蜂鸣器

voidinit();//串口初始化

voidsend(unsignedchara);//单字节发送函数

voidctrl();//接收处理函数

voiddelay(unsignedintx)

{

unsignedinti,j;

for(i=x;i>0;i--)

for(j=110;j>0;j--);

}

voidmain()

{

init();

while

(1)

{

if(RI==1)//是否有数据到来

{

RI=0;

tmp=SBUF;//暂存接收到的数据

ctrl();

}

}

}

voidinit()//串口初始化

{

ES=0;//关中断

SCON=0x50;//REN=1允许串行接受状态,串口工作模式1,

//10位UART(1位起始位,8位数据位,1位停止位,无奇偶校验),波特率可变

TMOD=0x20;//定时器1工作于方式2,8位自动重载模式,用于产生波特率

TH1=TL1=0xFD;//波特率9600(本次测试采用晶振为11.0592)

PCON&=0x7f;//波特率不倍增

TR1=1;//定时器1开始工作,产生波特率

//发送标志位置0

TI=0;//接收标志位置0

RI=0;

//EA=0;

ES=1;

 

led1=0;//初始化设置3个指示灯全亮

led2=0;

led3=0;

}

voidsend(unsignedchara)//单字节数据发送

{//注意:

若单片机TXD(P3.1)无上拉能力,必须在P3.1端接上拉电阻。

本次测试需要接上拉电阻

TI=0;

SBUF=a;

while(TI==0);

TI=0;

if(c%2)//发送指示灯标志,每接收一次,此灯亮灭交替

led3=1;

else

led3=0;

c++;

}

voidctrl()//接收处理函数

{

switch(tmp)

{

case'1':

led1=1;//收到字符1,指示灯0灭

send(tmp);

beep=0;

delay(500);

break;

case'2':

//收到字符2,指示灯1灭

led2=1;

send(tmp);

beep=1;

delay(500);

break;

case'3':

//收到字符3,指示灯0、1亮

led1=0;

led2=0;

send(tmp);

beep=1;

delay(500);

break;

case'4':

//收到字符4,指示灯0、1灭

led1=1;

led2=1;

send(tmp);

break;

case'5':

//收到字符5,指示灯3亮

led3=0;

send(tmp);

break;

default:

//其他,灯全灭

led1=1;

led2=1;

led3=1;

send(tmp);

beep=1;

delay(500);

}

}

 

以下是蓝牙接收字符串并向12864显示程序

/*****************************************************************************8

*任广俊

*日期:

12.17

*蓝牙接收并显示在12864上,1,2,3控制发光二极管

*4,5控制继电器

******************************************************************************/

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

#defineLCD_dataP0

sbitLCD_EN=P3^4;//液晶使能1使能,0使不能

sbitLCD_RS=P3^5;//寄存器选择1数据,0命令

sbitLCD_RW=P3^6;//液晶读写控制1读出,0写入

sbitLCD_PSB=P3^7;//串行口控制1并行,0串行

sbitled1=P1^0;

sbitled2=P1^1;

sbitled3=P1^2;

sbitbeep=P3^2;//蜂鸣器

sbitjdq=P1^6;//继电器

ucharcodedis1[]={"ILoveMCU!

"};

ucharcodedis2[]={"单片机学习"};

ucharTem[20];

uchardis3[8];

unsignedchara=0;//定义临时变量

ucharflag,flag2=0;

uchartemp,i,c;

voiddelay(uintx)

{

uintm,n;

for(m=x;m>0;m--)

for(n=110;n>0;n--);

}

/*******************************************************************************************************

12864液晶显示

*******************************************************************************************************/

//写指令:

RS=L;RW=L;E=高脉冲;D0-D7=指令码

voidwrite_cmd(ucharcmd)

{

LCD_RS=0;

LCD_RW=0;

LCD_EN=0;

P0=cmd;

delay(5);

LCD_EN=1;

delay(5);

LCD_EN=0;

}

//写数据到LCD:

RS=H;RW=L;E=高脉冲D0-D7数据

voidwrite_dat(uchardat)

{

LCD_RS=1;

LCD_RW=0;

LCD_EN=0;

P0=dat;

delay(5);

LCD_EN=1;

delay(5);

LCD_EN=0;

}

//设定显示位置

voidlcd_pos(ucharx,uchary)

{

ucharpos;

if(x==0)

{x=0x80;}

elseif(x==1)

{x=0x90;}

elseif(x==2)

{x=0x88;}

elseif(x==3)

{x=0x98;}

pos=x+y;

write_cmd(pos);//显示地址

}

voidlcd_init()//lcd初始化

{

LCD_PSB=1;//并口方式

write_cmd(0x30);//基本指令喜僮?

delay(5);

write_cmd(0x0C);//显示开关光标

delay(5);

write_cmd(0x01);//清除lcd显示内容

delay(5);

}

/*******************************************************************************************************************/

voidBT_init()//蓝牙串口初始化

{

ES=0;//关中串口中断

SCON=0x50;//REN=1允许串口接收状态,串口工作方式1

//10位UART(1起始位,8数据位,1停止位?

无奇偶校检

TMOD=0x20;//定时器1,工作方式2

TH1=TL1=0xFD;//设置波特率9600

PCON&=0x7f;//波特率不倍增

TR1=1;//允许串口中断

TI=0;//发送标志0

RI=0;//接收标志0

ES=1;

EA=1;//开总中断

led1=0;//初始化为全亮

led2=0;

led3=0;

}

voidsend(unsignedchara)//单字节数据发送

{

TI=0;

SBUF=a;

while(TI==0);

TI=0;

write_dat(a);

if(c%2)//发送指示灯

{

led3=1;

delay(500);

led3=0;

}

c++;

}

}

voidmain()

{

BT_init();//Bluetooth初始化

lcd_init();//液晶显示初始化

while

(1)

{

/***********************************************************************************

液晶显示区

*****************************************************************************************/

//write_cmd(0x01);//清除lcd显示内容

lcd_pos(0,0);//向第一行首位置写数据

i=0;

while(dis1[i]!

='\0')

{

write_dat(dis1[i]);

i++;

}

lcd_pos(1,0);//向第二行首位子写数据

i=0;

while(dis2[i]!

='\0')

{

write_dat(dis2[i]);

i++;

}

delay(10);

lcd_pos(2,0);//向第二行首位子写数据

i=0;

while(Tem[i]!

='\0')

{

write_dat(Tem[i]);

i++;

}

flag=1;

//}

}

}

voidUART_SER(void)interrupt4//串口中断服务程序

{

while(RI)//接收到数据

{

if(flag==1)//字符串发送完毕

{

flag=0;

a=0;

//数据标志清零

i=0;//数据清零

while(Tem[i]!

='\0')//向lcd写空格

{

Tem[i]='';

i++;

}

}

RI=0;//清除标志位

Tem[a++]=SBUF;//读取缓冲区的值

}

}

 

AT指令集

进入AT指令的方法:

给模块上电,不配对的情况下,就是AT模式了。

指令间隔1S左右。

以上的RXD和TXD接错了,P3^0连接TXD,P3。

1连接RXD

出厂参数:

波特率9600N81,名字linvor,密码1234

1、测试通讯

发送:

AT(返回OK,一秒左右发一次)

返回:

OK

2、改蓝牙串口通讯波特率

发送:

AT+BAUD1

返回:

OK1200

发送:

AT+BAUD2

返回:

OK2400

……

1---------1200

2---------2400

3---------4800

4---------9600(默认就是这个设置)

5---------19200

6---------38400

7---------57600

8---------115200

9---------230400

A---------460800

B---------921600

C---------1382400

Ø设置超过115200后用电脑无法使用,要用单片机编程于高于115200才能使用此波特

率和重新发AT命令设低波特率

Ø用AT命令设好波特率后,下次上电使用不需再设,可以掉电保存波特率

3、改蓝牙名称

发送:

AT+NAMEname

返回:

OKname

参数name:

所要设置的当前名称,即蓝牙被搜索到的名称。

20个字符以内。

例:

发送AT+NAMEbill_gates

返回OKname

这时蓝牙名称改为bill_gates

参数可以掉电保存,只需修改一次。

PDA端刷新服务可以看到更改后的蓝牙名称,名字

不可超过20个字符。

4、改蓝牙配对密码

发送:

AT+PINxxxx

返回:

OKsetpin

参数xxxx:

所要设置的配对密码,4个数字,此命令可用于从机或主机。

从机是适配器或手

机弹出要求输入配对密码窗口时,手工输入此参数就可以连接从机。

主蓝牙模块搜索从机后,

如果密码正确,则会自动配对,主模块除了可以连接配对从模块外,其他产品包含从模块的

时候也可以连接配对,比如含蓝牙的数码相机,蓝牙GPS,蓝牙串口打印机,等等,特别地,

蓝牙GPS为典型例子

例:

发送:

AT+PIN8888

返回:

OKsetpin

这时蓝牙配对密码改为8888,模块在出厂时的默认配对密码是1234。

参数可以掉电保存,只需修改一次。

5、无校验设置指令:

(V1.5版后支持)

AT+PN(默认就是这个设置)

6、偶校验设置指令:

(V1.5版后支持)

AT+PE

7、奇校验设置指令:

(V1.5版后支持)

AT+PO

8、获取AT指令版本命令:

AT+VERSION

返回LinvorV1.n则为正品

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2