// 位选引脚定义(共阳极高电平激活)
const int bitPins[] = {2, 3, 4, 5};
// 段选引脚a-g+dp对应D6-D13(a=6, b=7,..., dp=13)
const int segPins[] = {6, 7, 8, 9, 10, 11, 12, 13};
// 共阳极段码表(0-9,小数点关闭)
const byte digitCode[] = {
0xC0, // 0 (a-g段全亮,共阳极输出低电平)
0xF9, // 1 (b,c段低电平)
0xA4, // 2
0xB0, // 3
0x99, // 4
0x92, // 5
0x82, // 6
0xF8, // 7
0x80, // 8
0x90 // 9
};
int displayDigits[] = {1, 2, 3, 4}; // 显示内容
void setup() {
// 初始化所有引脚为输出模式
for (int i = 0; i < 4; i++) pinMode(bitPins[i], OUTPUT);
for (int i = 0; i < 8; i++) pinMode(segPins[i], OUTPUT);
}
void loop() {
displayNumber(displayDigits); // 动态扫描显示
}
// 动态扫描函数
void displayNumber(int digits[]) {
for (int pos = 0; pos < 4; pos++) {
// 关闭所有位选
for (int i = 0; i < 4; i++)
digitalWrite(bitPins[i], LOW);
// 设置当前位段码
byte code = digitCode[digits[pos]];
// 控制各段的显示状态
for (int i = 0; i < 8; i++) {
// 共阳极数码管: 0输出点亮对应段,1输出熄灭对应段
digitalWrite(segPins[i], ((code >> i) & 0x01) ? HIGH : LOW);
}
// 激活当前位选(高电平)
digitalWrite(bitPins[pos], HIGH);
delay(5); // 每位数显示5ms
}
}