我正在用 VHDL 设计一个键盘。当只按下一个键时,一切正常。我正在扫描状态机中的每一列以查找按键,当没有按键被按下时,这是pin4pin6pin7pin2 = "0000"
我切换到下一个状态以扫描下一列的条件。因此,我将列pin3pin1pin5
顺序设置为"001"
,"010"
和"100"
。
在扫描pin3pin1pin5
时"001"
,如果pin4pin6pin7pin2
是,"0100"
则只需按下“9”。我在 VHDL 中声明pin4pin6pin7pin2
为输入和pin3pin1pin5
输出端口。当我同时按 6 和pin6
9pin7
时high
。读取第一个按键,忽略第二个按键。当我同时按下 3 和 7 时,第一个在几毫秒前按下获胜并读取第一个键,第二个键被忽略,pin2
并且pin4
是high
.
这是棘手的部分。当我同时按 4 和 6 时,我希望pin7
是,high
但它变成了low
and pin4pin6pin7pin2 = "0000"
,我不明白如何以及为什么。因为"0000"
被检测为没有按下键,所以状态机从一个状态跳到另一个状态。按住 4 和 6 如果一个人按几次离开 4 ,就会被检测为 6 按了几次,这是一个很大的错误。如果你能帮我调试这个,我会很高兴!
“1”和“2”也会发生同样的事情,“7”和“8”也会发生同样的事情,仅针对同一行的键。由于这是一个正在进行的项目,我不能将我的 VHDL 代码放到网上 :( 如果你能给我一些提示来克服这个问题,我会很高兴的!
下面,我没有将我的代码上传到板上,没有代码正在运行。接地Pin5
,按一下 1,2,4,5,7,8,*,0 不会打开Pin3
LED,但如果我同时按 6 和 4,Pin3
LED 会亮,Pin7
LED 仍然亮,但是当我的代码运行时,这不会发生。也许我连接错了,幸运Pin7
的是,我不知道......
下面是键盘的原理图: