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值为多少都无所谓?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
这个程序中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.实现按下锁定。
a==1 是个表达示,其值为true或false ,一般的编译系统定义为,0为假,非0为真, if(a) 里的a为整形,而if()要求的是布尔形,所以a会强制转换为布尔形,所以效果是一样的
一周热门 更多>