[an error occurred while processing this directive]
Я делаю так:
(«Телесистемы»: «Конференция «Микроконтроллеры и их применение»»)

миниатюрный аудио-видеорекордер mAVR

Отправлено BLACKEAGLE 15 апреля 2003 г. 18:59
В ответ на: Коллеги! Поделитесь идеей - как правильно делать обработку автоповтора нажатой и удерживаемой клавиши. А то сам я зашел в тупик (+) отправлено bialix 15 апреля 2003 г. 17:02

Сканирование клавиатуры веду в таймерском прерывании с периодом в первые миллисекунды. Событием считаю одинаковое состояние порта кнопок в текущем и предыдущем тике. Выдаю (допустим, в переменную KEYSTAT) следующие коды:

KEYSTAT=N (не 0) = кнопка N только что была нажата
KEYSTAT=N+64 = кнопка N только что продержалась нажатой дольше порога LONG_PRESS
KEYSTAT=N+128 = кнопка N только что была отпущена после короткого нажатия
KEYSTAT=N+128+64 = кнопка N только что была отпущена после долгого нажатия
KEYSTAT=0 = ни одна кнопка не нажата

Этого достаточно для 63 кнопок. Можно вычислять, но не обновлять KEYSTAT, пока фоновый процесс его не обработает и не сбросит, но это требуется редко. А делать автоповтор или предпринимать иные действия по факту долгого нажатия - определяет фон для каждой кнопки или группы кнопок с однородными функциями.

А вообще я кнопки не люблю, предпочитаю энкодеры.

Составить ответ ||| Конференция ||| Архив

Ответы



Перейти к списку ответов ||| Конференция ||| Архив ||| Главная страница ||| Содержание

E-mail: info@telesys.ru