我的按键是这样处理的
1.读健状态,与上次健状态比较,不同,更新健状态和当前时间,相同则时间不变(或者加一)
2.当前时间与最后一次更新按键时间比较,超出规定时间,则可以判断健已经稳定。
3.与以前比较,就可以进行健处理了。
缺点,用的RAM多,优点,不等待
#include
#include
void ReadKey(void)
{
byte i,Temp0;
bit KeyFlag;
static byte Q0;
P1 = 0xff;
Temp0 = ~P1;
if(Temp0 != Qsw0)
{
Qsw0 = Temp0;
KeyTime = Time20ms;
}
else
{
if(Time20ms - KeyTime > 3)
{KeyFlag = 1;}
}
if(KeyFlag)
{ KeyFlag = 0;
i = Qsw0 &~Q0 & 0xbb; //健按下
if(i)
{
if(i & 0x80) {KeyValue = BryRightKey;}
if(i & 0x20) {KeyValue = AddRightKey;}
if(i & 0x10) {KeyValue = SubbRightKey;}
if(i & 0x08) {KeyValue = ReadPhotoRightKey;}
if(i & 0x02) {KeyValue = LgyRightKey;}
if(i & 0x01) {KeyValue = LightRightKey;}
}
i = Q0 &~Qsw0 & 0xbb; //健松开
if(i)
{
//健松开,处理代码;
}
Q0 = Qsw0;
}
}