一、所需硬件
Arduino 板1个
USB下载数据线1根
面包板1个
杜邦线若干
1k 电阻 8 个
共阴极数码管1个
二、接线图

三、代码
// 1. 定义常量与数组(核心优化:用数组替代硬编码)
// 一维数组:引脚映射(a-h对应Arduino引脚2-9,顺序与段码列一致)
const int segPins[] = {2, 3, 4, 5, 6, 7, 8, 9}; // 索引0=a,1=b,2=c,3=d,4=e,5=f,6=g,7=h
// 二维数组:共阴极段码表(行=数字0-9,列=a-h电平:0=LOW(亮),1=HIGH(灭))
const byte segCodes[10][8] = {
{0,0,0,0,0,0,1,1}, // 0: a,b,c,d,e,f亮;g,h灭
{1,0,0,1,1,1,1,1}, // 1: b,c亮;其余灭
{0,0,1,0,0,1,0,1}, // 2: a,b,g,d,e亮;c,f,h灭
{0,0,0,0,1,1,0,1}, // 3: a,b,c,d,g亮;e,f,h灭
{1,0,0,1,1,0,0,1}, // 4: b,c,f,g亮;a,d,e,h灭
{0,1,0,0,1,0,0,1}, // 5: a,c,d,f,g亮;b,e,h灭
{0,1,0,0,0,0,0,1}, // 6: a,c,d,e,f,g亮;b,h灭
{0,0,0,1,1,1,1,1}, // 7: a,b,c亮;其余灭
{0,0,0,0,0,0,0,1}, // 8: 全亮;h灭
{0,0,0,0,1,0,0,1} // 9: a,b,c,d,f,g亮;e,h灭
};
const int PIN_COUNT = sizeof(segPins)/sizeof(segPins[0]); // 自动计算引脚数量(无需硬编码8)
// 2. 封装函数:初始化引脚(模块化,易复用)
void initSegPins() {
for(int i=0; i<PIN_COUNT; i++) {
pinMode(segPins[i], OUTPUT); // 遍历引脚数组初始化
}
}
// 3. 封装函数:显示单个数字(核心封装,输入0-9即可显示)
void showNumber(int num) {
// 边界校验:仅处理0-9,避免数组越界
if(num < 0 || num > 9) return;
// 遍历引脚+段码,设置电平
for(int i=0; i<PIN_COUNT; i++) {
digitalWrite(segPins[i], segCodes[num][i]);
}
}
// 4. 初始化函数(简化,仅调用封装函数)
void setup() {
initSegPins(); // 调用封装的引脚初始化函数
}
// 5. 主循环(极简,逻辑清晰)
void loop() {
// 遍历0-9,调用封装函数显示,延迟1秒
for(int num=0; num<10; num++) {
showNumber(num);
delay(1000);
}
}
- 引脚输出LOW(低电平)→ 对应段导通发光
- 引脚输出HIGH(高电平)→ 对应段截止熄灭
- 代码驱动共阴极 8 段数码管循环显示 0~9 ,每个数字保持显示 1 秒,一直循环。
-
四、效果图
-

5602

被折叠的 条评论
为什么被折叠?



