news 2026/6/23 10:27:47

【Arduino Uno】数码管模拟值实验

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Arduino Uno】数码管模拟值实验

目录

  • 一.1位数码管模拟值
    • 1.共阳极数码管实验效果
    • 2.共阳极与共阴极数码管原理与构造
      • 数码管内部构造
    • 3.需要的组件
    • 4.共阳极数码管接线图
    • 5.共阳极代码
      • 阳极代码调换为阴极
    • 6.优化代码
      • 补充说明
    • 7.总结

一.1位数码管模拟值

1.共阳极数码管实验效果

数码管模拟值实验共阳极

2.共阳极与共阴极数码管原理与构造

数码管内部构造

内部结构:一位数码管通常由 8 个发光二极管组成,其中 7 个用于构成数字 0-9 的字形,分别标记为A、B、C、D、E、F、G,另一个为小数点DP

数码管分类及工作原理:按发光二极管单元连接方式可分为共阳极数码管共阴极数码管。型号分别是共阳极数码管(5161BS)和共阴极数码管(5161AS)

共阳极数码管:公共脚是正极(阳极),也就是所有二极管的阳极连接在一起,作为公共端,作为公共端所有的段码实际上是负极,当某一个或某几个段码位接低电平(LOW),公共脚接高电平(接5V)时,对应的段码位就能点亮。

共阴极数码管:公共脚是负极(阴极),也就是所有二极管的阴极连接在一起,作为公共端,段码位是阳极,当公共脚接地(3号接GND),段码位接高电平(HIGH)时,对应段码位点亮。

3.需要的组件

将需要以下组件:

Arduino UNO开发板
1个1位共阳极数码管
8个1k欧姆电阻
1个面包板
若干杜邦线或者跳线

4.共阳极数码管接线图

注意:我选用的数码管为阳极,所以公共脚(3号和8号)接5V

再来细究一下数码管所对应的引脚

1->g2->f4->a5->b6->e7->d9->c10->h

5.共阳极代码

inta=2;// 定义数字接口2 连接aintb=3;// 定义数字接口3 连接bintc=4;// 定义数字接口4 连接cintd=5;// 定义数字接口5 连接dinte=6;// 定义数字接口6 连接eintf=7;// 定义数字接口7 连接fintg=8;// 定义数字接口8 连接ginth=9;// 定义数字接口9 连接h,也就是数码管中的dpvoidsetup(){// put your setup code here, to run once:inti;for(i=2;i<=9;i++){pinMode(i,OUTPUT);// 设置2~9号引脚为输出模式}}voidloop(){// put your main code here, to run repeatedlydigital_0();// 显示数字0delay(1000);digital_1();// 显示数字1delay(1000);digital_2();// 显示数字2delay(1000);digital_3();// 显示数字3delay(1000);digital_4();// 显示数字4delay(1000);digital_5();// 显示数字5delay(1000);digital_6();// 显示数字6delay(1000);digital_7();// 显示数字7delay(1000);digital_8();// 显示数字8delay(1000);digital_9();// 显示数字9delay(1000);}// 显示数字0voiddigital_0(void){digitalWrite(a,LOW);digitalWrite(b,LOW);digitalWrite(c,LOW);digitalWrite(d,LOW);digitalWrite(e,LOW);digitalWrite(f,LOW);digitalWrite(g,HIGH);digitalWrite(h,LOW);}// 显示数字1voiddigital_1(void){digitalWrite(a,HIGH);digitalWrite(b,LOW);digitalWrite(c,LOW);digitalWrite(d,HIGH);digitalWrite(e,HIGH);digitalWrite(f,HIGH);digitalWrite(g,HIGH);digitalWrite(h,LOW);}// 显示数字2voiddigital_2(void){digitalWrite(a,LOW);digitalWrite(b,LOW);digitalWrite(c,HIGH);digitalWrite(d,LOW);digitalWrite(e,LOW);digitalWrite(f,HIGH);digitalWrite(g,LOW);digitalWrite(h,LOW);}// 显示数字3voiddigital_3(void){digitalWrite(a,LOW);digitalWrite(b,LOW);digitalWrite(c,LOW);digitalWrite(d,LOW);digitalWrite(e,HIGH);digitalWrite(f,HIGH);digitalWrite(g,LOW);digitalWrite(h,LOW);}// 显示数字4voiddigital_4(void){digitalWrite(a,HIGH);digitalWrite(b,LOW);digitalWrite(c,LOW);digitalWrite(d,HIGH);digitalWrite(e,HIGH);digitalWrite(f,LOW);digitalWrite(g,LOW);digitalWrite(h,LOW);}// 显示数字5voiddigital_5(void){digitalWrite(a,LOW);digitalWrite(b,HIGH);digitalWrite(c,LOW);digitalWrite(d,LOW);digitalWrite(e,HIGH);digitalWrite(f,LOW);digitalWrite(g,LOW);digitalWrite(h,LOW);}// 显示数字6voiddigital_6(void){digitalWrite(a,LOW);digitalWrite(b,HIGH);digitalWrite(c,LOW);digitalWrite(d,LOW);digitalWrite(e,LOW);digitalWrite(f,LOW);digitalWrite(g,LOW);digitalWrite(h,LOW);}// 显示数字7voiddigital_7(void){digitalWrite(a,LOW);digitalWrite(b,LOW);digitalWrite(c,LOW);digitalWrite(d,HIGH);digitalWrite(e,HIGH);digitalWrite(f,HIGH);digitalWrite(g,HIGH);digitalWrite(h,LOW);}// 显示数字8voiddigital_8(void){digitalWrite(a,LOW);digitalWrite(b,LOW);digitalWrite(c,LOW);digitalWrite(d,LOW);digitalWrite(e,LOW);digitalWrite(f,LOW);digitalWrite(g,LOW);digitalWrite(h,LOW);}// 显示数字9voiddigital_9(void){digitalWrite(a,LOW);digitalWrite(b,LOW);digitalWrite(c,LOW);digitalWrite(d,LOW);digitalWrite(e,HIGH);digitalWrite(f,LOW);digitalWrite(g,LOW);digitalWrite(h,LOW);}

