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