key.c
// key Variables
unsigned int key_counter[4]={0,0,0,0};
unsigned int key_threshold= (KEY_THRESHOLD_MS * 1000) / TIMER0_INTP;
unsigned short key_value=0;
short Key_Pressed(unsigned short key)
{
if (key_value & key)
{
key_value &= ~key;
return 1;
}
else return 0;
}
unsigned char Get_Key_Index(unsigned short key)
{
unsigned char key_index=0;
switch (key)
{
case KEY0:
key_index=0;
break;
case KEY1:
key_index=1;
break;
case KEY2:
key_index=2;
break;
case KEY3:
key_index=3;
break;
}
return key_index;
}
short Key_Counter_Chk(unsigned char index)
{
if (key_counter[index]>=key_threshold)
{
key_counter[index]=0;
return 1;
}
else
{
key_counter[index]=0;
return 0;
}
}
void KEY_Proc(unsigned short key)
{
unsigned char index = Get_Key_Index(key);
if ((key & KEYIO)==0)
key_counter[index] += 1;
else
{
if (Key_Counter_Chk(index))
key_value |= key;
}
}