关于按键实验if条件语句问题

2019-08-22 15:39发布

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;// 无按键按下
}
加红的if判断条件里key_up为什么没有判定条件,写成key_up==1?如果不加判定条件的话,在不支持连续按时,key_up的值为0时,这个if条件语句还会执行么?还是说如果不加判定条件的话,判断时只看后面括号里的逻辑或就行了,前面的key_up值为多少都无所谓?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
szczyb1314
1楼-- · 2019-08-22 21:32
本帖最后由 szczyb1314 于 2017-4-7 10:04 编辑

这个程序中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.实现按下锁定。
feng爸爸
2楼-- · 2019-08-23 00:33
再看一遍视频或者指南手册吧,原子哥解释挺详细的
d1z1y2
3楼-- · 2019-08-23 02:53
参考  while(1)  的用法
a==1 是个表达示,其值为true或false ,一般的编译系统定义为,0为假,非0为真, if(a) 里的a为整形,而if()要求的是布尔形,所以a会强制转换为布尔形,所以效果是一样的

一周热门 更多>