临汾市网站建设_网站建设公司_AJAX_seo优化
2026/1/16 19:38:37 网站建设 项目流程

文章目录

  • 入门必看!1 位数码管模拟值显示实验(附完整代码)
        • 简介什么是一位数码管
        • 材料用具
        • 实物连接图:
        • 长杂版代码:
    • 视频展示
        • 结束语

入门必看!1 位数码管模拟值显示实验(附完整代码)

简介什么是一位数码管

一位数码管是常用的简易显示器件,由 8 个发光二极管组成(7 个构成数字 0-9 的 A-G 段,1 个是小数点 DP),用于显示单个数字或符号。

内部结构:包含 7 段数字段(A-G)+1 个小数点 DP,共 8 个发光二极管。

分类及工作原理:按二极管连接方式分共阳、共阴两类:
共阳数码管:所有二极管阳极接公共端 COM(接 + 5V),某字段阴极接低电平→该字段点亮。
共阴数码管:所有二极管阴极接公共端 COM(接 GND),某字段阳极接高电平→该字段点亮。

材料用具
材料数量
Arduino 板1
USB数据线1
杜邦线若干
:—:—:
面包板1
1kΩ电阻8
共阴极数码管1

共阴极数码管
将数码管的正面朝向我们,自上而下从左往右的引脚分别定义成
1~10,其中 3 号引脚和 8 号引脚都是公共端,用于接入电路中
的阴极(也叫GND),数码管中共有8个发光二极管,分别表示
成 a ~ h(h 为小数点),各个引脚所控制的发光二极管图中也
标出来了:
1 -> g
2 -> f
4 -> a
5 -> b
6 -> e
7 -> d
9 -> c
10 -> h

实物连接图:

实物图

长杂版代码:
int a = 2; // 定义数字接口2 连接a
int b = 3; // 定义数字接口3 连接b
int c = 4; // 定义数字接口4 连接c
int d = 5; // 定义数字接口5 连接d
int e = 6; // 定义数字接口6 连接e
int f = 7; // 定义数字接口7 连接f
int g = 8; // 定义数字接口8 连接g
int h = 9; // 定义数字接口9 连接h,也就是数码管中的dp
void setup() {
// put your setup code here, to run once:
int i;
for(i=2;i<=9;i++){
pinMode(i,OUTPUT); // 设置2~9号引脚为输出模式
}
}
void loop() {
// put your main code here, to run repeatedly:
digital_0(); // 显示数字0
delay(1000);
digital_1(); // 显示数字1
delay(1000);
digital_2(); // 显示数字2
delay(1000);
digital_3(); // 显示数字3
delay(1000);
digital_4(); // 显示数字4
delay(1000);
digital_5(); // 显示数字5
delay(1000);
digital_6(); // 显示数字6
delay(1000);
digital_7(); // 显示数字7
delay(1000);
digital_8(); // 显示数字8
delay(1000);
digital_9(); // 显示数字9
delay(1000);
}
// 显示数字0
void digital_0(void){
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,LOW);
digitalWrite(h,HIGH);
}
// 显示数字1
void digital_1(void){
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
digitalWrite(h,HIGH);
}
// 显示数字2
void digital_2(void){
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,LOW);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,LOW);
digitalWrite(g,HIGH);
digitalWrite(h,HIGH);
}
// 显示数字3
void digital_3(void){
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,HIGH);
digitalWrite(h,HIGH);
}
// 显示数字4
void digital_4(void){
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(h,HIGH);
}
// 显示数字5
void digital_5(void){
digitalWrite(a,HIGH);
digitalWrite(b,LOW);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,LOW);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(h,HIGH);
}
// 显示数字6
void digital_6(void){
digitalWrite(a,HIGH);
digitalWrite(b,LOW);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(h,HIGH);
}
// 显示数字7
void digital_7(void){
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
digitalWrite(h,HIGH);
}
// 显示数字8
void digital_8(void){
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(h,HIGH);
}
// 显示数字9
void digital_9(void){
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,LOW);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(h,HIGH);
}

在这个代码中,很多东西都是重复的,作用一致所以我们可以改进他得到以下代码:

// 数码管段码数组:行对应0-9,列对应a(2)、b(3)、c(4)、d(5)、e(6)、f(7)、g(8)、h(9)引脚的电平
// HIGH=亮,LOW=灭(共阴极数码管,若为共阳极则电平反转)
const int segCodes[10][8] = {{HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, LOW, HIGH},    // 0{LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, HIGH},       // 1{HIGH, HIGH, LOW, HIGH, HIGH, LOW, HIGH, HIGH},    // 2{HIGH, HIGH, HIGH, HIGH, LOW, LOW, HIGH, HIGH},    // 3{LOW, HIGH, HIGH, LOW, LOW, HIGH, HIGH, HIGH},     // 4{HIGH, LOW, HIGH, HIGH, LOW, HIGH, HIGH, HIGH},    // 5{HIGH, LOW, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH},   // 6{HIGH, HIGH, HIGH, LOW, LOW, LOW, LOW, HIGH},      // 7{HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH},  // 8{HIGH, HIGH, HIGH, HIGH, LOW, HIGH, HIGH, HIGH}    // 9
};
// 引脚映射:a(2)、b(3)、c(4)、d(5)、e(6)、f(7)、g(8)、h(9)
const int pins[8] = {2, 3, 4, 5, 6, 7, 8, 9};
void setup() {// 批量设置2-9号引脚为输出模式for (int i = 0; i < 8; i++) {pinMode(pins[i], OUTPUT);}
}
void loop() {// 循环显示0-9,每个数字显示1秒for (int num = 0; num < 10; num++) {displayDigit(num);delay(1000);}
}
// 通用数字显示函数:根据数字索引输出对应段码
void displayDigit(int num) {for (int i = 0; i < 8; i++) {digitalWrite(pins[i], segCodes[num][i]);}
}

用数组存储段码,替代冗余的独立函数:将 0-9 对应的数码管段电平(a-h 引脚)集中存储在二维数组中,彻底消除多个重复的数字显示函数。
引脚映射数组化,批量操作引脚:用数组存储 a-h 对应的引脚号(2-9),实现引脚模式和电平的批量设置,避免单独变量声明。
通用显示函数 + 循环遍历,简化主逻辑:通过一个函数读取段码数组控制引脚,在 loop 中循环 0-9 调用该函数,减少重复代码。

视频展示

数码管

结束语

通过这个1位数码管显示实验,相信你不仅掌握了数码管的工作原理、硬件接线方法,更学会了“去除冗余、数组化优化”的编程思路——从80行重复代码精简到20行核心逻辑,这正是Arduino编程“简洁高效”的核心魅力。

如果后续想拓展功能,比如添加小数点显示、实现数字计数递增/递减,或者升级为两位数码管显示,只需在精简版代码的基础上修改段码数组、引脚映射或循环逻辑即可。动手实践中遇到接线问题、代码报错,不妨回头对照原理部分逐一排查,技术成长正是在“实践-优化-拓展”中积累的~

快去拿起面包板和杜邦线,亲手实现属于你的数码管显示效果吧!如果需要进一步拓展实验(如多位数码管、动态显示等),随时可以留言交流~

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询