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

📄 key.vhd

📁 用VHDL实现的键盘扫描程序 可以稍微修改就可使用
💻 VHD
字号:
library ieee;
use  ieee.std_logic_1164.all;



entity key is
     port(
            clk : in std_logic;
            line: in std_logic_vector(3 downto 0);
            row: out std_logic_vector(3 downto 0); 
            key_num: out std_logic_vector(3 downto 0);
            
            int:out std_logic
          );
end key;


architecture a of  key is
    signal key_num_temp: std_logic_vector(3 downto 0);
    signal state1:std_logic_vector(1 downto 0);
     begin 
       process(clk)
         begin
         if(clk 'event and clk='1')then
           row<="0000";
           if (line/="1111") then
            
           int<='1';
          case state1 is 
              when "00"=>
                     row<="1110";
                     case line is
                        when "0111"=>key_num_temp<="0011";
                        when "1011"=>key_num_temp<="0111"; 
                        when "1101"=>key_num_temp<="1011"; 
                        when "1110"=>key_num_temp<="1111"; 
                        when others=>key_num_temp<="1111"; 
                     end case;
                     state1<="01";

              when "01"=>
                    row<="1101";
                    case line is
                        when "0111"=>key_num_temp<="0010"; 
                        when "1011"=>key_num_temp<="0110"; 
                        when "1101"=>key_num_temp<="1010"; 
                        when "1110"=>key_num_temp<="1110";
                        when others=>key_num_temp<="1111";
                    end case;
                    state1<="10";
              when "10"=>
                  row<="1011";
                  case line is
                        when "0111"=>key_num_temp<="0000";
                        when "1011"=>key_num_temp<="0100"; 
                        when "1101"=>key_num_temp<="1000";
                        when "1110"=>key_num_temp<="1100"; 
                        when others=>key_num_temp<="1111";
                  end case;
                   state1<="11";
                 
              when "11"=>
                  row<="0111";
                 case line is
                       when "0111"=>key_num_temp<="0001";
                       when "1011"=>key_num_temp<="0101"; 
                       when "1101"=>key_num_temp<="1001"; 
                       when "1110"=>key_num_temp<="1101"; 
                       when others=>key_num_temp<="1111";
                end case;
   
             state1<="00"; 
          end case;          
           
         else int<='0';     
         key_num_temp<=key_num_temp; 
            
            
        end if;
        end if;
     end process;
   key_num<=key_num_temp;
  
  end a;
           
        

⌨️ 快捷键说明

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