利用中断调用函数
按键每隔20ms记住
#include <REGX52.H>
unsigned char KeyNumber;
unsigned char key;
void Init()
{
TMOD=0x01;
TL0=0x18;
TH0=0xFC;
TR0=1;
ET0=1;
EA=1;
}
unsigned char Key()
{
unsigned char Temp;//按键清0
Temp=KeyNumber;
KeyNumber=0;
return Temp;
}
void Key_Loop()
{
static unsigned NowState,LastState;
if(P3_1==0){KeyNumber=1;}
if(P3_0==0){KeyNumber=2;}
if(P3_2==0){KeyNumber=3;}
if(P3_3==0){KeyNumber=4;}
LastState=NowState
NowState=KeyNumber;
if(LastState==1&&NowState==0)
{
KeyNumber=1;
}
if(LastState==2&&NowState==0)
{
KeyNumber=2;
}
if(LastState==3&&NowState==0)
{
KeyNumber=3;
}
if(LastState==4&&NowState==0)
{
KeyNumber=4;
}
}
int main(){
Init();
while(1)
{
key=Key();
}
}
void Timer()interrupt 1
{
static unsigned int T0Count;
TL0=0x18;
TH0=0xFC;
T0Count++;
if(T0Count>=20)
{
T0Count=0;
Key_Loop();
}
}