Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств

Шаг 5. Переходим непосредственно к разработке устройств и программ 297 Длительность защитной паузы выбрана равной 48 мс. Такая пауза особенно полезна в случае, если при наборе ключевой комбинации вы хотите использовать одновременное нажатие кнопок. Как бы вы не стара ­ лись нажать кнопки одновременно, вам этого не удастся. Все равно будет какое-то расхождение в моменте замыкания контактов. Причем порядок замыкания контактов будет зависеть от многих факторов и практически является случайным. Если не принять специальных мер, то в момент такого нажатия про ­ грамма зафиксирует не одно, а несколько последовательных изменений кода состояния клавиатуры. Если полученная таким образом кодовая комбинация будет записана в EEPROM, то открыть такой замок будет практически невозможно. При попытке повторить те же нажатия, замыкание контактов будут происходить в другом порядке. Программа воспримет его как совершенно другой код. Защитная пауза решает эту проблему. В каком бы порядке ни замыкались контакты при одновременном нажатии нескольких кнопок, после паузы все эти процессы закончатся. Повторное считывание даст уже устоявшийся код состояния клавиатуры. Повторить такую комбина ­ цию не составит труда. Кроме защитной паузы, для борьбы с дребезгом применяется много ­ кратное считывание кода состояния. То есть на самом деле каждый раз происходит не одно, а несколько последовательных операций по считыва ­ нию кода состояния. Считывание происходит до тех пор, пока несколько раз подряд будет получен один и тот же код. Теперь поговорим о том, как программа выходит из процедуры ввода ключевой комбинации. Как уже говорилось ранее, для выхода из про ­ цедуры используется защитный промежуток времени. Для формирова ­ ния этого промежутка применяется таймер. Таймер должен работать в режиме Normal. В этом режиме он просто считает тактовые импульсы. Процедура ввода кодовой комбинации устроена таким образом, что при каждом нажатии или отпускании любой из кнопок таймер сбрасы ­ вается в ноль. В промежутке между нажатиями его показания увеличива ­ ются под действием тактового сигнала. Если в течение защитного проме ­ жутка времени не будет нажата ни одна кнопка, показания таймера уве ­ личатся до контрольного предела. Программа постоянно проверяет это условие. Как только показания счетчика превысят контрольный предел, процедура ввода кодовой комбинации завершается. Величина контроль ­ ного промежутка времени равна 1 с. Дальнейшие действия после выхода из процедуры ввода кодовой комбинации определяются состоянием переключателя режимов работы. Если контакты переключателя замкнуты, программа переходит к проце ­ дуре записи кодовой комбинации в EEPROM.

RkJQdWJsaXNoZXIy MTExODQxMg==