一、实验原理(如下图)
1、该模块与单片机采用串口通信,手机连接蓝牙模块,通过无线信号发送数据给蓝牙模块,蓝牙模块收到数据后会把数据通过串口发送给单片机,单片机收到数据以后,就可以对数据进行处理,完成单片机对外设的控制。
2、此实验需要把蓝牙模块配置为从机模式,若模块出厂默认就是从机模式,就不需要配置了,(如果不知道默认是什么模式,可以询问客服),主从一体的模块,可用AT指令配置成为从机模式就可以了,过程也比较简单,B站上面有很多教程。
大致步骤:把单片机和蓝牙模块对应的引脚用导线连接好,下载好程序,给单片机上电,就可以在手机上搜到蓝牙模块发出的无线信号了。
二、关键代码
/*串口初始化程序*/
void Uart_Init() //9600bps@11.0592MHz
{
PCON |= 0x80; //使能波特率加倍
SCON = 0x50; //接收8位数据
TMOD &= 0x0F; //清除定时器1模式
TMOD |= 0x20;
TL1 = 0xFA; //设定初始值
TH1 = 0xFA; //设定初始值
ET1 = 0;
TR1 = 1;
EA = 1;
ES =1 ;
}
/*舵机驱动中断服务函数*/
void Timer0() interrupt 1
{
TL0 = 0x33;
TH0 = 0xFE; //重新赋计数初值为0.5ms
count++; //计次,每500us count+1
count%=40; //周期为20ms
if(count< PWM_count)
{
SG_PWM=1;
}
else
{
SG_PWM=0;
}
}
/*串口中断服务函数*/
void UART_Routine() interrupt 4
{
if(RI==1) //如果接收中断标志位为1
{
P1=SBUF; //发送的数据SBUF,赋给P1
if(P1==0X01) //0x01这个值可以通过蓝牙调试器编辑模式设置
{
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; //接收中断标志位软件清零
}
}