📄 key_board.vhd
字号:
--------------------------------------------------------------------------------------
--引脚的配置:D3~DO接pin24~pin21 D4~D7接pin47~pin50 led接pin72 pin70 pin69 pin67---
--------------------------------------------------------------------------------------
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY KEY_BOARD IS
PORT(
CLK :IN STD_LOGIC;
COLUMN :IN STD_LOGIC_VECTOR(3 DOWNTO 0);---row
LINE :BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);--col
KEY_VALUE :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
FLAG_OUT :OUT STD_LOGIC
);
END ENTITY;
ARCHITECTURE A OF KEY_BOARD IS
BEGIN
-----------------输出扫描行线的值------------------
PROCESS
VARIABLE X_VALUE :STD_LOGIC_VECTOR(3 DOWNTO 0):="1110";
BEGIN
WAIT UNTIL RISING_EDGE(CLK);
IF X_VALUE="1111"THEN
X_VALUE:="1110";
ELSE---若有键按下就在这执行
X_VALUE:=X_VALUE(2 DOWNTO 0)&'1';---后三位和1进行合并,轮流输出扫描线,前次的值依次后移3为在于1相与
END IF;
LINE<=X_VALUE;
END PROCESS;
--------------------检测按键操作--------------------
PROCESS
VARIABLE HIT_FLAG :STD_LOGIC; --按键标志
VARIABLE KEYVAL :STD_LOGIC_VECTOR(3 DOWNTO 0);
VARIABLE XY_VALUE :STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
WAIT UNTIL RISING_EDGE(CLK);
IF COLUMN="1111"THEN --松开按键,传递键值;column为1时,两种可能,按下又松开,一个是未按下,所以需要一个 --按键标志
IF HIT_FLAG ='1' THEN
HIT_FLAG:='0';
FLAG_OUT<='1'; --输出键值标志
KEY_VALUE<=KEYVAL; --输出键值
ELSE
FLAG_OUT<='0';
END IF;
ELSE
FLAG_OUT<='0';
HIT_FLAG:='1'; --有键按下
XY_VALUE:=COLUMN & LINE;
CASE XY_VALUE IS
WHEN "11101110"=>KEYVAL:="0000"; --0
WHEN "11101101"=>KEYVAL:="0001"; --1
WHEN "11101011"=>KEYVAL:="0010"; --2
WHEN "11100111"=>KEYVAL:="0011"; --3
WHEN "11011110"=>KEYVAL:="0100"; --4
WHEN "11011101"=>KEYVAL:="0101"; --5
WHEN "11011011"=>KEYVAL:="0110"; --6
WHEN "11010111"=>KEYVAL:="0111"; --7
WHEN "10111110"=>KEYVAL:="1000"; --8
WHEN "10111101"=>KEYVAL:="1001"; --9
WHEN "10111011"=>KEYVAL:="1010"; --10
WHEN "10110111"=>KEYVAL:="1011"; --11
WHEN "01111110"=>KEYVAL:="1100"; --12
WHEN "01111101"=>KEYVAL:="1101"; --13
WHEN "01111011"=>KEYVAL:="1110"; --14
WHEN "01110111"=>KEYVAL:="1111"; --15
WHEN OTHERS=>NULL;
END CASE;
END IF;
END PROCESS;
END a;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -