最简单精练的扫描按键处理
void KeyScan()
{
KeyRead=0x00;
if(!PIND.6)
{
KEYMODE=1;
KeyRead|=0x10;
}
else
{
KEYMODE=0;
KeyRead&=0xe0;
}
if(!PIND.5)
{
KEYUP=1;
KeyRead|=0x20;
}
else
{
KEYUP=0;
KeyRead&=0xd0;
}
if(!PIND.4)
{
KEYDOWN=1;
KeyRead|=0x40;
}
else
{
KEYDOWN=0;
KeyRead&=0xb0;
}
if(KeyRead==0x00)
{
FirKey=0;
SecKey=0;
if(!NonKey)
{
NoKeyCnt++;
if(NoKeyCnt>2)
{
NonKey=1;
}
}
KeySerCnt=0x00;
KeySpd=0x00;
}
else//KeyRead!=0
{
if(!FirKey)
{
FirKey=1;
}
else if(!SecKey)
{
SecKey=1;
NonKey=0;
NoKeyCnt=0;
ConductKey();
}
else
{
NonKey=0;
NoKeyCnt=0;
if( KEYMODE )
{
KeySerCnt++;
if(KeySerCnt>70)
{
KeySerCnt=0x00;
SerMode=1;
ConductKey();
}
}
else if( KEYUP|| KEYDOWN )
{
KeySerCnt++;
if(KeySerCnt>KeySpdTab[KeySpd])
{
KeySerCnt=0x00;
if(KeySpd<5)
{
KeyConductCnt++;
if(KeyConductCnt>6)
{
KeyConductCnt=0;
KeySpd++;
}
}
ConductKey();
}
}
}
}
} |