[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Так нужно блокировать двойное нажатие? Или речь идёт о подавлении дребезга?
Если антидребезг, то вот пример:
(Эта подпрограмма вызывается с некоторой периодичностью (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_Inputif (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