这是有的代码,差不多是按你说的那样写的,不过有点不同,自己想出来的,反正是能正常识别,抗4KV的EFT干扰没有问题,测试过的。
void KeyScan(void)
{
wdreset
if ( KeyScanF )//每10ms进入一次按键扫描;
{
KeyScanF = 0;
.DELAY 150//延时一段时间,待电容放电.
if ( KEY == 0 )//有按键按下
{
if ( KeyScanCounst < 200 )//计时仿止溢出;
{
KeyScanCounst++;
}
switch ( KeyScanCounst )
{
//case 1,2 延时扫描
case 8:
{
delay 3
if ( KEY == 0)//再次判断是否有键按下
{
if( onoffF == 1 )
{
onoffF = 0;
}else
{
onoffF = 1;
}
}else
{
KeyScanCounst = 0;
}
}break;
default :
{
if ( KEY == 1 )//如果没有按键按下,则认定为干扰或者抖动,计数清0
{
KeyScanCounst = 0;
}
}break;
}
}else //if ( KEY == 1 )
{
KeyScanCounst = 0;
}
}
} |