单片机蓝牙模块的使用,以及配置控制舵机的源码
一、实验原理(如下图)
1、该模块与单片机采用串口通信,手机连接蓝牙模块,通过无线信号发送数据给蓝牙模块,蓝牙模块收到数据后会把数据通过串口(USART)发送给单片机,单片机收到数据(SUBF)以后,就可以对数据进行处理,解析,从而完成单片机对外设的控制。这里注意手机端发送的一般是16进制数据(HEX),或者也可以设置为发送ASCLL格式的数据。
2、此实验需要把蓝牙模块配置为从机模式,若模块出厂默认就是从机模式,就不需要配置了,(如果不知道默认是什么模式,可以查芯片手册或询问客服),如果是主从一体的模块,可用AT指令配置成为从机模式就可以了,过程也比较简单,B站上面有很多教程。(主机发送数据,从机接受数据)
源码:
主函数(注释紊乱是编码的问题,复制到Keil5里选择ANSI编码就没问题了)
/*
Ä£Äâ¶æ»ú¿ØÖÆÔÀí£º0~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; //ÐźſØÖÆÒý½Å
unsigned char count=0; //¼Æ´Î ¸³³õֵΪ0
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 //Ìرð×¢Òâ´Ë´¦£¬0--ÍⲿÖжÏ0£¬1--¶¨Ê±Æ÷ÖжÏ0£¬2--ÍⲿÖжÏ1£¬3--¶¨Ê±Æ÷ÖжÏ1£¬4--´®ÐпÚÖжÏ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Õâ¸öÖµ¿ÉÒÔͨ¹ýÀ¶ÑÀµ÷ÊÔÆ÷±à¼Ä£Ê½ÉèÖÃ
{ //ͬÑùµÄ£¬ÏÂÃæµÄ0X02,0X03,0X04,,,Ò²ÊÇ¿ÉÒÔͨ¹ýÀ¶ÑÀµ÷ÊÔÆ÷±à¼Ä£Ê½ÉèÖÃ
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; //½ÓÊÕÖжϱê־λÈí¼þÇåÁã
}
}
串口初始化:
#include <REGX52.H>
void Uart_Init() //9600bps@11.0592MHz
{
PCON |= 0x80; //ʹÄܲ¨ÌØÂʼӱ¶
SCON = 0x50; //½ÓÊÕ8λÊý¾Ý
TMOD &= 0x0F; //Çå³ý¶¨Ê±Æ÷1ģʽ
TMOD |= 0x20; //É趨¶¨Ê±Æ÷8Ϊ×Ô¶¯
TL1 = 0xFA; //É趨³õʼֵ
TH1 = 0xFA; //É趨³õʼֵ
ET1 = 0;
TR1 = 1;
EA = 1;
ES =1 ;
}
定时器0初始化:
#include <REGX52.H>
void Timer0_Init()
{
TMOD &= 0xF0; //ÉèÖö¨Ê±Æ÷ģʽ
TMOD |= 0x01; //ÉèÖö¨Ê±Æ÷ģʽ
TL0 = 0x33; //ÉèÖö¨Ê±³õʼֵ
TH0 = 0xFE; //ÉèÖö¨Ê±³õʼֵ
ET0 = 1; //´ò¿ª¶¨Ê±Æ÷0µÄÖжÏ
TF0 = 0; //Çå³ýÒç³öÖжϱê־λ
TR0 = 1; //¶¨Ê±Æ÷0¿ªÊ¼¼Æʱ
EA = 1; //¿ª×ÜÖжÏ
}
大致步骤:
1,把单片机和蓝牙模块对应的引脚用导线连接好,下载好程序,给单片机上电
2,在手机上搜到蓝牙模块发出的无线信号了。
注:手机上一般下载一个蓝牙调试助手,可以向单片机发送数据就行。就是有部分软件是有编辑按钮的设置,就是可以自定义某一个按钮发送一个事先定义好的HEX/ASCLL数据。这样,事先约定好单片机与手机蓝牙之间的通信协议就能轻松控制啦。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!