当前位置: 首页 > news >正文

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

http://www.rkmt.cn/news/94811.html

相关文章:

  • 进程PCB
  • Springboot医药采购管理2mqc3(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • LeetCode 41. 缺失的第一个正数 | 原地哈希最优解全解析
  • 线性回归模型
  • 榛子矮砧密植:水肥一体化系统的铺设要点指南
  • java基础流程控制笔记
  • 校招 Java 面试必看:JVM 其实就考这 3 个点(我帮你讲透)
  • [从零构建操作系统]08 函数调用时栈的底层行为解析
  • MATLAB与FlightGear联合仿真教程:包含Simulink工程文件的PDF指南
  • Springboot医疗云胶片管理系统nem7x(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • Day 37 MLP神经网络的训练
  • 探索含光伏、火电与飞轮储能系统的奇妙调频之旅
  • 高效获取高质量外链:2026年必须掌握的10个核心策略
  • Flutter国际化(i18n)实现详解
  • YOLOv13涨点改进 | 独家创新首发、Conv卷积改进篇 | SCI一区 2025 | 引入MSConvStar多尺度卷积星形模块,有效增强捕捉多范围特征,助力目标检测、图像分割、图像分类高效涨点
  • LLC谐振变换器恒压恒流双竞争闭环Simulink仿真探索
  • Feign基本知识
  • YOLOv13涨点改进 | 全网独家创新、Neck特征融合改进篇 | TGRS 2025顶刊 | 引入ADSF自适应特征融合模块,自适应融合浅层特征与深层特征,适合红外小目标检测、图像分割等有效涨点
  • 常用软件工具的使用(1) ---- git 的安装和基础操作
  • 双电机纯电动汽车整车仿真模型,基于Matlab/Simulink的双电机前后轴双驱电动汽车仿真模型
  • 测试 - 概览
  • 鸿蒙不是 Electron!深度解析 HarmonyOS 应用开发与跨端技术选型
  • 12bit 100MHz pipelined SAR ADC模数转换器 设计 65nm工艺,电...
  • LangChain从入门到进阶(7):学会让AI调用MCP「喂饭教程」
  • C++ 后端面试必刷大厂算法题(附代码实现)第一期
  • qt为什么转向用cmake放弃qmake
  • color
  • Qwen3-Embedding-4B:重新定义多语言文本检索的边界
  • 深度探究Span:.NET内存布局与零拷贝原理及实践
  • NNG 开源项目教程