Электроника для начинающих (Платт) - страница 300

Следующий оператор if использует символ прямой черты, о котором я упоминал ранее. Пара символов I I на языке программирования С означает ИЛИ. Поэтому данная функция говорит: «Если у нас есть значение 1, ИЛИ 3, ИЛИ 5, мы включаем центральный светодиод, переводя вывод 2 в высокое состояние».

Третий оператор if говорит о том, что если значение spots больше трех, следует включить два светодиода, расположенных по диагонали. Это необходимо для отображения конфигурации точек для числа 4, 5 или 6.

Последний оператор if говорит о том, что если значение spots больше единицы, должны также зажечься и другие светодиоды, расположенные по диагонали.

Вы можете проверить логику этих функций сравнения, взглянув на конфигурации точек на рис. 4.142. Логические элементы на этом рисунке были подобраны так, чтобы соответствовать двоичному выходу микросхемы счетчика, и поэтому они отличаются от логических операций в функциях сравнения рассматриваемой программы. Тем не менее, светодиоды объединены в пары аналогичным образом.

Скорость мигания

После функций сравнения я вставил задержку в 20 миллисекунд, потому что считаю, что это сделает отображение более интересным. Без этой задержки светодиоды будут мигать так быстро, что отдельные значения окажутся неразличимы. При наличии задержки вы увидите их мигание, но оно по-прежнему будет слишком быстрым, и вам не удастся остановить его на том номере, который хотите угадать — хотя можете попробовать. Можете также настроить параметр задержки, указав число больше или меньше 20.

Создание новой функции

Теперь мы переходим к важной части. В написанном мною алгоритме мы дошли до Шагов 3, 4 и 4а. Напомню:

• Шаг 3. Проверить, нажата ли кнопка.

• Шаг 4. Проверить, достигло ли системное время значения переменной ignore.

• Шаг 4а. Если кнопка не была нажата ИЛИ если системное время не достигло значения переменной ignore, вернуться к Шагу 1. Иначе...

Эти шаги можно скомбинировать в одной функции сравнения if. Алгоритм выглядел бы так:

• Если (кнопка не нажата ИЛИ системное время меньше значения ignore), вернуться к Шагу 0.

Но здесь есть проблема. Фраза «вернуться к» предполагает отсылку микроконтроллера к указанной части программы. Казалось бы, естественная команда, но когда вы программируете на языке С, следует избегать передачи управления из одной части программы в другую.

Причина в том, что обилие команд «перейти туда» или «перейти сюда» усложняет понимание программы — не только для других людей, но и для вас самих, когда вы взглянете на нее снова через полгода и не сможете вспомнить, что имелось в виду.