Menu
CoddyTech

Шаблоны цифр в байтах

Часть раздела Дисплеи и датчики путешествия по Arduino на Coddy. Урок 2 из 24.

Семь строк digitalWrite() для каждой цифры — это много кода. Храни каждую цифру как шаблон: один бит на сегмент, 1 — горит, 0 — не горит.

byte — это целое число от 0 до 255, состоящее из восьми битов. Записывай его в двоичной системе, добавляя спереди 0b. Читай биты справа: последний бит — сегмент a, перед ним b и так далее до g.

//           gfedcba
byte one = 0b0000110;  // b и c: 1

В массиве помещаются десять шаблонов, поэтому digits[3] — это шаблон цифры 3. bitRead() из двоичного счётчика читает один бит, отсчитывая справа, начиная с 0:

bitRead(0b0000110, 0)  // 0: сегмент a выключен
bitRead(0b0000110, 1)  // 1: сегмент b горит

Функция может пройти по семи битам с помощью цикла for и установить каждый вывод сегмента, так что для отображения любой цифры достаточно одного вызова: showDigit(7);

challenge icon

Задание

Средне

В заготовке есть все шаблоны, кроме 4 и 7, а loop() показывает 1, 4 и 7.

  • заполните 4 (сегменты b, c, f, g) и 7 (a, b, c)
  • напишите showDigit(n): для каждого i от 0 до 6 задайте segmentPins[i] значение LOW, если бит i в digits[n] равен 1, и HIGH, если он равен 0

Нажмите Run, затем Check.

Попробуйте сами

const int segmentPins[7] = {2, 3, 4, 5, 6, 7, 8};  // a, b, c, d, e, f, g

// Один шаблон на цифру; читайте справа налево: крайний правый бит соответствует сегменту a.
//                     gfedcba
const byte digits[10] = {
  0b0111111,  // 0
  0b0000110,  // 1
  0b1011011,  // 2
  0b1001111,  // 3
  0b0000000,  // 4: заполнить
  0b1101101,  // 5
  0b1111101,  // 6
  0b0000000,  // 7: заполнить
  0b1111111,  // 8
  0b1101111   // 9
};

void showDigit(int n) {
  // Включите сегменты, заданные digits[n], остальные выключите
}

void setup() {
  for (int i = 0; i < 7; i++) {
    pinMode(segmentPins[i], OUTPUT);
  }
}

void loop() {
  showDigit(1);
  delay(1000);
  showDigit(4);
  delay(1000);
  showDigit(7);
  delay(1000);
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Дисплеи и датчики

Потренируйтесь самостоятельно: Песочница Arduino