独立看门狗实验中,有如下代码(mode=0):
u8 KEY_Scan(u8 mode)
{
static u8 key_up=1;//按键按松开标志
if(mode)key_up=1; //支持连按
if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))
{
delay_ms(10);//去抖动
key_up=0;
if(KEY0==0)return KEY0_PRES;
else if(KEY1==0)return KEY1_PRES;
else if(WK_UP==1)return WKUP_PRES;
}else if(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1;
return 0;// 无按键按下
}
main中截取关键句:
while(1)
{
if(KEY_Scan(0)==WKUP_PRES)IWDG_Feed();//如果WK_UP按下,则喂狗
delay_ms(10);
};
mode=0,可以忽略灰色阴影的条件。
1s内KEY0按下,即KEY0==0,运行黄色的if函数,这时key_up=0,但看门狗仍旧重启。这个没疑问。
再接着,按下WKUP,但此时key_up==0了,就无法进入到黄色的if中,则永远不会return WKUP_PRES,没能喂狗。
但硬件测试的时候却有喂狗,请详细说明我错在哪里了?万分感谢。
|