реклама на сайте
подробности

 
 
> Подавление дребезга кнопок 20 мс (8 выводов – кнопок)
Alex ma
сообщение Mar 18 2007, 15:26
Сообщение #1


Частый гость
**

Группа: Новичок
Сообщений: 81
Регистрация: 9-08-06
Пользователь №: 19 445



Лог. 0 – кнопка нажата.
1 Считать и запомнить.
2 ждать 20мс
3 Считать и OR с ранее запомненным значением
4 результат, где нажата кнопка 0.

Есть наверное лучше способ подавления дребезга кнопок.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Mar 18 2007, 19:53
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Ну вначале нужна инициализация портов/переменных и etc. smile.gif
Для работы процедуры нужны как минимум две статических переменных. а) Предыдущее состояние кнопок и б) предыдущее устойчивое состояние кнопок.
1. С выбранным периодом (у вас это 20мс) , который должен быть не меньше времени дребезга контактов считываем/сканируем текущее состояние кнопок. Для удобства представляем состояния кнопок так, чтобы нажатая кнопка давала лог.1 , а не нажатая лог.0. При необходимости инвертируем состояния во время сканирования.
2. XORим текущее состояние с предыдущим состоянием? Если нуль, то состояния совпадают (устойчивое состояние) -> начинаем анализ. Если не нуль (состояния не совпадают, неустойчивое), то записываем текущее состояние как предыдущее и на п5 (выход из процедуры).
3. Первым делом проверяем нажата ли хоть одна кнопка (опять сравнение текущего с нулем). Если нуль (ни одна не нажата), то и обрабатывать нечего переход на п4.
Если иначе, то XORим текущее состояние с предыдущим устойчивым состоянием. Если не нуль (т.е. в устойчивом состоянии произошли изменения), то побитно в цикле обрабатываем состояние кнопок и складываем коды нажатых (при необходимости и отжатых тоже) в буфер клавиатуры. Обработку делаем как циклический сдвиг битовой маски и накладывание ее на текущее состояние проXORенное с предыдущим устойчивым состоянием. Этим мы устраняем повторную обработку уже нажатых и обработанных в предыдущей процедуре клавиш. При таком способе можно генерировать специальные коды при нажатии и удержании комбинации клавиш и отдельно фиксировать нажатие и отпускание нескольких клавиш.
4. Записываем текущее состояние как предыдущее устойчивое состояние.
5. Выход из процедуры.
Вот такой примерно алгоритм я когда-то реализовывал. Кроме собственно обработки нажатия клавиш у меня был реализован автоповтор последней нажатой клавиши.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 01:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01473 секунд с 7
ELECTRONIX ©2004-2016