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

• Шаг 6. Подождать, пока игрок не нажмет кнопку повторно. После этого вернуться к Шагу 1 и повторить.

Есть ли в этой последовательности шагов какие- нибудь проблемы? Попробуйте представить ее с точки зрения микроконтроллера. Если бы вы получили инструкции из такой программы, у вас было бы все необходимое, чтобы выполнить это задание?

Нет, потому что некоторых инструкций не хватает. Шаг 2 говорит «зажечь соответствующие светодиоды», но нигде нет инструкции по их выключению!

Внимание!

Вы всегда должны помнить: компьютер делает только то, что вы ему приказываете.

Если вы хотите, чтобы зажженные светодиоды выключились, прежде чем появится новое число, то должны предусмотреть такую команду.

Где она должна быть? Необходимо гасить дисплей пред выбором и отображением каждого нового числа. Поэтому правильное место для сброса дисплея находится в начале основного цикла. Добавим его так:

• Шаг 0. Выключить все светодиоды.

Но погодите. В зависимости от того, какое число отображалось на предыдущем цикле, одни светодиоды будут включены, а другие выключены. Если мы выключаем все светодиоды, чтобы очистить дисплей, то эта команда затронет также те светодиоды, которые уже выключены. Микроконтроллеру это безразлично, однако, он потратит впустую некоторое время, выполняя эту инструкцию. Возможно, было бы гораздо эффективнее выключить светодиоды, которые перед этим были включены, и проигнорировать те, которые уже и так выключены.

Однако в результате программа усложнится и, возможно, так делать не следует. На заре вычислительной техники людям приходилось оптимизировать программы, чтобы экономить циклы работы процессора, но я думаю, что теперь даже микроконтроллеры настолько быстрые, что нам не стоит беспокоиться о времени, затраченном на выключение двух-трех светодиодов, которые уже выключены. Я буду выключать все светодиоды сразу, независимо от их текущего состояния.

Обработка состояния кнопки

Что еще пропущено в списке шагов алгоритма? Кнопка.

Необходимо еще раз представить, какие действия я ожидаю от программы. На дисплее очень быстро сменяются числа. Игрок нажимает кнопку, чтобы остановить индикацию. Дисплей замирает, показывая текущее значение. На Шаге 6 микроконтроллер ждет неопределенно долго, пока игрок не нажмет кнопку снова, чтобы вновь запустить быстрое отображение.

Минуточку. Как игрок сможет нажать кнопку снова, не отпустив ее вначале?

На самом деле, если оставить текущий вариант алгоритма, то микроконтроллер будет делать следующее (учтите, что он выполняет задания очень-очень быстро):