找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

帖子
查看: 2453|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

STC單片機(jī)藍(lán)牙點(diǎn)亮LED代碼與調(diào)試,V1

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
硬件
l JDY-23藍(lán)牙模塊(配有官網(wǎng)的安卓和ios軟件)
l STC12c2052AD
l 11.0592晶振,30pf陶瓷電容x2
l LED,杜邦線若干

軟件
l 串口調(diào)試工具,電腦直接使用STC自帶的比較方便,其它的也可以下面附件壓縮包里面也有
l Ios使用的是jdy-23自帶的JDY-LED(應(yīng)用商店搜索)
l 安卓附件里面帶有jdy官方軟件,或者其他藍(lán)牙串口調(diào)試工具都可以


接線
l 晶振和電容,最小系統(tǒng)對(duì)應(yīng)接
l 藍(lán)牙模塊燒錄器接線一樣,R ----> T,T ----> R
l LED,正極 ----> vcc,負(fù)極 ----> P3.7
線路簡(jiǎn)單就沒必要配圖了


對(duì)我來(lái)說(shuō)難點(diǎn)
1. 藍(lán)牙模塊的操作,實(shí)際上就是串口的操作
2. 串口十六進(jìn)制,ASCII碼,字符串之間的關(guān)系
3. 藍(lán)牙中斷(串口中斷)相關(guān)寄存器配置(有的是現(xiàn)成的模塊,不過(guò)還是要自己消化一下)
(1) STC單片機(jī)可以在STC軟件的”波特率計(jì)算器”,里面直接生成方便。(生成的話要自己添加EA=1(總中斷),ES=1(串口中斷)

實(shí)際效果
1. 通過(guò)字符串 o,點(diǎn)亮LED(發(fā)送低電平),發(fā)送c,關(guān)閉LED(發(fā)送高電平)
(1) 也可以發(fā)送對(duì)應(yīng)的十六進(jìn)制,例如o ----> ASCII11110進(jìn)制) ----> 6f16進(jìn)制)。所以發(fā)送f6等同于發(fā)送o(可以直接找網(wǎng)站轉(zhuǎn)碼省的自己算)

存在的問(wèn)題
  • 不穩(wěn)定,雖然發(fā)送之后可以點(diǎn)亮LED,有時(shí)候會(huì)穩(wěn)定常亮。但是有時(shí)候會(huì)閃爍一下之后LED就熄滅了(有人知道是啥問(wèn)題嗎?)

單片機(jī)代碼
代碼很簡(jiǎn)單,就是想記錄一下自己的學(xué)習(xí)(論壇的代碼格式真的太爛了,將就看看吧)
  1. #include "reg52.h"
  2. #include <intrins.h>

  3. sfr AUXR = 0x8E;  //reg52.h這個(gè)庫(kù)未對(duì)AUXR定義,這里額外定義一下

  4. sbit led = P3^7;

  5. char cmd;

  6. void UartInit()     //9600bps@11.0592MHz
  7. {
  8.     PCON &= 0x7F;       //波特率不倍速
  9.     SCON = 0x50;        //8位數(shù)據(jù),可變波特率
  10.     AUXR &= 0xBF;       //定時(shí)器1時(shí)鐘為Fosc/12,即12T
  11.     AUXR &= 0xFE;       //串口1選擇定時(shí)器1為波特率發(fā)生器
  12.     TMOD &= 0x0F;       //清除定時(shí)器1模式位
  13.     TMOD |= 0x20;       //設(shè)定定時(shí)器1為8位自動(dòng)重裝方式
  14.     TL1 = 0xFD;     //設(shè)定定時(shí)初值
  15.     TH1 = 0xFD;     //設(shè)定定時(shí)器重裝值
  16.     ET1 = 0;        //禁止定時(shí)器1中斷
  17.     TR1 = 1;        //啟動(dòng)定時(shí)器1
  18.     EA = 1;         //開啟總中斷
  19.     ES = 1;        //開啟串口中斷
  20. }

  21. void send_byte(char data_msg)
  22. {
  23.     SBUF = data_msg;
  24.     while(!TI);
  25.     TI = 0;
  26. }

  27. void send_msg(char* data_msg)
  28. {
  29.     while(*data_msg != '\0')
  30.     {
  31.         send_byte(*data_msg);
  32.         data_msg++;
  33.     }
  34. }

  35. void main()
  36. {
  37.     UartInit();

  38.     led = 1;

  39.     while(1);
  40. }

  41. void UART_Routine() interrupt 4
  42. {
  43.     cmd = SBUF;
  44.     if(cmd == 'o')
  45.     {
  46.         led = 0;
  47.         send_msg("turn on.\r\n");
  48.     }
  49.     if(cmd == 'c')
  50.     {
  51.         led = 1;
  52.         send_msg("turn off.\r\n");
  53.     }
  54.   // SBUF接收到數(shù)據(jù)置1,只能通過(guò)軟件設(shè)置恢復(fù)成0
  55.   // 接受完數(shù)據(jù)處理之后需要恢復(fù)0,不然無(wú)法接受后續(xù)數(shù)據(jù)
  56.         RI = 0;
  57. }
復(fù)制代碼


JDY-23 5.0BLE藍(lán)牙模塊手冊(cè)-V1.2版本.7z (2.26 MB, 下載次數(shù): 24)



評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表