Сочувствую. Попробуйте вот такую функцию. Ещё в перестройку писана.
(«Телесистемы»: «Конференция «Микроконтроллеры и их применение»»)

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

Отправлено cout 21 апреля 2003 г. 15:53
В ответ на: Нету пока :((( отправлено FlexyMind 21 апреля 2003 г. 15:35

Вот простенькая функция. Кушает, правда, глобальные переменные.
Работает так:
-если ничего не нажато - ждет нажатия глухо.
-когда нажата и удерживается одна и та же клавиша - выскакивает с мерными паузами.

Пояснения:
Ф-ция KeyRead() - элементарная процедура однократного сканирования клавиатуры.
Сует свое значение в KEYdata.
Эта же KEYdata и есть выходное данное от GetKeyR();
Pause1 - первая пауза, Pause2 - остальные паузы. (Значения подбираются Вами).

unsigned char KEYdata, LastKey, PreLastKey;

void GetKeyR(void)
{
#define Pause1 22
#define Pause2 5

unsigned char xi,xj;

xj = (LastKey == PreLastKey) ? Pause2:Pause1;
xi=0;
do
{
KeyRead();

if( KEYdata == NO_PRESS )
{
LastKey=NO_PRESS;
}/*if*/
else
{
if( KEYdata != LastKey) { break; } /* новое нажатие */
}/*else*/
xi++;
}while(( KEYdata==NO_PRESS ) || ( ( xi PreLastKey = LastKey;
LastKey = KEYdata;

/*BELL();*/

return;

#undef Pause1
#undef Pause2

}/*void GetKeyR(void)*/

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

Ответы



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

E-mail: info@telesys.ru