尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

【Arduino Uno】数码管模拟值实验
📅 发布时间:2026/6/19 9:26:04

目录

  • 一.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板子的实验,都会从中受益很多,不仅对电子元器件上的,还有对代码上的理解都是一种进步与挑战!!!

相关新闻

  • 进程PCB
  • Springboot医药采购管理2mqc3(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • LeetCode 41. 缺失的第一个正数 | 原地哈希最优解全解析

最新新闻

  • LLM嵌入技术在表格数据预测中的应用与实践
  • 渗透测试实战:CDN绕过与子域名爆破核心技术解析
  • 5个实用技巧:用FitGirl游戏启动器轻松管理你的压缩版游戏库
  • 沃尔玛成钓鱼攻击首选目标:高仿真品牌钓鱼的攻防解析与防范指南
  • 软件测试基础:黑盒、白盒、灰盒测试
  • 2026年工业工厂吸尘器Top3:Shiwosi史沃斯凭什么第一? - 工业清洁测评社

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号