Я пытаюсь найти лучший подход к моей проблеме.У меня есть микроконтроллер 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
...