|
8个独立中断按键。
在中断后,先进行延时防抖,然后进行检查哪个按键被按下。当按键检查完后,判断按键是否释放,若释放,则返回。程序如下所示。
但是运行的时候,发现有时候按键后,按键次数加2 ,也就是说进入中断两次。难道判断按键释放的程序不对吗?到底该怎样考虑才能保证每次按键只会响应一次?
程序:
BYTE GetKey()
{
BYTE k;
unsigned char i,value;
value=100;
while(value--)
{
for(i=220;i>0;i--)
;
}
k=P1;
k=k&0xFF;
// return k;
switch(k)
{
case 0xFE:
return 1;
break;
case 0xFD:
return 2;
break;
case 0xFB:
return 3;
break;
case 0xF7:
return 4;
break;
case 0xEF:
return 5;
break;
case 0xDF:
return 6;
break;
case 0xBF:
return 7;
break;
case 0x7F:
return 8;
break;
default:
return 0;
break;
}
}
//*****************************************************************************
//外部中断响应程序
//*****************************************************************************
Int0_process() interrupt 0 using 0
{
BYTE k;
EA=0; //屏蔽所有中断
key1=GetKey();
key++;
while(1) //等待按键释放
{
k=P1;
k=k&0xFF;
if(k!=0xFF)
{
_nop_();
}
else
break;
}
EA=1;
}
|
|