void timerIRP(void) { unsigned char i; unsigned char key; static unsigned char key_last; static unsigned char key_val; static unsigned char key_dm_ctr = 0; i = adcRead(); if (i < 128) key = 1; else if (i < 388) key = 2; else if (i < 683) key = 3; else if (i < 995) key = 4; else key = 0; adcStart(ADC_CH_KEY); if (key_last == key) { if (key != 0) { if (key_dm_ctr == 0) { key_val = key; } if (key_dm_ctr != 0xff) key_dm_ctr++; if (key_dm_ctr == 100) { } } else { if (key_val) { if (key_dm_ctr < 100) send_msg(&msg_key, key_val); key_val = 0; } key_dm_ctr = 0; } } key_last = key; }