[an error occurred while processing this directive] [an error occurred while processing this directive]
"Чтобы ... воспринималось только одно нажатие" ??
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Xan 10 апреля 2002 г. 12:22
В ответ на: Подскажите пожалуйста, как бороться с дребезгом клавиш, может у кого есть готовая программа на С? отправлено Shuric 09 апреля 2002 г. 08:43

Так нужно блокировать двойное нажатие? Или речь идёт о подавлении дребезга?

Если антидребезг, то вот пример:
(Эта подпрограмма вызывается с некоторой периодичностью (128 Гц). У меня давно уже во всех железках ОСРВ и всё такое многозадааачное :-))


void Keyboard(void)
{
Keyboard_Input = 0;

if (!Key_L_Pin) Key_L_Input = 1;
if (!Key_R_Pin) Key_R_Input = 1;
if (!Key_U_Pin) Key_U_Input = 1;
if (!Key_D_Pin) Key_D_Input = 1;
// Это я устанавливаю биты соответствующие пинам кнопок. Биты собраны в один байт Keyboard_Input

if (Keyboard_In_Old != Keyboard_Input)
{
Keyboard_In_Old = Keyboard_Input;
Keyboard_Timer = 0x09;
}
// Если старое состояние кнопок не равно новому, то взвожу таймер антидребезга.

if (Keyboard_Timer == 0) return; // Давно не было никаких событий.
Keyboard_Timer--;
if (Keyboard_Timer != 0) return; // Дребезг ещё не кончился.

// Только что кончился дребезг, ура! Смотрим, что получилось.
Keyboard_Hits = ~Keyboard_Status;
Keyboard_Hits &= Keyboard_In_Old;
Keyboard_Status = Keyboard_In_Old;
}



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

Ответы



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

E-mail: info@telesys.ru