Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Схемотехника и МП техника.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
25.54 Mб
Скачать
  1. Клавиатурные алгоритмы: варианты алгоритмов с указанием особенностей и применения.

Клавиатурные алгоритмы: варианты алгоритмов с указанием особенностей и применения.

Клавиатурные алгоритмы

При работе с клавиатурами программисту приходится ре¬шать еще одну проблему: когда должна выполняться функция, связанная с данной клавишей - в момент нажатия клавиши (т.е. в момент обнаружения программой факта нажатия) или в момент отпускания клавиши. На первый взгляд более прием¬лемым является первое предложение. Но при этом програм¬мист принять меры, чтобы застраховаться от повторного (лож¬ного) срабатывания данной функции, если пользователь не успел отпустить клавишу за то время, пока выполнялась функ¬ция. Кроме того, реализация клавиатур с функциональными клавишами (т.е. клавиша "А" выполняет действие "а", клавиша "Б" выполняет действие "б", и действие "в", если нажаты одно¬временно обе клавиши) заметно усложняет алгоритм антидре-безговой программы.

Для прояснения ситуации целесообразно разделить алгорит¬мы, работающие с клавиатурой и представляющие следующий вверх уровень иерархии алгоритмов на алгоритмы, работаю¬щие по нажатию (т.е. запускающие функцию в момент обнару-жения программой факта нажатия клавиши) и алгоритмы, работающие по отпусканию (т.е. запускающие функцию в мо¬мент обнаружения программой факта отпускания клавиши или клавиш). Последние, в свою очередь, можно разделить на одноклавишные и многоклавишные. Алгоритм, работающий по нажатию, многоклавишным не может быть принципиаль¬но, ибо в этом случае придется допустить, что алгоритм обла¬дает априорной информацией: будет нажата еще одна клавиша или пользователь ограничится уже нажатой.

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

Рассмотрим некоторые из них. Все эти алгоритмы использу¬ют в качестве нижнего уровня иерархии антидребезговые алго¬ритмы, рассмотренные ранее. Поэтому в дальнейшем обозна¬чим на блок-схеме применяемый антидребезговый алгоритм подпрограммой АДА, возвращающей результат в переменной А.

1.2.1 Одноклавишный алгоритм, работающий по нажатию

Самым простым из одноклавишных алгоритмов является алгоритм, работающий по нажатию. Блок-схема этого алгорит¬ма показана на рисунке 4.

А=FF?

Выход, возврат А

Рисунок4. Блок-схема одноклавишного алгоритма, работающего по нажатию

Фактически он сводится к ожиданию обнаружения момен¬та нажатия клавиши и возврата ее кода. Следует обратить вни¬мание на тот факт, что алгоритм не преду-сматривает выхода по отсутствию нажатия клавиши в момент своей активизации - для подобного алгоритма такая точка выхода противоречила бы самой логике алго-ритма.

В дальнейших пояснениях алгоритм не нуждается.

1.2.2 Одноклавишные алгоритмы, работающие по отпусканию

Подобные алгоритмы могут быть подразделены по тому, код какой из клавиш они возвращают. Возможны два варианта: ал¬горитм, возвращающий код первой нажатой клавиши (все ос¬тальные нажатые клавиши считаются ошибочными и игнори¬руются) и алгоритм, возвращающий код последней отпущен¬ной клавиши (предполагается, что пользователь мог ошибить¬ся и исправить ошибку).

Блок-схема алгоритма, возвращающего код первой нажатой клавиши показана на рисунке 5.

Работает алгоритм следующим образом.

После первого вызова антидребезгового алгоритма прово¬дится анализ: нажата ли хотя бы одна клавиша?

Если нажатых клавиш не обнаружено, то дальнейшая работа утрачивает смысл и осуществляется выход из алгоритма с ко¬дом возврата, свидетельствующим об отсут-ствии нажатых кла¬виш.

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

После этого вновь запускается цикл, состоящий из вызова антидребезгового алго-ритма и проверки на отсутствие нажа¬тых клавиш. Цикл повторяется до тех пор, пока не будет обна¬ружен факт отпускания всех клавиш.

Код первой нажатой клавиши, сохраненный в переменной В, используется в каче-стве кода возврата при выходе из алго¬ритма.

Блок-схема алгоритма, возвращающего код последней отпу¬щенной клавиши пока-зана на рисунке 6.

Работает алгоритм следующим образом.

После первого вызова антидребезгового алгоритма прово¬дится анализ: нажата ли хотя бы одна клавиша?

Если нажатых клавиш не обнаружено, то дальнейшая работа утрачивает смысл и осуществляется выход из алгоритма с ко¬дом возврата, свидетельствующим об отсут-ствии нажатых кла¬виш.

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

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

В случае, если все клавиши отпущены, алгоритм возвращает значение, сохранен-ное в переменной В.

В случае, если не все клавиши отпущены (код возврата анти¬дребезгового алго-ритма не равен FF), проводится дополнитель¬ный анализ: совпадает ли код возврата антидребезгового алго¬ритма с кодом, сохраненным в переменной В? В случае сов-падения алгоритм работает аналогично описанному выше, продолжая ожидать мо-мента отпускания всех клавиш. Если же код, сохраненный в переменной В не совпал с кодом возврата антидребезгового алгоритма, то в переменной В сохраняется новое значение и алгоритм продолжает ожидать момент отпускания всех клавиш.