📄 xianshi.vhd
字号:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY XIANSHI IS
PORT (
RST : IN STD_LOGIC;
clk1 : IN std_logic;
K : IN STD_LOGIC;
data_in_buff : in std_logic_vector(31 downto 0);
en : OUT std_logic_vector(7 DOWNTO 0); --输出一个低电平给矩阵键盘的某一行
seg_data : OUT std_logic_vector(7 DOWNTO 0)); -- 数码管使能
end xianshi;
ARCHITECTURE behave_shu OF XIANSHI IS
SIGNAL cnt_scan : std_logic_vector(11 DOWNTO 0);
SIGNAL en_xhdl3 : std_logic_vector(7 DOWNTO 0);
SIGNAL seg_data_buf : std_logic_vector(3 DOWNTO 0);
SIGNAL seg_data_xhdl4 : std_logic_vector(7 DOWNTO 0);
SIGNAL DATAIN : std_logic_vector(32 downto 1);
begin
seg_data<=seg_data_xhdl4;
en(7 downto 0)<= en_xhdl3;
PROCESS(clk1)
BEGIN
IF(clk1'event and clk1='1')THEN
IF(K='0') THEN
DATAIN<=DATA_IN_BUFF;
ELSE
DATAIN<="10101010101010101010101010100000";
END IF;
END IF;
END PROCESS;
PROCESS(clk1)
BEGIN
IF (NOT RST = '1') THEN
cnt_scan <= "000000000000";
en_xhdl3 <= "11111110";
ELSIF(clk1'event and clk1='1')THEN
cnt_scan <= cnt_scan + "000000000001";
IF (cnt_scan = "101111111111"and (en_xhdl3="11111110")) THEN
en_xhdl3 <= "11111101";
elsIF (cnt_scan = "111111111111"and (en_xhdl3="11111101")) THEN
en_xhdl3 <= "11111011";
elsIF (cnt_scan = "111111111111"and (en_xhdl3="11111011")) THEN
en_xhdl3 <= "11110111";
elsIF (cnt_scan = "111111111111"and (en_xhdl3="11110111")) THEN
en_xhdl3 <= "11101111";
elsif(cnt_scan = "101111111111"and (en_xhdl3="11101111")) THEN
en_xhdl3 <= "11011111";
elsIF (cnt_scan = "101111111111"and (en_xhdl3="11011111")) THEN
en_xhdl3 <= "10111111";
elsIF (cnt_scan = "101111111111"and (en_xhdl3="10111111")) THEN
en_xhdl3 <= "01111111";
elsIF (cnt_scan = "101111111111"and (en_xhdl3="01111111")) THEN
en_xhdl3 <= "11111110";
END IF;
END IF;
END PROCESS;
PROCESS(data_in_buff)
BEGIN
CASE en_xhdl3 IS
WHEN "11111110" =>
seg_data_buf <= dataIN(32 downto 29);
WHEN "11111101" =>
seg_data_buf <= dataIN(28 downto 25);
WHEN "11111011" =>
seg_data_buf <= dataIN(24 downto 21);
WHEN "11110111" =>
seg_data_buf <= dataIN(20 downto 17);
WHEN "11101111" =>
seg_data_buf <= dataIN(16 downto 13);
WHEN "11011111" =>
seg_data_buf <= dataIN(12 downto 9);
WHEN "10111111" =>
seg_data_buf <= dataIN(8 downto 5);
WHEN "01111111" =>
seg_data_buf <= dataIN(4 downto 1);
WHEN OTHERS =>
seg_data_buf <= "0000";
END CASE;
END PROCESS;
PROCESS(seg_data_buf)
BEGIN
CASE seg_data_buf IS
WHEN "0000" =>
seg_data_xhdl4 <= "00000011";
WHEN "0001" =>
seg_data_xhdl4 <= "10011111";
WHEN "0010" =>
seg_data_xhdl4 <= "00100101";
WHEN "0011" =>
seg_data_xhdl4 <= "00001101";
WHEN "0100" =>
seg_data_xhdl4 <= "10011001";
WHEN "0101" =>
seg_data_xhdl4 <= "01001001";
WHEN "0110" =>
seg_data_xhdl4 <= "01000001";
WHEN "0111" =>
seg_data_xhdl4 <= "00011111";
WHEN "1000" =>
seg_data_xhdl4 <= "00000001";
WHEN "1001" =>
seg_data_xhdl4 <= "00011001";
WHEN "1010" =>
seg_data_xhdl4 <= "00010001";
WHEN "1011" =>
seg_data_xhdl4 <= "11000001";
WHEN "1100" =>
seg_data_xhdl4 <= "01100011";
WHEN "1101" =>
seg_data_xhdl4 <= "10000101";
WHEN "1110" =>
seg_data_xhdl4 <= "01100001";
WHEN "1111" =>
seg_data_xhdl4 <= "01110001";
WHEN OTHERS =>
seg_data_xhdl4 <= "11111111";
END CASE;
END PROCESS;
END behave_shu;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -