Я проектую клавіатуру в VHDL. Все працює добре, коли натискається лише одна клавіша. Я сканую кожний стовпець для натискання клавіші в машині стану, і коли не натискається жодна клавіша, це умова, що pin4pin6pin7pin2 = "0000"
я переходжу до наступного стану для сканування наступного стовпця. Таким чином, я встановлюю стовпчики pin3pin1pin5
послідовно на "001"
, "010"
і "100"
.
Під час сканування pin3pin1pin5
як "001"
і pin4pin6pin7pin2
як "0100"
тоді просто натискається "9". Я оголошую в VHDL pin4pin6pin7pin2
як вхідний і pin3pin1pin5
вихідний порти. Коли я одночасно натискаю 6 і 9 pin6
і pin7
є high
. Перша натиснута клавіша читається, друга ігнорується. Коли я натискаю 3 і 7 одночасно, перша натискається за кілька мс перед перемогою, і перша клавіша читається, друга клавіша ігнорується, pin2
і pin4
є high
.
Ось хитра частина. Коли я натискаю 4 і 6 одночасно, я очікую, що pin7
це буде, high
але це стає low
і pin4pin6pin7pin2 = "0000"
, що я не розумію, як і чому. Оскільки "0000"
виявляється як не натиснута клавіша, державна машина переходить із стану в стан. Утримуючи 4 і 6, якщо один натискає і залишає 4 кілька разів, його виявляють як 6 натискають кілька разів, що є великою помилкою . Буду радий, якщо ви можете допомогти мені налагодити це!
Те ж саме відбувається і з "1" і "2", те ж саме з "7" і "8" лише для клавіш в одному рядку. Оскільки це поточний проект, я не можу розмістити свій код VHDL в Інтернеті :( Буду радий, якщо ви можете дати мені поради щодо подолання цього!
Нижче я не завантажую свій код на плату, не працює код. Підключившись Pin5
до землі, одним натисканням на 1,2,4,5,7,8, *, 0 не вмикається Pin3
світлодіод, але якщо я натискаю 6, а потім 4 одночасно Pin3
світлодіод увімкнено, і Pin7
світлодіод все ще вмикається , але коли мій код працює, цього не відбувається. Можливо, я пов’язав щось не так, і на щастя Pin7
, я не знаю ...
Нижче наведено схеми плати клавіатури: