我想找出解决我问题的最佳方法。
我有一个AT89S52微控制器与3个按钮连接到3个单独的GPIO引脚,使微控制器可以执行基于这些按钮的不同功能。
我正在尝试编写代码,等待用户按下这三个键中的任何一个。我所说的按键,是指系统检测到任何一个按键被完全按下,然后被完全释放。
在不添加中断的情况下,有没有一种方法可以修改仅用几行显示的代码来可靠地检测用户按键?
我问这个问题是因为按键会经历一种叫做“弹跳”的现象,一旦有人按下一个键,它就会以高速抖动,微控制器会将其视为按键被多次按下和释放。如果用户只合法地按了一次键,我不希望发生这种情况。
;KEY1I, KEY2I and KEY3I = GPIO pins connected to the keys
;Pin value is low when key is held down
w4key:
;begin key scan
jnb KEY1I,w4keyend
jnb KEY2I,w4keyend
jnb KEY3I,w4keyend
;here, nothing is pressed so scan again
sjmp w4key
w4keyend:
;key pressed. Hope for release
jnb KEY1I,w4key
jnb KEY2I,w4key
jnb KEY3I,w4key
;here, key is released so return.
ret
mainline:
;do something
acall w4key
;do another thing
...