按键输入实验有问题?

2019-08-14 19:18发布

最近在看原子的战舰板,感觉很好用。现在做到按键输入实验,key.c中有个函数不是很明白 [mw_shl_code=c,true]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; } [/mw_shl_code] 这个函数中,哪里能体现出mode:1支持连按和mode:0不支持连按?
main函数中这样调用,MODE=0;KEY_Scan(MODE).
我是这样理解的:无论MODE为何值,每一次调用,执行到 [mw_shl_code=c,true]if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==1))[/mw_shl_code] [mw_shl_code=c,true]这一行,key_up总是为1,子函数也没有循环,所以两种模式根本体现不出来,求指教。。。[/mw_shl_code] [mw_shl_code=c,true] [/mw_shl_code] [mw_shl_code=c,true] [/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
26条回答
初成长
1楼-- · 2019-08-17 09:24
回复【2楼】西门吹雪:
---------------------------------
那么请问主程序一开始就让mode=0,可是在KEY_SCAN 函数中并不能反应出不支持连续按这一特点啊 我知道局部静态变量的作用 可是对于第一次执行key.c程序 那Mode=0 跟MODE=1 又有什么区别呢 总归一开始key_up=1 然后之后才会被赋值0 并不会再被初始化 那么Mode的出现就没有意义了 
实在觉得这程序不对劲 急求答复
西门吹雪
2楼-- · 2019-08-17 13:28
回复【20楼】初成长:
---------------------------------
如果mode =0 的话 ,第一次扫描按键时,就把key_up置0 了,那么下次就进入不了按键判断了
李少帅
3楼-- · 2019-08-17 14:53
回复【8楼】_tank_:
---------------------------------
6666666666666666
李少帅
4楼-- · 2019-08-17 16:12
 精彩回答 2  元偷偷看……
李少帅
5楼-- · 2019-08-17 18:48
回复【21楼】西门吹雪:
---------------------------------
正解
xdl932365660
6楼-- · 2019-08-17 20:08
_tank_ 发表于 2014-6-4 16:54
是不是不知道static的作用 
用 static 修饰的局部变量 只会初始化一次 
比如
int ...

不对吧,带哥。第二次调用时a++为4,b依然是3吧

一周热门 更多>