蓝牙模块学习笔记Word格式文档下载.docx
《蓝牙模块学习笔记Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《蓝牙模块学习笔记Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
串口中断服务程序中,检测到flag为1时,这证明数据显示成功。
此时应当清屏!
清屏方法:
while(Tem[i]!
='
\0'
)
{
Tem[i]='
'
;
i++;
}
/***********************************************************
STC89C52RC与HC-06蓝牙连线:
RXDTXD
TXDRXD
其他连线:
P2.0、P2.1、P2.3分别接一个指示灯
***********************************************************/
#include<
reg52.h>
intrins.h>
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>
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);
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;
2'
//收到字符2,指示灯1灭
led2=1;
beep=1;
3'
//收到字符3,指示灯0、1亮
led1=0;
led2=0;
4'
//收到字符4,指示灯0、1灭
5'
//收到字符5,指示灯3亮
led3=0;
default:
//其他,灯全灭
led3=1;
}
以下是蓝牙接收字符串并向12864显示程序
/*****************************************************************************8
*任广俊
*日期:
12.17
*蓝牙接收并显示在12864上,1,2,3控制发光二极管
*4,5控制继电器
******************************************************************************/
#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串行
//蜂鸣器
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>
m--)
for(n=110;
n>
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;
//写数据到LCD:
RS=H;
E=高脉冲D0-D7数据
voidwrite_dat(uchardat)
LCD_RS=1;
P0=dat;
//设定显示位置
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);
//基本指令喜僮?
write_cmd(0x0C);
//显示开关光标
write_cmd(0x01);
//清除lcd显示内容
/*******************************************************************************************************************/
voidBT_init()//蓝牙串口初始化
//关中串口中断
//REN=1允许串口接收状态,串口工作方式1
//10位UART(1起始位,8数据位,1停止位?
无奇偶校检
//定时器1,工作方式2
TH1=TL1=0xFD;
//设置波特率9600
PCON&
//允许串口中断
//发送标志0
//接收标志0
EA=1;
//开总中断
//初始化为全亮
}
{
write_dat(a);
if(c%2)//发送指示灯
delay(500);
}
BT_init();
//Bluetooth初始化
lcd_init();
//液晶显示初始化
/***********************************************************************************
液晶显示区
*****************************************************************************************/
//write_cmd(0x01);
lcd_pos(0,0);
//向第一行首位置写数据
i=0;
while(dis1[i]!
write_dat(dis1[i]);
i++;
}
lcd_pos(1,0);
//向第二行首位子写数据
while(dis2[i]!
write_dat(dis2[i]);
delay(10);
lcd_pos(2,0);
while(Tem[i]!
write_dat(Tem[i]);
flag=1;
//}
voidUART_SER(void)interrupt4//串口中断服务程序
while(RI)//接收到数据
if(flag==1)//字符串发送完毕
flag=0;
a=0;
//数据标志清零
i=0;
//数据清零
while(Tem[i]!
)//向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
这时蓝牙配对密码改为8888,模块在出厂时的默认配对密码是1234。
5、无校验设置指令:
(V1.5版后支持)
AT+PN(默认就是这个设置)
6、偶校验设置指令:
AT+PE
7、奇校验设置指令:
AT+PO
8、获取AT指令版本命令:
AT+VERSION
返回LinvorV1.n则为正品