使用我的Arduino,我创建了一个带有十六进制数字0-F的二维数组,以显示在一个七段显示器上。一切都很完美,我使用了一个for循环来打开显示器的每个部分,但顶部的显示器(A)总是打开的,即使它不应该打开。
void sevenSegment(int a) {
for (int i = 0; i < nPins; i++) {
digitalWrite(fontArray[a][i], HIGH);
}
}数组:
int fontArray[][7] = {
{13, 12, 11, 10, 9, 8}, // 0
{12, 11}, // 1
{13, 12, 10, 9, 7}, // 2
{13, 12, 11, 10, 7}, // 3
{12, 11, 8, 7}, // 4
{13, 11, 10, 8, 7}, // 5
{13, 11, 10, 9, 8, 7}, // 6
{13, 12, 11}, // 7
{13, 12, 11, 10, 9, 8, 7}, // 8
{13, 12, 11, 10, 8, 7}, // 9
{13, 12, 11, 9, 8, 7}, // A
{11, 10, 9, 8, 7}, // B
{13, 10, 9, 8}, // C
{12, 11, 10, 9, 7}, // D
{13, 10, 9, 8, 7}, // E
{13, 9, 8, 7} }; // F为什么显示屏(A)的顶部针脚13总是在燃烧?:/
发布于 2019-02-24 02:03:30
这些段永远不会重新设置为LOW。
您将需要类似以下内容:
int fontArray[][7] = {
// pins: {13, 12, 11, 10, 9, 8, 7}, // 8
{1, 1, 1, 1, 1, 1, 0}, // 0
{0, 1, 1, 0, 0, 0, 0}, // 1
// ...
};然后使用:
void sevenSegment(int a) {
for (int i = 0; i < 7; i++) {
digitalWrite(13 - i, fontArray[a][i]);
}
}如果引脚编号不连续,则可以使用第二个数组,如下所示:
int pinArray[] = {13, 12, 11, 10, 9, 8, 7};
void sevenSegment(int a) {
for (int i = 0; i < 7; i++) {
digitalWrite(pinArray[i], fontArray[a][i]);
}
}发布于 2019-02-24 08:43:00
除非您的连接中存在错误,否则数组fontArray不会显式初始化所有值。因此,编译器会将这些未初始化的值(在全局数组中)设置为默认值0。
结果是对digitalWrite(0, HIGH)的调用。根据电路板和引脚配置的不同,引脚"0“可能映射到13。
可以使用以下命令来编写for循环以防止出现这种情况:
for (int i = 0; i < nPins; i++) {
int pin = fontArray[a][i];
if (pin == 0) {
break;
}
digitalWrite(pin, HIGH);
}https://stackoverflow.com/questions/54843641
复制相似问题