【发布时间】:2018-10-10 04:08:38
【问题描述】:
我正在尝试找出解决问题的最佳方法。 我有一个 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
...
【问题讨论】:
标签: microcontroller keydown keyup 8051 debouncing