xsxuanze.vhd

来自「VHDL的数字电子钟程序」· VHDL 代码 · 共 97 行

VHD
97
字号
-------------------------xsxuanze---------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith;
entity xsxuanze is
port(h_high : in std_logic_vector(3 downto 0);
     h_low : in std_logic_vector(3 downto 0);
     m_high : in std_logic_vector(3 downto 0);
     m_low : in std_logic_vector(3 downto 0);
     s_high: in std_logic_vector(3 downto 0);
     s_low: in std_logic_vector(3 downto 0);
     sdh_high : in std_logic_vector(3 downto 0);
     sdh_low : in std_logic_vector(3 downto 0);
     sdm_high : in std_logic_vector(3 downto 0);
     sdm_low : in std_logic_vector(3 downto 0);
     sds_high: in std_logic_vector(3 downto 0);
     sds_low: in std_logic_vector(3 downto 0);
     en : in std_logic;
     clk: in std_logic;
     BT : out std_logic_vector(7 downto 0);
     SG : out std_logic_vector(7 downto 0)          
     );
end xsxuanze;
architecture a of xsxuanze is
signal cnt8:std_logic_vector(2 downto 0);
signal AN  :std_logic_vector(3 downto 0);

begin
process(clk)
begin
	 IF (CLK'EVENT AND CLK = '1') THEN
			if cnt8 = "111" then 
			  cnt8 <="000";
			else 
			  CNT8	<=	CNT8 + "001";
			 end if;
     END IF;	  
end process;
P1:
	PROCESS (cnt8)
	BEGIN
		if(en='0')then
		CASE CNT8 IS
			WHEN "000" =>	BT <= "11111110";	An <=h_high;
			WHEN "001" =>	BT <= "11111101";	An <=h_low;
			WHEN "010" =>	BT <= "11111011";	An <="1111";
			WHEN "011" =>	BT <= "11110111";	An <=m_high;
			WHEN "100" =>	BT <= "11101111";	An <=m_low;
			WHEN "101" =>	BT <= "11011111";	An <="1111";
			WHEN "110" =>	BT <= "10111111";	An <=s_high;
			WHEN "111" =>	BT <= "01111111";	An <=s_low;
			WHEN OTHERS	=>  BT <= "11111111";   An <= "1110" ;                   
		END CASE;
		else
		CASE CNT8 IS
			WHEN "000" =>	BT <= "11111110";	An <=sdh_high;
			WHEN "001" =>	BT <= "11111101";	An <=sdh_low;
			WHEN "010" =>	BT <= "11111011";	An <="1111";
			WHEN "011" =>	BT <= "11110111";	An <=sdm_high;
			WHEN "100" =>	BT <= "11101111";	An <=sdm_low;
			WHEN "101" =>	BT <= "11011111";	An <="1111";
			WHEN "110" =>	BT <= "10111111";	An <=sds_high;
			WHEN "111" =>	BT <= "01111111";	An <=sds_low;
			WHEN OTHERS	=>  BT <= "11111111";   An <= "1110" ;                   
		END CASE;
		
		end if;
		
	END PROCESS P1;

P3:
	PROCESS ( An )
	BEGIN
		CASE An IS
			WHEN B"0000"  => SG <= "11000000";	-- 0
			WHEN B"0001"	=> SG <= "11111001";	-- 1
			WHEN B"0010"  => SG <= "10100100";	-- 2
			WHEN B"0011"	=> SG <= "10110000";	-- 3
			WHEN B"0100"  => SG <= "10011001";	-- 4
			WHEN B"0101"  => SG <= "10010010";	-- 5
			WHEN B"0110"  => SG <= "10000010";	-- 6
			WHEN B"0111"  => SG <= "11111000";	-- 7
			WHEN B"1000"  => SG <= "10000000";	-- 8
			WHEN B"1001"  => SG <= "10010000";	-- 9
			WHEN B"1010" => SG <= "10111111";--"0001000";	-- A
			WHEN B"1011" => SG <= "10111111";--"0000011";	-- B
			WHEN B"1100" => SG <= "10111111";--"1000110";	-- C
			WHEN B"1101" => SG <= "10111111";--"0100001";	-- D
			WHEN B"1110" => SG <= "11111111";--"0000110";	-- E
			WHEN B"1111" => SG <= "10111111";--"1111111";	-- -
			WHEN OTHERS => NULL;
		END CASE;
	END PROCESS P3;
end a;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?