|
发表于 2011-12-19 09:34:36
|
显示全部楼层
uchar GetKey(void)
{
static uchar idata KeyCan,KeyMode=0;
static uint idata KeyOnTimer,KeyOffTimer;
static uchar idata LoopTimer=0;
key_value=P0&0x0f; key_value^=0x0f;
if(Ttick_cmp!=Ttick)
{
if((key_value==LastPressedKey)&&(key_value!=0)) KeyOnTimer++;
if(!KeyCan&&(key_value==0)) KeyOnTimer=0;
if(KeyOnTimer==(KeyPressDelayLoop>>5)) KeyCan=1;
if((key_value==0)) KeyOffTimer++;
if(KeyCan&&(key_value!=0)) KeyOffTimer=0;
if(KeyOffTimer==(KeyPressDelayLoop>>5)) KeyCan=0;
if(Ttick_cmp!=Ttick) LoopTimer++;
if(LoopTimer>160) { LoopTimer=160; Mute_delay++; if(Mute_delay>10) Mute_delay=10; }
if((key_value==0)&&(KeyCan==1))
{
if(KeyMode) { Mute_delay=0; LoopTimer=0; KeyMode=0; KeyCan=0; BeepOn(5); return(0); }
else { Mute_delay=0; LoopTimer=0; KeyCan=0; BeepOn(5); return(KeyPressMap[LastPressedKey]); }
}
else if((KeyOnTimer>KeyPressDelayLoop)&&(KeyCan==1))
{
KeyMode=1; Mute_delay=0; KeyOnTimer-=4; return(KeyLastMap[LastPressedKey]);
}
LastPressedKey=key_value;
}
return(0);
}
20ms左右检测一次 |
|