关于KEY_Scan函数的理解

2019-08-22 15:33发布

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)) //因为key0和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;
}

函数如上所示,就是不明白这个按键松开的意思是认为的通过设置mode告诉单片机这个按键现在是松开的还是按下的?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
szczyb1314
2019-08-22 20:33
这个程序中if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))与if((key_up==1)&&(KEY0==0||KEY1==0||WK_UP==1))   效果是一样的。mode为1支持连按时,判断之前的if(mode)key_up=1使key_up先为1,再判断时就只需要判断是那个按键按下了。mode为0不支持连按时,第一次按键按下时key_up为1,并且KEY0==0||KEY1==0||WK_UP==1中有一个成立时key_up被重新幅值0,由于它是static的,下次判断if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))时key_up为0就不再执行,你松开按键这个函数再执行一次时key_up又赋值为1.实现按下锁定。

一周热门 更多>