[an error occurred while processing this directive]
|
|
Сканирование клавиатуры веду в таймерском прерывании с периодом в первые миллисекунды. Событием считаю одинаковое состояние порта кнопок в текущем и предыдущем тике. Выдаю (допустим, в переменную 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