正如标题所说,尝试使用 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);
}
可能是硬件有故障或其他什么问题