⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keyboard_dec.vhd

📁 maxplus2为开发环境 vhdl编写的 键盘 程序
💻 VHD
字号:
--******************************************************
--
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL ;
USE IEEE.STD_LOGIC_UNSIGNED.ALL ;
--******************************************************
--
ENTITY KEYBOARD_DEC1 IS
	PORT (  
			clk : IN STD_LOGIC ;       
			CLK_KEYBOARD : IN STD_LOGIC_VECTOR (1 downto 0);
            C: IN STD_LOGIC_VECTOR (2 downto 0); --key code after debounce
            out_numb : OUT STD_LOGIC_VECTOR(3 downto 0);  -- for numb. key
			out_func :  OUT STD_LOGIC_VECTOR(3 downto 0);  -- for func. key
			flag_numb : OUT STD_LOGIC ;                --flag for numb. key
			flag_func : OUT STD_LOGIC 	               --flag for func. key
		 ); 
END KEYBOARD_DEC1 ;
--******************************************************
--
ARCHITECTURE a OF KEYBOARD_DEC1 IS 
	signal FF  : std_logic ;                    --FLAG OF FUNC. 
	signal FN  : std_logic ;                    --FLAG OF NUMB. 

	signal Z   : std_logic_VECTOR(4 downto 0) ; --SCAN CODE
	signal F   : std_logic_VECTOR(3 downto 0) ; --FOR FUNC. CODE
	signal N   : std_logic_VECTOR(3 downto 0) ; --FOR NUMB. CODE
BEGIN

	PROCESS(clk)
	begin
		Z <= CLK_KEYBOARD & C ;
		IF CLK'EVENT  AND CLK = '1'  THEN
			case Z is
					when "11101" => N <= "0000" ;--0
					when "00011" => N <= "0001" ;--1
					when "00101" => N <= "0010" ;--2
					when "00110" => N <= "0011" ;--3
					when "01011" => N <= "0100" ;--4
					when "01101" => N <= "0101" ;--5
					when "01110" => N <= "0110" ;--6
					when "10011" => N <= "0111" ;--7
					when "10101" => N <= "1000" ;--8
					when "10110" => N <= "1001" ;--9
					when others  => N <= "1111" ;
			end case ;
		END IF ;
--****************************
		IF CLK'EVENT  AND CLK = '1'  THEN
			case  Z is
					when "11011" => F <= "0100" ;--*_LOCK
					when "11110" => F <= "0001" ;--#_UNLOCK
					when others  => F <= "1000" ;
			end case ;		
		END IF ;
	end process ;
	FN <=  NOT ( N(3) AND N(2) AND N(1) AND N(0) ) ;
	FF <=  ( NOT F(3) AND F(2) AND NOT F(1) AND NOT F(0)) OR (NOT F(3) AND NOT F(2) AND NOT F(1) AND F(0) ) ;

--CONNECTION
	FLAG_NUMB <= FN ; 
	FLAG_FUNC <= FF ;
	OUT_NUMB <= N ;
	OUT_FUNC <= F ;
--PROCESS (CLK)
--BEGIN
--IF CLK'EVENT  AND CLK = '1'  THEN
--R1 <= R0 ; R0 <= FF ; 
--END IF ;
--RR2 <= R1 XOR R0 ;
--R2 <= RR2 ;
--END PROCESS ;

END a;


⌨️ 快捷键说明

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