我正在设计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次被按下了6次,这是一个很大的错误。如果您能帮助我进行调试,我将非常高兴!
“ 1”和“ 2”发生相同的情况,仅对于同一行中的键,“ 7”和“ 8”发生相同的情况。由于这是一个正在进行的项目,因此我无法将我的VHDL代码放在网上:(如果您能给我一些克服该问题的技巧,我将非常高兴!
下面,我没有将我的代码上传到开发板上,没有代码在运行。连接Pin5
到地,在1,2,4,5,7,8单次按压,*,0不转Pin3
上,但如果林挤压6,然后加入4-同时LED Pin3
指示灯是亮的Pin7
LED是仍然有效,但当我的代码运行时,这不会发生。也许我连接错了,幸运的Pin7
是,我不知道...
以下是键盘的原理图: