|
Дело происходит в обработчике прерывания от таймера
[pre]#define TIMER_PERIOD 10 /* мс - тик таймера */
/* задержки */
#define PRE ( 40/TIMER_PERIOD) /* перед 1-й сработкой */
#define REPDEL (800/TIMER_PERIOD) /* перед 2-й сработкой */
#define REPPER (160/TIMER_PERIOD)char fKey1, /* флаг нажатия */
fHoldKey1; /* вспомогательный флаг автоповтора */
//а вот обработчик
if (iKey1!=0) iKey1--;if (KEY1_PRESSED) {
if (iKey1==0) {
fKey1 = TRUE;
if(!fHoldKey1) {fHoldKey1 = TRUE; iKey1 = REPDEL;} //50 мс после нажатия - ген.событие
else iKey1 = REPPER; //50+800мс и далее через кжд.200мс - ген.событие
}
}
else {fHoldKey1 = FALSE; iKey1 = PRE;} //если нажаты обе или ни одной - сбросить сч-ки[/pre]
E-mail: info@telesys.ru