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

296 Микроконтроллеры AVR от азов программирования... Алгоритм При составлении данного алгоритма нам не обойтись без такого поня ­ тия, как «код состояния клавиатуры». Что такое код состояния? Все кнопки клавиатуры подключаются к микроконтроллеру при помощи портов ввода- вывода. Для подключения десяти кнопок (кнопки «О» — «9») одного порта недостаточно. Несколько кнопок придется подключить ко второму. Контроллер читает содержимое этих портов и получает код, соответ ­ ствующий их состоянию. Каждой кнопке клавиатуры в этом коде будет соответствовать свой отдельный бит. Когда кнопка нажата, соответству ­ ющий бит будет равен нулю. Когда отпущена — единице. Поэтому при разных сочетаниях нажатых и отпущенных кнопок код состояния кла ­ виатуры будет иметь разные значения. В момент включения питания все кнопки замка должны быть отпу ­ щены. Если это не так, то возникает неопределенность в работе замка. Поэтому наш алгоритм должен начинаться с процедуры ожидания отпу ­ скания всех кнопок. Как только все кнопки окажутся отпущенными или в случае, если они вообще не были нажаты, начинается другая процедура ожидания. На сей раз программа ожидает момента нажатия кнопок. Это как раз тот режим работы, в котором замок будет находиться большую часть времени. В момент нажатия любой из кнопок начинается цикл ввода ключевой комбинации. Процедура ввода ключевой комбинации представляет собой много ­ кратно повторяющийся процесс, периодически считывающий код состо ­ яния клавиатуры. Каждый раз после очередного считывания кода про ­ грамма проверяет, не изменился ли этот код. Как только код изменится, новое его значение записывается в очередную ячейку ОЗУ. В резуль ­ тате, пока состояние клавиатуры не изменяется, программа находится в режиме ожидания. Как только состояние изменилось, происходит запись нового значе ­ ния кода состояния в память. Поэтому ключевая комбинация, записан ­ ная в ОЗУ, будет представлять собой перечисление всех значений кода состояния клавиатуры, которое он принимал в процессе ввода ключевой комбинации. Длительность же удержания кнопок в каждом из состояний в память не записывается. Однако это лишь приблизительный алгоритм процедуры ввода ключе ­ вой комбинации. Так сказать, ее костяк. На самом деле алгоритм немного сложнее. Обнаружив изменение состояния клавиатуры, программа не сразу записывает новый код в ОЗУ. В целях борьбы с дребезгом кон ­ тактов, а также для компенсации неточности одновременного нажа ­ тия нескольких кнопок, программа сначала выдерживает специальную защитную паузу, затем повторно считывает код состояния клавиатуры, и лишь после этого записывает новый код в ОЗУ

RkJQdWJsaXNoZXIy MTExODQxMg==