我希望有人能对此提供帮助。
我为8051微控制器设计了一个功能,该功能可以接受来自按钮的输入,并且我正在使用8位循环缓冲区来存储键状态,因此我可以避免出现反跳问题。
将数据存储在缓冲区中并检查一键的代码在这里:
https://github.com/omikolaj/movies-place-api
只有一件事...我的可用内存非常有限,我想我可以以某种方式使用8位缓冲区中的一位来存储标志。我希望该标志表示该特定键是允许按下还是仅被按下。
我将在左列显示检测到按键时数据如何流入缓冲区。我想发生的是下面右栏中显示的内容。
让x等于未知值,并且a到m分别代表新的按钮扫描值1到13,并且让Z等于自定义标志,该标志永远不会被按键扫描例程更改。
VALIDPRESS equ 0Fh ;0Fh = detect as valid if key held somewhat
CYCLICBUFFER equ 10h ;10h is a randomly picked value as example
mov R0,#CYCLICBUFFER ;memory location for key buffer
mov C,KEY ;KEY = GPIO pin button is attached to
mov A,@R0 ;A = data found at address CYCLICBUFFER
rlc A ;Shift in new detected value
mov @R0,A ;Store updated byte to address CYCLICBUFFER
cjne A,#VALIDPRESS,nokey ;See if buffer contains bits in right order
;If it does, the key is valid
nokey:
是否有一种简单的方法可以解决此问题,而无需占用大量内存或大量时钟周期?