?为什么有了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条回答
zcy12321
1楼-- · 2019-07-24 00:26
楼主,你把if(mode)key_up=1;
分开,成
if(mode)
key_up=1;
就知道了,这就是个条件判断语句。如果mode是0,就不会执行这个if语句。如果mode是1,每次key_up会被还原成1
未来的风筝
2楼-- · 2019-07-25 13:50
本帖最后由 未来的风筝 于 2017-5-24 09:34 编辑

我来大概哦总结一下吧,我也刚看这个程序:
1)mode是函数接口,调用的时候mode可以选择:a)mode=0,每次只能读取一次按键值,需要KE3复位才能再次读取;b)mode=1,此时key_up每次均为1,可以连续读取(不管是否KEY3);
2)mode=0时,是static使得key_up保持上次调用时的状态,例如,第一次是KEY1,则key_up会变成0,再次调用函数时候,key_up还是0,函数返回值为0,表示无变化。
空翼0
3楼-- · 2019-07-22 01:47
在(mode)后加几个空格你就会明白了
犬大犬
4楼-- · 2019-07-23 19:09
回复【17楼】正点原子:
---------------------------------
static u8 key_up = 1;//按键松开标志位
if (mode) key_up = 1;//支持连续按键

你好,这样的话,不管mode是1还是0,key_up都是1,那这样的话没有区别啊,请教了,谢谢!
jermy_z
5楼-- · 2019-07-20 23:06
 精彩回答 2  元偷偷看……
TinyBoy
6楼-- · 2019-07-21 03:49
一行一行的看,看它怎样执行,一定可以看懂的。

一周热门 更多>