用中断处理或者是定时扫描按键的方法,如何确保不丢键?
答案:3 悬赏:50
解决时间 2021-02-18 06:11
- 提问者网友:逝爱
- 2021-02-17 17:11
按键的处理方法可能莫过于主程序扫描,中断扫描法和定时扫描法。使用中断扫描和定时扫描的方法只有有按键触发中断或是定时时间到了在进行处理按键程序相比于主程序循环扫描的方法可能占用系统资源会更少。但在使用中断扫描或是定时扫描的时候如何才能保证按键能及时的响应而又不丢键呢?比如说定时扫描,扫描到了新的按键 但这个时候主函数来不及处理,要等一会才能响应。但就在这个期间又有了新的按键 这就会导致上一次按键丢键。我能想到的办法就是开辟按键缓存,把没有响应的键都储存起来,然后等到系统逐一响应。不知道各位对这个有什么别的看法?还是说我多虑了~二姨家的朋友们多多赐教啊~
最佳答案
- 二级知识专家网友:如果这是命
- 2021-02-17 17:43
大概可以这么写void EXIT(){ key_read();//读键值 function = 0x01;//判断键值}void key_judge(){ switch(键值) { case 键值1: {function=0x10;break;} case 键值2: {function=0x11;break;} . . . }}void key_handing1();//按键1处理{ 处理…… function = 0;}void man(){ INIT(); while(1) { if(function == 0x01) key_judge();//键值判断 if(function == 0x10) key_handing1();//按键1处理 if(function == 0x11) key_handing2();//按键2处理 。 。 。 }}
全部回答
- 1楼网友:何必打扰
- 2021-02-17 18:31
自己建一个状态表,有按键按下就在对应的状态表上置1,在开起超时功能防止系统不进行处理。主程序要做的就是查这个状态表,当查到对应该的状态表上有按键按下的时候,去执行相应的功能,执行完以后清状态表,这样你的按键就不会被其他按键打断,就是其他按键按下你不会清除你以前按下的按的状态,除非他执行了或者超时了。这样实现起来基本没什么问题了
- 2楼网友:高冷不撩人
- 2021-02-17 18:22
只要主程序处理得当,不会丢失按键.所以不用特殊的处理.若是程序中有太多的while(delay)这样的东西就不好说了.按键总是要消抖的,小于100ms左右的延时,从程序角度看抖动就是一连串的按键.
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