library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
entity key_decode is
port (
key_out : out std_logic_vector(15 downto 0);
enable1 : out std_logic;
row_indata, column_in : in std_logic_vector(3 downto 0);
clk1 : in std_logic
);
end key_decode;
architecture Behavioral of key_decode is
signal key_data: std_logic_vector(3 downto 0);
signal key_out_s: std_logic_vector(15 downto 0);
begin
enable1 <= '0' when row_indata = "1111" else
'1';
process(clk1)
begin
if(clk1'event and clk1 ='1') then
key_out_s(15 downto 4) <= key_out_s(11 downto 0);
key_out_s(3 downto 0) <= key_data;
elsif(row_indata="0111" and column_in="0111") then
key_data<="0001"; -- binary for 1
elsif(row_indata="0111" and column_in="1011") then
key_data<="0010"; -- binary for 2
elsif(row_indata="0111" and column_in="1101") then
key_data<="0011"; -- binary for 3
elsif(row_indata="0111" and column_in="1110") then
key_data<="1111"; -- binary for F
elsif(row_indata="1011" and column_in="0111") then
key_data<="0100"; -- binary for 4
elsif(row_indata="1011" and column_in="1011") then
key_data<="0101"; -- binary for 5
elsif(row_indata="1011" and column_in="1101") then
key_data<="0110"; -- binary for 6
elsif(row_indata="1011" and column_in="1110") then
key_data<="1110"; -- binary for E
elsif(row_indata="1101" and column_in="0111") then
key_data<="0111"; -- binary for 7
elsif(row_indata="1101" and column_in="1011") then
key_data<="1000"; -- binary for 8
elsif(row_indata="1101" and column_in="1101") then
key_data<="1001"; -- binary for 9
elsif(row_indata="1101" and column_in="1110") then
key_data<="1101"; -- binary for D
elsif(row_indata="1110" and column_in="0111") then
key_data<="1010"; -- binary for A
elsif(row_indata="1110" and column_in="1011") then
key_data<="0000"; -- binary for 0
elsif(row_indata="1110" and column_in="1101") then
key_data<="1011"; -- binary for B
elsif(row_indata="1110" and column_in="1110") then
key_data<="1100"; -- binary for C
end if;
end process;
key_out <= key_out_s;
end Behavioral;