news 2026/7/7 9:49:52

【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/7/7 5:17:45

挖漏洞一个月赚2万多,别被骗了!

有人说挖漏洞比上班挣的还多&#xff0c;也有人说靠挖漏洞赚钱得饿死&#xff0c;2025年挖漏洞到底还能不能行&#xff1f;新手如果想挖漏洞又该怎么上手&#xff1f;一篇文章告诉你。 首先先说2025年挖漏洞的前景如何&#xff1f; 众所周知挖漏洞的白帽子是越来越多了&#x…

作者头像 李华
网站建设 2026/7/7 6:04:48

Linux的权限

1. 怎么看权限&#xff1f; (ls -l)在终端输入 ls -l&#xff0c;你会看到类似下面的一行“天书”&#xff1a;Bashdrwxr-xr-x 2 user dev 4096 Dec 12 10:00 project/我们需要关注的是最前面的 10 个字符 drwxr-xr-x&#xff0c;它分为 4 个部分解读&#xff1a;字符位置…

作者头像 李华
网站建设 2026/7/7 12:28:20

线性回归模型

线性模型 (Linear Models)3.1 基本形式 线性模型试图学得一个通过属性的线性组合来进行预测的函数。给定由 ddd 个属性描述的示例 x(x1;x2;… ;xd)\boldsymbol{x} (x_1; x_2; \dots; x_d)x(x1​;x2​;…;xd​)&#xff0c;其中 xix_ixi​ 是 x\boldsymbol{x}x 在第 iii 个属性…

作者头像 李华
网站建设 2026/7/7 13:51:18

校招 Java 面试必看:JVM 其实就考这 3 个点(我帮你讲透)

一、校招面试为什么爱问 JVM&#xff1f;对校招来说&#xff0c;面试官并不指望你会 JVM 调优&#xff0c;他们更关心三件事&#xff1a;你知不知道 Java 程序是怎么跑起来的你遇到内存问题&#xff0c;会不会“瞎猜”你有没有基本的底层理解能力&#x1f449; 所以校招 JVM 的…

作者头像 李华
网站建设 2026/7/7 18:43:33

【高可用系统监控的设计原则与实践】

监控系统的设计原则与实践 高可用系统的监控设计需要遵循实时性、直观性和整体性原则&#xff0c;确保能快速发现、定位和解决问题。以下是具体的设计思路和实施方案&#xff1a; 实时监控与告警机制 每个节点部署Agent进行数据采集&#xff0c;包括HTTP接口、Redis、MQ和DB等关…

作者头像 李华
网站建设 2026/7/7 12:57:32

前期工作总结

任务&#xff1a;各自把前期工作总结&#xff0c;包括主要使用的模型或技术介绍&#xff0c;附上博客链接。 1. BERT模型的改进 使用模型为bge-large模型替换bert。 bge模型&#xff08;M3&#xff09;以及BGE模型使用的预训练方法RetroMAE的具体技术介绍见&#xff1a;《M3…

作者头像 李华