【esp32】arduino-数码管

一、数码管类型

按发光二极管单元连接方式分为共阳型数码管和共阴型数码管,

区分:1、可通过查看数码管引脚类型

2、观察数码管点亮状态

3、查询数码管规格表

二、共阳型数码管

是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管

三、共阴型数码管

是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管

清屏函数

清屏函数即与平时的状态相反

//清屏函数
for (int i=0;i<4;i++) {
    digitalWrite(seg_array[i], HIGH);//位选线引脚高电平,不亮
  }
  
  for (int i=0;i<8;i++){
    digitalWrite(led_array[i], LOW);//段选线引脚低电平,不亮
  }
  1. 循环将位选线引脚的电平设置为 digitalWrite(seg_array[i], HIGH),将所有位选线引脚都设置为高电平,确保不会选中任何数码管。

  2. 循环将段选线引脚的电平设置为低电平,即 digitalWrite(led_array[i], LOW),确保所有数码管的段选线都不会点亮

通过执行这两个循环,可以将数码管清空,使其不显示任何数字。这样在之后的操作中,就可以根据需要选择特定的位选线和段选线的电平,以显示指定的数字。

四、动态显示数字

定义段选线引脚和位选线引脚

// 定义位选线引脚
int seg_1 = 5;
int seg_2 = 18;
int seg_3 = 19;
int seg_4 = 21;

// 定义位选线数组;
int seg_array[4] = {seg_1, seg_2, seg_3, seg_4};
// 定义段选线引脚
int a = 32;
int b = 25;
int c = 27;
int d = 12;
int e = 13;
int f = 33;
int g = 26;
int dp = 14;

// 定义段选线数组
int led_array[8] = {a, b, c, d, e, f, g, dp};

// 定义共阴极数码管不同数字对应逻辑电平的二维数组
int logic_array[10][8] = {
 //a, b, c, d, e, f, g, dp
  {1, 1, 1, 1, 1, 1, 0, 0}, // 0
  {0, 1, 1, 0, 0, 0, 0, 0}, // 1
  {1, 1, 0, 1, 1, 0, 1, 0}, // 2
  {1, 1, 1, 1, 0, 0, 1, 0}, // 3
  {0, 1, 1, 0, 0, 1, 1, 0}, // 4
  {1, 0, 1, 1, 0, 1, 1, 0}, // 5
  {1, 0, 1, 1, 1, 1, 1, 0}, // 6
  {1, 1, 1, 0, 0, 0, 0, 0}, // 7
  {1, 1, 1, 1, 1, 1, 1, 0}, // 8
  {1, 1, 1, 1, 0, 1, 1, 0}, // 9
  };

显示数字之前应该先判断选择哪个数码管

// 4 位数码管显示函数
void display_4_number(int number) {
  // 把输入的数字转化为 4 位数的数组
  if (number < 10000){
    // 获取每一位对应的数字
    /*
    4567
    4567 % 10 = 7
    4567 / 10 = 456
    456 % 10 = 6
    456 / 10 = 45
    45 % 10 = 5
    45 / 10 = 4
    4 % 10 = 4

    1 
    1 % 10 = 1
    1 / 10 = 0
    
    */
    // 定义格式化数组
    int number_array[4];

    // 使用循环获取数组元素
    for (int i=3;i>=0;i--) {
      number_array[i] = number % 10;
      number /= 10;
      }

    // 显示 4 位数字
    for (int i=0;i<4;i++) {
      display_number(i, number_array[i]);
      delay(5);
      }
    }
}

判断位选线之后判断段选线引脚,


// 显示数字的函数
void display_number(int order, int number) {

  // 清屏
  clear();

  // 把对应位选线的电平拉低
  digitalWrite(seg_array[order], LOW);//定义位选线

  // 显示数字
  for (int i=0;i<8;i++) {
    digitalWrite(led_array[i], logic_array[number][i]);//段选线数组和数字电平
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用数码管需要连接到ESP32-C3的引脚,可以使用任何数字引脚,例如GPIO0~GPIO19。 以下是一个基本的示例代码,使用数字引脚连接到共阴极数码管: ```c++ #include <Arduino.h> // 数码管引脚定义 #define A_PIN 2 #define B_PIN 3 #define C_PIN 4 #define D_PIN 5 #define E_PIN 6 #define F_PIN 7 #define G_PIN 8 #define DP_PIN 9 // 数码管数字定义 const byte DIGITS[] = { B11111100, // 0 B01100000, // 1 B11011010, // 2 B11110010, // 3 B01100110, // 4 B10110110, // 5 B10111110, // 6 B11100000, // 7 B11111110, // 8 B11110110 // 9 }; void setup() { // 设定引脚模式 pinMode(A_PIN, OUTPUT); pinMode(B_PIN, OUTPUT); pinMode(C_PIN, OUTPUT); pinMode(D_PIN, OUTPUT); pinMode(E_PIN, OUTPUT); pinMode(F_PIN, OUTPUT); pinMode(G_PIN, OUTPUT); pinMode(DP_PIN, OUTPUT); // 初始化数码管,显示数字0 digitalWrite(A_PIN, HIGH); digitalWrite(B_PIN, HIGH); digitalWrite(C_PIN, HIGH); digitalWrite(D_PIN, HIGH); digitalWrite(E_PIN, HIGH); digitalWrite(F_PIN, HIGH); digitalWrite(G_PIN, LOW); digitalWrite(DP_PIN, HIGH); } void loop() { // 显示 0~9 的数字 for (int i = 0; i < 10; i++) { displayDigit(i); delay(1000); } } // 显示数字 void displayDigit(int digit) { if (digit < 0 || digit > 9) return; byte segments = DIGITS[digit]; digitalWrite(A_PIN, bitRead(segments, 0)); digitalWrite(B_PIN, bitRead(segments, 1)); digitalWrite(C_PIN, bitRead(segments, 2)); digitalWrite(D_PIN, bitRead(segments, 3)); digitalWrite(E_PIN, bitRead(segments, 4)); digitalWrite(F_PIN, bitRead(segments, 5)); digitalWrite(G_PIN, bitRead(segments, 6)); digitalWrite(DP_PIN, HIGH); } ``` 在这个示例中,我们使用共阴极数码管,并将它连接到ESP32-C3的数字引脚。我们还定义了一个数字数组,包含每个数字的段式显示模式。 在setup()函数中,我们将所有的引脚设置为输出模式,并初始化数码管以显示数字0。 在loop()函数中,我们使用displayDigit()函数显示0~9的数字。该函数接受一个数字参数,并设置数码管的引脚以显示相应的数字。 在displayDigit()函数中,我们使用DIGITS数组获取数字对应的段式显示模式,并设置数码管的引脚以显示该数字。 您可以根据需要修改示例代码以显示您想要的数字。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值