蓝牙控制一位数码管显示

尝试使用HC-08蓝牙模块控制1位数码管的显示,案例中涉及到的电路相对简单,程序也较为直白。

元器件介绍

一位数码管

一位数码管

一位数码管一共有10个引脚,其中两侧最中间的引脚为共极引脚,由此分为共阴极和共阳极两种,本案例用的共阳极;所谓共级,因为数码管的原理就是将8个led并连起来的,所以有一极公用,另一极控制明灭。共阴极数码管阴极接1.0kΩ电阻再接GND,其余接控制引脚;共阳极数码管阳极接1.0kΩ电阻再接+5V或+3.3V,其余接控制引脚。其中电阻是分压限流作用,防止数码管烧坏,因为前面提到数码管实质就是LED,所以导通时电阻极小,需注意使用以防烧坏。

HC-08蓝牙模块

HC08蓝牙模块

基于Bluetooth Specification V4.0 BLE蓝牙协议的数传模块。 集成了邮票封装孔和排针焊接孔,既可以贴片封装,也又可以焊接排针,很方便嵌入应用系统之内。支持广播模式,自定义UUID。

  • 引脚:

RXD、 TXD、GND、VCC、KEY、STATE

开发板

暂不介绍

连接电路图

下面是电路图的连接

电路连接图
使用的引脚为2-9

【注意】

1.上传程序之前先不要连接RX、TX引脚,上传之后在连接,否则会失败!

2.断开电源再连接,防止短路烧坏开发板、蓝牙模块、数码管

源代码

/*
HC-08蓝牙模块控制数码管显示
Edited at 2021-11-10 8:00:00
https://app.hyz.cool
该程序将展示如何利用HC-08蓝牙模块通过手机蓝牙功能来控制数码管的显示。
元器件:
1.开发板
2.HC-08蓝牙模块
3.一位共阳极数码管
4.面包板
5.公对公杜邦线
电路连接见上文
*/
//引脚数
const int Sata_Size = 8;
//引脚数组
int Satas[Sata_Size] = {2,3,4,5,6,7,8,9};

//数码管数字对应引脚数
const int Num_0_Size=6;//数字0
const int Num_1_Size=2;//数字1
const int Num_2_Size=5;//数字2
const int Num_3_Size=5;//数字3
const int Num_4_Size=4;//数字4
const int Num_5_Size=5;//数字5
const int Num_6_Size=6;//数字6
const int Num_7_Size=3;//数字7
const int Num_8_Size=7;//数字8
const int Num_9_Size=6;//数字9
const int Num_O_Size=4;//字母o或O
const int Num_F_Size=4;//数字f或F
const int Num_All_Size=8;//全部

//数码管数字对应引脚数组
const int Num_0[Num_0_Size]={2,3,5,6,7,8};//数字0
const int Num_1[Num_1_Size]={7,8};//数字1
const int Num_2[Num_2_Size]={2,3,4,6,7};//数字2
const int Num_3[Num_3_Size]={3,4,6,7,8};//数字3
const int Num_4[Num_4_Size]={4,5,7,8};//数字4
const int Num_5[Num_5_Size]={3,4,5,6,8};//数字5
const int Num_6[Num_6_Size]={2,3,4,5,6,8};//数字6
const int Num_7[Num_7_Size]={6,7,8};//数字7
const int Num_8[Num_8_Size]={2,3,4,5,6,7,8};//数字8
const int Num_9[Num_9_Size]={3,4,5,6,7,8};//数字9
const int Num_O[Num_O_Size]={2,3,4,8};//字母o或O
const int Num_F[Num_F_Size]={2,4,5,6};//数字f或F
const int Num_All[Num_All_Size]={2,3,4,5,6,7,8,9};//全部
//字符变量
char serialData;
//延迟时间
const int delay_time = 100;

void setup() {
  //设置波特率
  Serial.begin(9600);
  //设置引脚为输出模式
  setMode(); 
  //清空数码管显示
  clearView();
}
 
void loop(){
  if( Serial.available()>0 ){ 
    //读取缓存区的一个字符
    serialData =  Serial.read();  
    //数码管显示该字符
    viewC(serialData);
    Serial.print("Got Char -> ");
    Serial.println(serialData);
  }
}
void setMode(){
  for(int index =0;index<8;index++){
    Serial.println(index);
    //设置引脚为输出模式
    pinMode(index+2,OUTPUT);
  }
}
void clearView(){
  //数码管不显示
  kill(Satas,Sata_Size);
}

