You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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();
}

可选排查项

如果修改代码后仍显示异常,再按以下顺序排查接线:

  1. 确认数码管是共阴还是共阳类型,共阳数码管需要把段码电平、位选电平全部反向
  2. 确认a-g段引脚和接线一一对应,digit1、digit2是否和两个数码管的公共引脚对应正确

内容的提问来源于stack exchange,提问作者bstplyr2401

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 22:45:03