Семисегментный дисплей всегда показывает верх - PullRequest
0 голосов
/ 23 февраля 2019

Используя мой Arduino, я создал двумерный массив с шестнадцатеричными числами 0-F для отображения на семисегментном дисплее.Все работает отлично, я использовал цикл for, чтобы включить каждый сегмент дисплея, но верхний дисплей (A) всегда включен, даже если он не должен быть включен.

void sevenSegment(int a) {
  for (int i = 0; i < nPins; i++) {
    digitalWrite(fontArray[a][i], HIGH);
  }
}

Array:

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, всегда горит?: /

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Если не считать ошибки в проводке, массив 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);
}
0 голосов
/ 23 февраля 2019

Эти сегменты никогда не устанавливаются обратно на 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]);
  }
}

InВ случае, если номера не смежны, можно использовать второй массив:

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]);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...