找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1373|回复: 0
收起左侧

STC单片机蓝牙点亮LED代码与调试,V1

[复制链接]
ID:598987 发表于 2022-7-11 21:50 | 显示全部楼层 |阅读模式
硬件
l JDY-23蓝牙模块(配有官网的安卓和ios软件)
l STC12c2052AD
l 11.0592晶振,30pf陶瓷电容x2
l LED,杜邦线若干

软件
l 串口调试工具,电脑直接使用STC自带的比较方便,其它的也可以下面附件压缩包里面也有
l Ios使用的是jdy-23自带的JDY-LED(应用商店搜索)
l 安卓附件里面带有jdy官方软件,或者其他蓝牙串口调试工具都可以

stc波特率计算器

stc波特率计算器


接线
l 晶振和电容,最小系统对应接
l 蓝牙模块烧录器接线一样,R ----> TT ----> R
l LED,正极 ----> vcc,负极 ----> P3.7
线路简单就没必要配图了


对我来说难点
1. 蓝牙模块的操作,实际上就是串口的操作
2. 串口十六进制,ASCII码,字符串之间的关系
3. 蓝牙中断(串口中断)相关寄存器配置(有的是现成的模块,不过还是要自己消化一下)
(1) STC单片机可以在STC软件的”波特率计算器”,里面直接生成方便。(生成的话要自己添加EA=1(总中断),ES=1(串口中断)

实际效果
1. 通过字符串 o,点亮LED(发送低电平),发送c,关闭LED(发送高电平)
(1) 也可以发送对应的十六进制,例如o ----> ASCII11110进制) ----> 6f16进制)。所以发送f6等同于发送o(可以直接找网站转码省的自己算)

存在的问题
  • 不稳定,虽然发送之后可以点亮LED,有时候会稳定常亮。但是有时候会闪烁一下之后LED就熄灭了(有人知道是啥问题吗?)

单片机代码
代码很简单,就是想记录一下自己的学习(论坛的代码格式真的太烂了,将就看看吧)
  1. #include "reg52.h"
  2. #include <intrins.h>

  3. sfr AUXR = 0x8E;  //reg52.h这个库未对AUXR定义,这里额外定义一下

  4. sbit led = P3^7;

  5. char cmd;

  6. void UartInit()     //9600bps@11.0592MHz
  7. {
  8.     PCON &= 0x7F;       //波特率不倍速
  9.     SCON = 0x50;        //8位数据,可变波特率
  10.     AUXR &= 0xBF;       //定时器1时钟为Fosc/12,即12T
  11.     AUXR &= 0xFE;       //串口1选择定时器1为波特率发生器
  12.     TMOD &= 0x0F;       //清除定时器1模式位
  13.     TMOD |= 0x20;       //设定定时器1为8位自动重装方式
  14.     TL1 = 0xFD;     //设定定时初值
  15.     TH1 = 0xFD;     //设定定时器重装值
  16.     ET1 = 0;        //禁止定时器1中断
  17.     TR1 = 1;        //启动定时器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接收到数据置1,只能通过软件设置恢复成0
  55.   // 接受完数据处理之后需要恢复0,不然无法接受后续数据
  56.         RI = 0;
  57. }
复制代码

51hei.png
JDY-23 5.0BLE蓝牙模块手册-V1.2版本.7z (2.26 MB, 下载次数: 23)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表