为什么有了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;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
开始也没明白是忽略了一个细节,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,即可实现连续按键并且程序连续读取。
一周热门 更多>