?为什么有了if(mode)key_up=1; 这个语句 ,就支持连按了??

2019-07-20 22:46发布


为什么有了if(mode)key_up=1;  这个语句 ,就支持连按了?


u8 KEY_Scan(u8 mode)
{  
static u8 key_up=1;
if(mode)key_up=1;     
if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==1))
{
delay_ms(10); 
key_up=0;
if(KEY0==0)return KEY_RIGHT;
else if(KEY1==0)return KEY_DOWN;
else if(KEY2==0)return KEY_LEFT;
else if(KEY3==1)return KEY_UP;
}else if(KEY0==1&&KEY1==1&&KEY2==1&&KEY3==0)key_up=1;    
  return 0;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
43条回答
小瓜123
2019-07-24 12:07
因为你没有需要连续按着一个按键响应多次的情况,如果有就会影响运行了。

开始也没明白是忽略了一个细节,key_up只是作为一个标志,但是开发指南的程序里if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==1))这里边判断按键按下是要跟key_up相与的,也就是当你有键按下时还需要key_up为1才能让程序读取到按键值。key_up作为静态变量只会被初始化一次,每一次读取到一个按键值后key_up就会被置0,让它重新变为1只有两种情况,一:else if(KEY0==1&&KEY1==1&&KEY2==1&&KEY3==0)key_up=1; 这里就并不是连续按了,只要你按键松开了,下次继续读取没问题。二:你如果是想连续按着不动又希望程序能多次读取到的话,必须通过if(mode)key_up=1;  这一句就能让key_up恢复1,这样就实现了不需要松开按键就让它恢复1,即可实现连续按键并且程序连续读取。

一周热门 更多>