void viewC(char c){
  int *satas;  //声明一个指针
  int size = 0;
  switch(c){
      case '0':{
        size = Num_0_Size;
        satas = new int[size];
        for(int i = 0;i<size;i++){
          satas[i]=Num_0[i];
        }
        break;
      }
      case '1':{
        size = Num_1_Size;
        satas = new int[size];
        for(int i = 0;i<size;i++){
          satas[i]=Num_1[i];
        }
        break;
      }
      case '2':{
        size = Num_2_Size;
        satas = new int[size];
        for(int i = 0;i<size;i++){
          satas[i]=Num_2[i];
        }
        break;
      }
      case '3':{
        size = Num_3_Size;
        satas = new int[size];
        for(int i = 0;i<size;i++){
          satas[i]=Num_3[i];
        }
        break;
      }
      case '4':{
        size = Num_4_Size;
        satas = new int[size];
        for(int i = 0;i<size;i++){
          satas[i]=Num_4[i];
        }
        break;
      }
      case '5':{
        size = Num_5_Size;
        satas = new int[size];
        for(int i = 0;i<size;i++){
          satas[i]=Num_5[i];
        }
        break;
      }
      case '6':{
        size = Num_6_Size;
        satas = new int[size];
        for(int i = 0;i<size;i++){
          satas[i]=Num_6[i];
        }
        break;
      }
      case '7':{
        size = Num_7_Size;
        satas = new int[size];
        for(int i = 0;i<size;i++){
          satas[i]=Num_7[i];
        }
        break;
      }
      case '8':{
        size = Num_8_Size;
        satas = new int[size];
        for(int i = 0;i<size;i++){
          satas[i]=Num_8[i];
        }
        break;
      }
      case '9':{
        size = Num_9_Size;
        satas = new int[size];
        for(int i = 0;i<size;i++){
          satas[i]=Num_9[i];
        }
        break;
      }
      case 'o':
      case 'O':{
        size = Num_O_Size;
        satas = new int[size];
        for(int i = 0;i<size;i++){
          satas[i]=Num_O[i];
        }
        break;
      }
      case 'f':
      case 'F':{
        size = Num_F_Size;
        satas = new int[size];
        for(int i = 0;i<size;i++){
          satas[i]=Num_F[i];
        }
        break;
      }
      default:{
        size = Num_All_Size;
        satas = new int[size];
        for(int i = 0;i<size;i++){
          satas[i]=Num_All[i];
        }
        break;
      }
    }
  view(satas,size);
  delay(delay_time);
  kill(satas,size);
  delay(delay_time);
}

void view(int *satas,int size){
  //显示数字
  for(int index =0;index<size;index++){
    digitalWrite(*(satas+index),LOW);
  }
}
void kill(int *satas,int size){
  //不显示数字
  for(int index =0;index<size;index++){
    digitalWrite(*(satas+index),HIGH);
  }
}

c++

微信公众号原创文章传送门

2022-05-01 写了一个很简易的Markdown编辑器

2022-04-30 Java 生成二维码(已优化)

2022-04-30 Java 生成二维码

2022-04-30 写了一个纯前端的验证码

2022-04-30 Nuxtjs docker 部署

2022-04-30 续加仪的博客系统

2022-04-30 给他留言吧

2021-12-24 智能LED

2021-11-12 光敏电阻控制LED亮度

2021-11-11 蓝牙控制舵机(伺服电机)

2021-11-10 蓝牙控制一位数码管显示

2021-10-25 Dart 回调函数

2021.08.28 Web公式显示处理(一)

2021-07-24 写了一个文件传输工具

2021-03-23 Web Socket +Rtc 实现视频通话(二)

2021-03-22 对于实现视频通话(一)的补充

2021-03-21 Web Socket +Rtc 实现视频通话(一)

2021-02-03 Vuex实现组件间通讯

2021-02-03 Ansys 计算实例

2020.12.19 今日份日记

2020.12.13 docker 介绍及常见命令

2020.12.12 Swagger安全配置——用户名密码

2020.12.12 solr安全配置——用户名密码

2020.11.15 Spring Boot项目创建

2020.11.1 JavaScript网络爬虫之——英文文章

2020.9.15 今日份日记

2020.9.01 今日份日记

2020.8.07 今日份日记

2020.8.02 晚安

2020.7.31 今日份日记

2020.7.31 你还要我怎样

2020.7.24 乐谱收藏夹(一)

2020.7.24 下雨了

2020.7.21 米瑶留言小程序上线啦~

2020.7.21 微信小程序开发之——米瑶云音乐

2020.7.14 网站分享

2020.7.08 技术分享——批量修改文件名

2020.6.11 访寻

2020.5.21 来世

欢迎关注我的微信公众号

续加仪

打赏
  • 微信
  • 支付宝
评论
来发评论吧~
···

歌手: