Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Секундомер до 10

Автор:   •  Октябрь 6, 2019  •  Лабораторная работа  •  279 Слов (2 Страниц)  •  416 Просмотры

Страница 1 из 2

13. СЕКУНДОМЕР

Создаем секундомер, который считает до 10.

ПРИНЦИПИАЛЬНАЯ СХЕМА

[pic 1]

СКЕТЧ

#define FIRST_SEGMENT_PIN   2

#define SEGMENT_COUNT       7

byte numberSegments[10] =

{

0b00111111, 0b00001010, 0b01011101, 0b01011110, 0b01101010,

0b01110110, 0b01110111, 0b00011010, 0b01111111, 0b01111110,

}; //префикс «0b» означает, что целое число за ним записано в двоичном коде. Единицами мы обозначим номера сегментов индикатора, которые должны быть включены для отображения арабской цифрой. Всего цифр 10, поэтому в массиве 10 чисел. Нам достаточно всего 1 байта = 8 бит для хранения комбинации сегментов для каждой из цифр

void setup()

{

for (int i = 0; i < 7; ++i)

pinMode(i + 2, OUTPUT);

}

void loop()

{

int number = (millis() / 1000) % 10; //определяем число, которое собираемся отображать. Пусть им будет номер текущей секунды, зацикленный на десятке

int mask = numberSegments[number]; //получаем код, в котором зашифрована арабская цифра

for (int i = 0; i < 7; ++i) //для каждого из 7 сегментов индикатора...

{

boolean enableSegment = bitRead(mask, i); //...определяем: должен ли он быть включён. Для этого считываем бит, соответствующий текущему сегменту «i». Истина — он установлен (1), ложь — нет (0)

digitalWrite(i + 2, enableSegment); //включаем/выключаем сегмент на основе полученного значения

}

}

ПОЯСНЕНИЯ К КОДУ

  • Мы создали массив типа byte: каждый его элемент это 1 байт, который может принимать значения от 0 до 255.
  • Символы арабских цифр закодированы состоянием пинов, которые соединены с выводами соответствующих сегментов: 0, если сегмент должен быть выключен, и 1, если включен.
  • В переменную mask мы помещаем тот элемент массива numberSegments, который соответствует текущей секунде, вычисленной в предыдущей инструкции.
  • В цикле for мы пробегаем по всем сегментам, извлекая с помощью встроенной функции bitRead нужное состояние для текущего пина, в которое его и приводим с помощью digitalWrite и переменной enableSegment.
  • bitRead(x, i) возвращает boolean значение: i-ый бит справа в байте x.

...

Скачать:   txt (3.3 Kb)   pdf (138.6 Kb)   docx (22.3 Kb)  
Продолжить читать еще 1 страницу »
Доступно только на Essays.club