一、实验原理(如下图)
? 1、该模块与单片机采用串口通信,手机连接蓝牙模块,通过无线信号发送数据给蓝牙模块,蓝牙模块收到数据后会把数据通过串口(USART)发送给单片机,单片机收到数据(SUBF)以后,就可以对数据进行处理,解析,从而完成单片机对外设的控制。这里注意手机端发送的一般是16进制数据(HEX),或者也可以设置为发送ASCLL格式的数据。
? 2、此实验需要把蓝牙模块配置为从机模式,若模块出厂默认就是从机模式,就不需要配置了,(如果不知道默认是什么模式,可以查芯片手册或询问客服),如果是主从一体的模块,可用AT指令配置成为从机模式就可以了,过程也比较简单,B站上面有很多教程。(主机发送数据,从机接受数据)
源码:
主函数(注释紊乱是编码的问题,复制到Keil5里选择ANSI编码就没问题了)
/*
?£?a???ú?????-àí£o0~180??
0.5ms-----0?è
1.0ms-----45?è
1.5ms-----90?è
2.0ms-----135?è
2.5ms-----180?è
*/
#include <REGX52.H>
#include "timer0.h"
#include "Uart.h"
sbit SG_PWM=P3^7; //D?o?????òy??
unsigned char count=0; //??′? ?33??μ?a0
unsigned char PWM_count=0; //0--0?è£?2--45?è£?4--90?è£?6--135?è£?8--180?è
void main()
{
Timer0_Init();
Uart_Init();
while(1)
{
}
}
void Timer0() interrupt 1 //ì?±e×¢òa′?′|£?0--ía2??D??0£?1--?¨ê±?÷?D??0£?2--ía2??D??1£?3--?¨ê±?÷?D??1£?4--′?DD?ú?D??1
{
TL0 = 0x33;
TH0 = 0xFE; //??D??3??êy3??μ?a0.5ms
count++; //??′?£???500us count+1
count%=40; //?ü?ú?a20ms
if(count<PWM_count)
{
SG_PWM=1;
}
else
{
SG_PWM=0;
}
}
void UART_Routine() interrupt 4 //′??ú?D??·t??oˉêy
{
if(RI==1) //è?1??óê??D??±ê?????a1
{
P1=SBUF; //·¢?íμ?êy?YSBUF£??3??P1
if(P1==0X01) //0x01?a???μ?éò?í¨1yà??àμ÷ê??÷±à?-?£ê?éè??
{ //í??ùμ?£?????μ?0X02,0X03,0X04,,,ò2ê??éò?í¨1yà??àμ÷ê??÷±à?-?£ê?éè??
PWM_count=1;
}
if(P1==0X02)
{
PWM_count=2;
}
if(P1==0X03)
{
PWM_count=3;
}
if(P1==0X04)
{
PWM_count=4;
}
if(P1==0X05)
{
PWM_count=5;
}
RI=0; //?óê??D??±ê????èí?t??á?
}
}
串口初始化:
#include <REGX52.H>
void Uart_Init() //9600bps@11.0592MHz
{
PCON |= 0x80; //ê1?ü2¨ì??ê?ó±?
SCON = 0x50; //?óê?8??êy?Y
TMOD &= 0x0F; //??3y?¨ê±?÷1?£ê?
TMOD |= 0x20; //éè?¨?¨ê±?÷8?a×??ˉ
TL1 = 0xFA; //éè?¨3?ê??μ
TH1 = 0xFA; //éè?¨3?ê??μ
ET1 = 0;
TR1 = 1;
EA = 1;
ES =1 ;
}
定时器0初始化:
#include <REGX52.H>
void Timer0_Init()
{
TMOD &= 0xF0; //éè???¨ê±?÷?£ê?
TMOD |= 0x01; //éè???¨ê±?÷?£ê?
TL0 = 0x33; //éè???¨ê±3?ê??μ
TH0 = 0xFE; //éè???¨ê±3?ê??μ
ET0 = 1; //′ò?a?¨ê±?÷0μ??D??
TF0 = 0; //??3yò?3??D??±ê????
TR0 = 1; //?¨ê±?÷0?aê???ê±
EA = 1; //?a×ü?D??
}
大致步骤:
1,把单片机和蓝牙模块对应的引脚用导线连接好,下载好程序,给单片机上电
2,在手机上搜到蓝牙模块发出的无线信号了。
注:手机上一般下载一个蓝牙调试助手,可以向单片机发送数据就行。就是有部分软件是有编辑按钮的设置,就是可以自定义某一个按钮发送一个事先定义好的HEX/ASCLL数据。这样,事先约定好单片机与手机蓝牙之间的通信协议就能轻松控制啦。
|