硬件 l JDY-23藍牙模塊(配有官網的安卓和ios軟件) l STC12c2052AD l 11.0592晶振,30pf陶瓷電容x2 l LED,杜邦線若干
軟件l 串口調試工具,電腦直接使用STC自帶的比較方便,其它的也可以下面附件壓縮包里面也有 l Ios使用的是jdy-23自帶的JDY-LED(應用商店搜索) l 安卓附件里面帶有jdy官方軟件,或者其他藍牙串口調試工具都可以
20220711_215937_378_copy.png (13.76 KB, 下載次數: 31)
下載附件
stc波特率計算器
2022-7-11 22:04 上傳
接線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;
- }
復制代碼
51hei.png (7.87 KB, 下載次數: 23)
下載附件
2022-7-12 00:02 上傳
JDY-23 5.0BLE藍牙模塊手冊-V1.2版本.7z
(2.26 MB, 下載次數: 24)
2022-7-12 00:02 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|