阳极代码调换为阴极

在讲义中修改为共阴极需要将段脚设为LOW熄灭,HIGH点亮(也就是原代码中所有digitalWrite的HIGH和LOW互换

如果烧录进去的代码是阴极的,而数码管是阳极,并且接在5V上,就会出现

数码管模拟值实验共阳极反面案例

6.优化代码

结合一维数组、二维数组和函数的封装优化上述代码

intsegPins[]={2,3,4,5,6,7,8,9};// a,b,c,d,e,f,g,dp(h)constintSEGMENT_COUNT=8;// 段数(a-g + dp)// 共阳极数码管段码表(0-9),每一行对应一个数字,每一列对应segPins的引脚电平// 数组索引:0:a,1:b,2:c,3:d,4:e,5:f,6:g,7:dpbyte numCodes[10][8]={{LOW,LOW,LOW,LOW,LOW,LOW,HIGH,LOW},// 0{HIGH,LOW,LOW,HIGH,HIGH,HIGH,HIGH,LOW},// 1{LOW,LOW,HIGH,LOW,LOW,HIGH,LOW,LOW},// 2{LOW,LOW,LOW,LOW,HIGH,HIGH,LOW,LOW},// 3{HIGH,LOW,LOW,HIGH,HIGH,LOW,LOW,LOW},// 4{LOW,HIGH,LOW,LOW,HIGH,LOW,LOW,LOW},// 5{LOW,HIGH,LOW,LOW,LOW,LOW,LOW,LOW},// 6{LOW,LOW,LOW,HIGH,HIGH,HIGH,HIGH,LOW},// 7{LOW,LOW,LOW,LOW,LOW,LOW,LOW,LOW},// 8{LOW,LOW,LOW,LOW,HIGH,LOW,LOW,LOW}// 9};voidsetup(){// 设置所有段引脚为输出模式for(inti=0;i<SEGMENT_COUNT;i++){pinMode(segPins[i],OUTPUT);}}voidloop(){// 循环显示0-9,每个数字显示1秒for(intnum=0;num<10;num++){displayNumber(num);delay(1000);}}// 通用显示函数:根据数字显示对应的段码voiddisplayNumber(intnumber){// 检查数字范围,避免数组越界if(number<0||number>9){return;// 超出范围不显示}// 遍历所有段引脚,设置对应电平for(inti=0;i<SEGMENT_COUNT;i++){digitalWrite(segPins[i],numCodes[number][i]);}}

1.段引脚数组 segPins:把原来分散定义的 a-h 引脚整合到一个数组中,方便循环操作,减少重复代码。
2.段码表 numCodes二维数组:第一维表示数字(0-9),第二维表示对应段的电平把原来 10 个函数里的电平值集中存储,一目了然,修改时只需改数组值
3.简化的 loop 函数:用一个 for 循环遍历 0-9,调用通用显示函数,替代原来重复调用 10 个函数的写法

补充说明

共阴极数码管:高电平点亮对应段,低电平(LOW)熄灭
共阳极数码管:低电平点亮对应段,高电平(HIGH)熄灭
如果需要关闭小数点,可以将段码表中最后一列(dp 位)全部改为HIGH

7.总结

每一次做Arduino板子的实验,都会从中受益很多,不仅对电子元器件上的,还有对代码上的理解都是一种进步与挑战!!!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 2:42:51

google服务

“谷歌服务框架”、“谷歌Play服务”和“谷歌商店App”通常被并称为“谷歌三件套”。 它们是谷歌为Android系统提供的核心软件组件&#xff0c;构成了谷歌移动服务&#xff08;GMS&#xff09;的基础。对于绝大多数安卓用户&#xff0c;特别是使用国产手机的用户&#xff0…

作者头像 李华
网站建设 2026/6/23 18:18:22

进程PCB

1. PCB 到底是什么&#xff1f;从代码角度看&#xff0c;PCB 就是内核空间里定义的一个巨大的 C 语言结构体 (Struct)。存放位置&#xff1a;它存在于内核内存区 (Kernel Space)&#xff0c;普通用户程序无法直接读写&#xff0c;只有操作系统核心才能访问。生命周期&#xff1…

作者头像 李华
网站建设 2026/6/23 2:11:09

实战教程:1小时掌握逆向Unity游戏 (共13课时)

逆向不求人&#xff1a;1小时极速打通Unity游戏逆向任督二脉 引言&#xff1a;为什么每个开发者都应该懂点逆向&#xff1f; 在游戏开发的世界里&#xff0c;逆向工程常常被视为一种“神秘技能”。但真相是&#xff1a;理解逆向就是理解软件的终极运行逻辑。对于Unity开发者而…

作者头像 李华
网站建设 2026/6/23 19:51:11

[从零构建操作系统]08 函数调用时栈的底层行为解析

第一步&#xff1a;在 kernel_init 里安家&#xff08;黄色区域&#xff09;代码位置&#xff1a; 右上角 kernel_init 函数开头栈图对应&#xff1a; 左侧黄色的 “局部变量和数据”sub $0x10, %esp动作&#xff1a; 也就是把栈顶指针 esp 往下拉 16 个字节&#xff0c;给 ker…

作者头像 李华
网站建设 2026/6/23 19:48:13

力扣hot100:搜索插入位置

题目描述&#xff1a;题目分析&#xff1a;本题是一个二分查找&#xff0c;核心思路是通过计算中心点和目标值的大小关系&#xff0c;以此在一个while循环里不断更新左右端点&#xff0c;知道左端点大于右端点。代码&#xff1a;class Solution {public int searchInsert(int[]…

作者头像 李华
网站建设 2026/6/23 19:43:57

Java冷启动全指南:从原理到实战优化

一、Java冷启动问题概述 Java冷启动是指应用从启动到达到最佳性能状态的过程&#xff0c;包括JVM初始化、类加载、解释执行、JIT编译等多个阶段。在传统单机部署场景中&#xff0c;冷启动问题并不明显&#xff0c;但在云原生、Serverless架构下&#xff0c;冷启动时间直接影响…

作者头像 李华