硬件 l JDY-23蓝牙模块(配有官网的安卓和ios软件) l STC12c2052AD l 11.0592晶振,30pf陶瓷电容x2 l LED,杜邦线若干
软件l 串口调试工具,电脑直接使用STC自带的比较方便,其它的也可以下面附件压缩包里面也有 l Ios使用的是jdy-23自带的JDY-LED(应用商店搜索) l 安卓附件里面带有jdy官方软件,或者其他蓝牙串口调试工具都可以
stc波特率计算器
接线l 晶振和电容,最小系统对应接 l 蓝牙模块烧录器接线一样,R ----> T,T ----> R l LED,正极 ----> vcc,负极 ----> P3.7 线路简单就没必要配图了
对我来说难点1. 蓝牙模块的操作,实际上就是串口的操作 2. 串口十六进制,ASCII码,字符串之间的关系 3. 蓝牙中断(串口中断)相关寄存器配置(有的是现成的模块,不过还是要自己消化一下) (1) STC单片机可以在STC软件的”波特率计算器”,里面直接生成方便。(生成的话要自己添加EA=1(总中断),ES=1(串口中断)
实际效果1. 通过字符串 o,点亮LED(发送低电平),发送c,关闭LED(发送高电平) (1) 也可以发送对应的十六进制,例如o ----> ASCII的111(10进制) ----> 6f(16进制)。所以发送f6等同于发送o(可以直接找网站转码省的自己算)
存在的问题 - 不稳定,虽然发送之后可以点亮LED,有时候会稳定常亮。但是有时候会闪烁一下之后LED就熄灭了(有人知道是啥问题吗?)
单片机代码代码很简单,就是想记录一下自己的学习(论坛的代码格式真的太烂了,将就看看吧) - #include "reg52.h"
- #include <intrins.h>
- sfr AUXR = 0x8E; //reg52.h这个库未对AUXR定义,这里额外定义一下
- sbit led = P3^7;
- char cmd;
- void UartInit() //9600bps@11.0592MHz
- {
- PCON &= 0x7F; //波特率不倍速
- SCON = 0x50; //8位数据,可变波特率
- AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T
- AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
- TMOD &= 0x0F; //清除定时器1模式位
- TMOD |= 0x20; //设定定时器1为8位自动重装方式
- TL1 = 0xFD; //设定定时初值
- TH1 = 0xFD; //设定定时器重装值
- ET1 = 0; //禁止定时器1中断
- TR1 = 1; //启动定时器1
- EA = 1; //开启总中断
- ES = 1; //开启串口中断
- }
- void send_byte(char data_msg)
- {
- SBUF = data_msg;
- while(!TI);
- TI = 0;
- }
- void send_msg(char* data_msg)
- {
- while(*data_msg != '\0')
- {
- send_byte(*data_msg);
- data_msg++;
- }
- }
- void main()
- {
- UartInit();
- led = 1;
- while(1);
- }
- void UART_Routine() interrupt 4
- {
- cmd = SBUF;
- if(cmd == 'o')
- {
- led = 0;
- send_msg("turn on.\r\n");
- }
- if(cmd == 'c')
- {
- led = 1;
- send_msg("turn off.\r\n");
- }
- // SBUF接收到数据置1,只能通过软件设置恢复成0
- // 接受完数据处理之后需要恢复0,不然无法接受后续数据
- RI = 0;
- }
复制代码
JDY-23 5.0BLE蓝牙模块手册-V1.2版本.7z
(2.26 MB, 下载次数: 24)
|