• 【esp32】arduino-数码管


    一、数码管类型

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

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

    2、观察数码管点亮状态

    3、查询数码管规格表

    二、共阳型数码管

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

    三、共阴型数码管

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

    清屏函数

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

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

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

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

    四、动态显示数字

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

    1. // 定义位选线引脚
    2. int seg_1 = 5;
    3. int seg_2 = 18;
    4. int seg_3 = 19;
    5. int seg_4 = 21;
    6. // 定义位选线数组;
    7. int seg_array[4] = {seg_1, seg_2, seg_3, seg_4};
    8. // 定义段选线引脚
    9. int a = 32;
    10. int b = 25;
    11. int c = 27;
    12. int d = 12;
    13. int e = 13;
    14. int f = 33;
    15. int g = 26;
    16. int dp = 14;
    17. // 定义段选线数组
    18. int led_array[8] = {a, b, c, d, e, f, g, dp};
    19. // 定义共阴极数码管不同数字对应逻辑电平的二维数组
    20. int logic_array[10][8] = {
    21. //a, b, c, d, e, f, g, dp
    22. {1, 1, 1, 1, 1, 1, 0, 0}, // 0
    23. {0, 1, 1, 0, 0, 0, 0, 0}, // 1
    24. {1, 1, 0, 1, 1, 0, 1, 0}, // 2
    25. {1, 1, 1, 1, 0, 0, 1, 0}, // 3
    26. {0, 1, 1, 0, 0, 1, 1, 0}, // 4
    27. {1, 0, 1, 1, 0, 1, 1, 0}, // 5
    28. {1, 0, 1, 1, 1, 1, 1, 0}, // 6
    29. {1, 1, 1, 0, 0, 0, 0, 0}, // 7
    30. {1, 1, 1, 1, 1, 1, 1, 0}, // 8
    31. {1, 1, 1, 1, 0, 1, 1, 0}, // 9
    32. };

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

    1. // 4 位数码管显示函数
    2. void display_4_number(int number) {
    3. // 把输入的数字转化为 4 位数的数组
    4. if (number < 10000){
    5. // 获取每一位对应的数字
    6. /*
    7. 4567
    8. 4567 % 10 = 7
    9. 4567 / 10 = 456
    10. 456 % 10 = 6
    11. 456 / 10 = 45
    12. 45 % 10 = 5
    13. 45 / 10 = 4
    14. 4 % 10 = 4
    15. 1
    16. 1 % 10 = 1
    17. 1 / 10 = 0
    18. */
    19. // 定义格式化数组
    20. int number_array[4];
    21. // 使用循环获取数组元素
    22. for (int i=3;i>=0;i--) {
    23. number_array[i] = number % 10;
    24. number /= 10;
    25. }
    26. // 显示 4 位数字
    27. for (int i=0;i<4;i++) {
    28. display_number(i, number_array[i]);
    29. delay(5);
    30. }
    31. }
    32. }

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

    1. // 显示数字的函数
    2. void display_number(int order, int number) {
    3. // 清屏
    4. clear();
    5. // 把对应位选线的电平拉低
    6. digitalWrite(seg_array[order], LOW);//定义位选线
    7. // 显示数字
    8. for (int i=0;i<8;i++) {
    9. digitalWrite(led_array[i], logic_array[number][i]);//段选线数组和数字电平
    10. }
    11. }

  • 相关阅读:
    【华为认证超全科普帖】
    【11.1】【VP】Codeforces Round #730 (Div. 2)
    Rust初接触
    算法设计与分析-0/1背包问题
    BroadcastChannel方法跨浏览器窗口通信
    智慧工地综合管理平台-项目开发管理规范
    Libgdx游戏开发(1)——环境配置及demo运行
    docker+nginx 安装部署修改资源目录配置文件和容器端口信息
    mysql比较时间
    Elastic基本操作
  • 原文地址:https://blog.csdn.net/m0_74319211/article/details/133908971