解释键盘输入以显示在 1 位 7 段上

问题描述 投票:0回答:1

项目

正如标题所说,尝试使用 pad 和 seg 的数组来完成此操作,但正如您在我上面发布的链接中看到的那样,它似乎不起作用,尝试更改很多东西但仍然无法让它按预期运行

我尝试过的最值得注意的事情是串行打印“数字”,我得到的结果你可以看到它的每个循环的值为 26996 。 我还注意到,按住第一列(最后一个除外)的任何键,都会显示数字 2,这是第一列的第一个键,第二列和第三列也是如此,它们显示数字 2第 2 列和第 3 列,除了第 4 列之外,它什么也不做。

这是代码:

int digit = 0;
const char rowPins[4] = { A0, A1, A2, A3 };
const char columnPins[4] = { A4, A5, A6, A7 };
const int segmentsPins[8] = { 2, 3, 4, 5, 6, 7, 8, 9 };
const int pad[4][4] = {
  { 7, 8, 9, 9 },
  { 4, 5, 6, 5 },
  { 3, 5, 3, 3 },
  { 2, 5, 1, 4 },
};
bool digits[10][8] = {
  // dp c d e b a f g
  { 0, 1, 1, 1, 1, 1, 1, 0 },  //0
  { 0, 1, 0, 0, 1, 0, 0, 0 },  //1
  { 0, 0, 1, 1, 1, 1, 0, 1 },  //2
  { 0, 1, 1, 0, 1, 1, 0, 1 },  //3
  { 0, 1, 0, 0, 1, 0, 1, 1 },  //4
  { 0, 1, 1, 0, 0, 1, 1, 1 },  //5
  { 0, 1, 1, 1, 0, 1, 1, 1 },  //6
  { 0, 1, 0, 0, 1, 1, 0, 0 },  //7
  { 0, 1, 1, 1, 1, 1, 1, 1 },  //8
  { 0, 1, 1, 0, 1, 1, 1, 1 },  //9
};

void setup() {
  for (int i = 0; i < 4; i++) {
    pinMode(rowPins[i], OUTPUT);
  }
  for (int i = 0; i < 4; i++) {
    pinMode(columnPins[i], INPUT_PULLUP);
  }
  for (int i = 0; i <= 7; i++) {
    pinMode(segmentsPins[i], OUTPUT);
  }
}

void loop() {
  for (int i = 0; i < 4; i++) {
    digitalWrite(rowPins[i], HIGH);    // Turn just one row on.
    for (int j = 0; j < 4; j++) {
      if (digitalRead(columnPins[j]) == LOW) {
        digit = pad[i][j];
        break;
      }
    }
    digitalWrite(rowPins[i], LOW);    // After checking the columns, turn that one row off.
  }
  for (int i = 0; i <= 7; i++) {
    digitalWrite(segmentsPins[i], digits[digit][i] ? LOW : HIGH);
  }
  delay(200);
}
c++ debugging arduino arduino-ide arduino-nano
1个回答
0
投票

可能是硬件有故障或其他什么问题

© www.soinside.com 2019 - 2024. All rights reserved.