📄 z20040092_2.vhd
字号:
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_arith.ALL;
USE IEEE.std_logic_unsigned.ALL;
ENTITY z20040092_2 IS
PORT ( clock: IN std_logic;
num: IN std_logic_vector (4 DOWNTO 0); --键盘输入的键值
scancodes: OUT std_logic_vector (4 DOWNTO 0); --行扫描码
led10: OUT std_logic_vector (6 DOWNTO 0); --led十位
led1: OUT std_logic_vector (6 DOWNTO 0)); --led个位
END z20040092_2;
ARCHITECTURE keyboard OF z20040092_2 IS
SIGNAL kins : STD_LOGIC_VECTOR (5 DOWNTO 0); --列码
SIGNAL scans: STD_LOGIC_VECTOR(10 DOWNTO 0); --行列输出信号组合
SIGNAL scn: STD_LOGIC_VECTOR(4 DOWNTO 0); --循环扫描码
SIGNAL ss:STD_LOGIC_VECTOR(4 DOWNTO 0);
BEGIN
--循环生成扫描码--
PROCESS (clock)
VARIABLE i : integer RANGE 0 TO 4 := 0; --循环计数
BEGIN
IF(clock 'event and clock='1' and clock 'last_value='0')THEN
IF(i = 4)then
i := 0;
ELSE i := i+1;
END IF;
CASE i IS
WHEN 0=> scn <="01111";
WHEN 1=> scn <="10111";
WHEN 2=> scn <="11011";
WHEN 3=> scn <="11101";
WHEN 4=> scn <="11110";
END CASE;
END IF;
END PROCESS;
--键盘输入--
PROCESS (num,kins,clock)
BEGIN
CASE num IS
WHEN"00000"=>ss<="11110";kins<="011111";--0
WHEN"00001"=>ss<="11110";kins<="101111";--1
WHEN"00010"=>ss<="11110";kins<="110111";--2
WHEN"00011"=>ss<="11110";kins<="111011";--3
WHEN"00100"=>ss<="11101";kins<="011111";--4
WHEN"00101"=>ss<="11101";kins<="101111";--5
WHEN"00110"=>ss<="11101";kins<="110111";--6
WHEN"00111"=>ss<="11101";kins<="111011";--7
WHEN"01000"=>ss<="11011";kins<="011111";--8
WHEN"01001"=>ss<="11011";kins<="101111";--9
WHEN"01010"=>ss<="11011";kins<="110111";--10
WHEN"01011"=>ss<="11011";kins<="111011";--11
WHEN"01100"=>ss<="10111";kins<="011111";--12
WHEN"01101"=>ss<="10111";kins<="101111";--13
WHEN"01110"=>ss<="10111";kins<="110111";--14
WHEN"01111"=>ss<="10111";kins<="111011";--15
WHEN"10000"=>ss<="01111";kins<="011111";--16
WHEN"10001"=>ss<="11110";kins<="111101";--17
WHEN"10010"=>ss<="11110";kins<="111110";--18
WHEN"10011"=>ss<="11101";kins<="111101";--19
WHEN"10100"=>ss<="11101";kins<="111110";--20
WHEN"10101"=>ss<="11011";kins<="111101";--21
WHEN"10110"=>ss<="11011";kins<="111110";--22
WHEN"10111"=>ss<="10111";kins<="111101";--23
WHEN"11000"=>ss<="10111";kins<="111110";--24
WHEN"11001"=>ss<="01111";kins<="111101";--25
WHEN others => kins<="111111";
END CASE;
END PROCESS;
scans<=ss&kins;
scancodes<=scn;
--数码管输出--
PROCESS (clock)
VARIABLE j:integer RANGE 0 TO 4 := 0;
VARIABLE flag:integer := 0;
BEGIN
IF(clock 'event and clock='1')THEN
FOR j IN 0 TO 4 LOOP
IF(kins="111111")THEN
flag := flag+1;
END IF;
END LOOP;
IF(flag=5)THEN
led10<="0010010";led1<="0100000";
ELSE
CASE scans IS
WHEN"11110011111"=>led10<="0000001";led1<="0000001";
WHEN"11110101111"=>led10<="0000001";led1<="1001111";
WHEN"11110110111"=>led10<="0000001";led1<="0010010";
WHEN"11110111011"=>led10<="0000001";led1<="0000110";
WHEN"11101011111"=>led10<="0000001";led1<="1001100";
WHEN"11101101111"=>led10<="0000001";led1<="0100100";
WHEN"11101110111"=>led10<="0000001";led1<="0100000";
WHEN"11101111011"=>led10<="0000001";led1<="0001111";
WHEN"11011011111"=>led10<="0000001";led1<="0000000";
WHEN"11011101111"=>led10<="0000001";led1<="0000100";
WHEN"11011110111"=>led10<="1001111";led1<="0000001";
WHEN"11011111011"=>led10<="1001111";led1<="1001111";
WHEN"10111011111"=>led10<="1001111";led1<="0010010";
WHEN"10111101111"=>led10<="1001111";led1<="0000110";
WHEN"10111110111"=>led10<="1001111";led1<="1001100";
WHEN"10111111011"=>led10<="1001111";led1<="0100100";
WHEN"01111011111"=>led10<="1001111";led1<="0100000";
WHEN"11110111101"=>led10<="1001111";led1<="0001111";
WHEN"11110111110"=>led10<="1001111";led1<="0000000";
WHEN"11101111101"=>led10<="1001111";led1<="0000100";
WHEN"11101111110"=>led10<="0010010";led1<="0000001";
WHEN"11011111101"=>led10<="0010010";led1<="1001111";
WHEN"11011111110"=>led10<="0010010";led1<="0010010";
WHEN"10111111101"=>led10<="0010010";led1<="0000110";
WHEN"10111111110"=>led10<="0010010";led1<="1001100";
WHEN"01111111101"=>led10<="0010010";led1<="0100100";
WHEN others =>led10<="0010010";led1<="0100000";
END CASE;
END IF;
END IF;
END PROCESS;
END keyboard;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -