|
|
Вот простенькая функция. Кушает, правда, глобальные переменные.
Работает так:
-если ничего не нажато - ждет нажатия глухо.
-когда нажата и удерживается одна и та же клавиша - выскакивает с мерными паузами.
Пояснения:
Ф-ция 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;
E-mail:
info@telesys.ru
xi=0;
do
{
KeyRead();
if( KEYdata == NO_PRESS )
{
LastKey=NO_PRESS;
}/*if*/
else
{
if( KEYdata != LastKey) { break; } /* новое нажатие */
}/*else*/
xi++;
}while(( KEYdata==NO_PRESS ) || ( ( xi
LastKey = KEYdata;
/*BELL();*/
return;
#undef Pause1
#undef Pause2
}/*void GetKeyR(void)*/
Ответы