stm32按键处理函数的逻辑关系是什么?
发布网友
发布时间:2022-05-01 17:01
我来回答
共1个回答
热心网友
时间:2022-06-19 22:59
static是静态变量只会执行一次
if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==1))这句意思是如果keyup为1,同时key0123中有一个按键被按下,那么if为真,执行取值操作,作为返回值付给主函数的t,
else if(KEY0==1&&KEY1==1&&KEY2==1&&KEY3==0)key_up=1;这个意思是如果上面的if为假,那么如果key0123没有一个被按下,那么keyup置1,
我们来分析如果不支持连按的情况,mode为0,
一开始你没按按键那么if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==1))为假不执行后面的语句执行elseif应为keyup没变过,所以没什么用。
假设你按的是key0,那么KEY0==0||KEY1==0||KEY2==0||KEY3==1为真,执行后面的语句,把keyup置0后,取出按键值,作为函数返回值送会给t,
如果你继续按着当下次按键扫描时到来时,static u8 key_up=1,这个只执行一次,同时mode又为0,那么keyup还是0,
然后执行到if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==1))这句,由于keyup是0所以不会执行if语句,执行elseif,但是你此时有有一个按键是被按下的,所以elseif里的keyup=1也不会被执行,因为elseif也是假的。然后返回值还是0,这就达到了不支持连按的目的
如果你按过之后送手了那么再看,if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==1))这条语句为假应为keyup为0执行elseif,此时由于你没有按按钮,所以会执行keyup=1这条语句,当下次扫描按钮来临时又恢复到了最初的情况。
同理可以分析出mode为1时的支持连按的情况