Я проектую клавіатуру в 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, я не знаю ...

Нижче наведено схеми плати клавіатури:


