2位10引脚7段数码管显示69却输出66,是代码还是接线问题?
Arduino二位7段数码管显示异常问题排查
问题核心出在代码的动态扫描逻辑错误,大概率不是接线问题
错误原因
- 没有位选关闭操作:你在
six()函数中打开digit1位选后,没有在执行nine()前将digit1复位为关闭电平,执行nine()时两个位选会同时处于导通状态,两段数码管会显示相同的段码内容 - 第二位显示无有效延时:
nine()函数没有添加对应延时,第二位实际点亮时间只有微秒级,人眼完全无法感知,几乎所有显示时间都被第一位的6占据,最终视觉效果就是两个数码管都显示6
修正后代码示例
int a = 13; int b = 6; int c = 11; int d = 10; int e = 9; int f = 8; int g = 7; int digit1 = 5; int digit2 = 4; void setup() { pinMode(a, OUTPUT); pinMode(b, OUTPUT); pinMode(c, OUTPUT); pinMode(d, OUTPUT); pinMode(e, OUTPUT); pinMode(f, OUTPUT); pinMode(g, OUTPUT); pinMode(digit1, OUTPUT); pinMode(digit2, OUTPUT); } void displaySix() { // 先关闭所有位选避免鬼影 digitalWrite(digit1, LOW); digitalWrite(digit2, LOW); // 设置6的段码 digitalWrite(a, LOW); digitalWrite(b, HIGH); digitalWrite(c, LOW); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, LOW); // 打开第一位位选 digitalWrite(digit1, HIGH); // 短延时匹配人眼视觉暂留 delay(5); } void displayNine() { // 先关闭所有位选避免鬼影 digitalWrite(digit1, LOW); digitalWrite(digit2, LOW); // 设置9的段码 digitalWrite(a, LOW); digitalWrite(b, LOW); digitalWrite(c, LOW); digitalWrite(d, LOW); digitalWrite(e, HIGH); digitalWrite(f, LOW); digitalWrite(g, LOW); // 打开第二位位选 digitalWrite(digit2, HIGH); delay(5); } void loop() { displaySix(); displayNine(); }
可选排查项
如果修改代码后仍显示异常,再按以下顺序排查接线:
- 确认数码管是共阴还是共阳类型,共阳数码管需要把段码电平、位选电平全部反向
- 确认a-g段引脚和接线一一对应,digit1、digit2是否和两个数码管的公共引脚对应正确
内容的提问来源于stack exchange,提问作者bstplyr2401
相关产品推荐
相关产品推荐

