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

📄 ok1.txt

📁 用vhdl语言编写的ps2键盘识别程序,并可输出到8*8矩阵显示
💻 TXT
📖 第 1 页 / 共 2 页
字号:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity ccc is
port(clk,ps2clk,data:in std_logic;
ho: out std_logic_vector(7 downto 0);
vo: out std_logic_vector(7 downto 0);
led:out std_logic_vector(7 downto 0));
end ccc;
architecture frame of ccc is
   signal temp:std_logic_vector(3 downto 0);
   signal byte:std_logic_vector(8 downto 0);
   signal ready:std_logic;
   signal code:std_logic_vector(7 downto 0);
   signal counter,counter1:integer range 1 to 8;
  begin
   process(ps2clk,data)                      
  begin
   if(ps2clk'event and ps2clk='0') then
      if(data='0' and ready='0')then 
           ready<='1';
           temp<="0000";
      elsif (ready='1') then
           if temp<"1001" then
              temp<=temp+1;
              byte(7 downto 0)<=byte(8 downto 1);
              byte(8)<=data;          
            else
              ready<='0';
              code<=byte(7 downto 0);
              temp<="0000";
              end if;
              end if;
      end if;
 case code is
      when "01000101"=>led<="11111100"; --0
      when "00010110"=>led<="01100000"; --1
      when "00011110"=>led<="11011010"; --2
      when "00100110"=>led<="11110010"; --3
      when "00100101"=>led<="01100110"; --4
      when "00101110"=>led<="10110110"; --5
      when "00110110"=>led<="10111110"; --6
      when "00111101"=>led<="11100000"; --7
      when "00111110"=>led<="11111110"; --8
      when "01000110"=>led<="11110110"; --9
      when "00011100"=>led<="11101110"; --A
      when "00110010"=>led<="00111110"; --B
      when "00100001"=>led<="10011100"; --C
      when "00100011"=>led<="11111100"; --D
      when "00100100"=>led<="10011110"; --E
      when "00101011"=>led<="10001110"; --F
      when "00110100"=>led<="10111101"; --G
      when "00110011"=>led<="01101110"; --H
      when "01000011"=>led<="01110000"; --I
      when "00111011"=>led<="11100000"; --J
      when "01000010"=>led<="01101110"; --K
      when "01001011"=>led<="00011100"; --L
      when "00111010"=>led<="11101100"; --M
      when "00110001"=>led<="11101100"; --N
      when "01000100"=>led<="11111100"; --O
      when "01001101"=>led<="11001110"; --P
      when "00010101"=>led<="11111101"; --Q
      when "00101101"=>led<="11101111"; --R
      when "00011011"=>led<="10110111"; --S
      when "00101100"=>led<="11100000"; --T
      when "00111100"=>led<="01111100"; --U
      when "00101010"=>led<="00111000"; --V
      when "00011101"=>led<="01111111"; --W
      when "00100010"=>led<="01101110"; --X
      when "00110101"=>led<="01110110"; --Y
      when"00011010"=>led<="11011011"; --Z
      when others=>led<="00000000";
      end case;
 end process;
 
process(clk)
 begin
    if (clk'event and clk='1') then
       if(counter=8) then
        counter<=1;
       else
        counter<=counter+1;
       end if;
    end if;
 end process;
 counter1<=counter;
 process(counter1)
 begin
   
 case code is
      when "01000101"=>                       --'0'
               case counter1 is               --'0'
                 when 1=>ho<="10000000";vo<="11111111";
                 when 2=>ho<="01000000";vo<="11100111";
                 when 3=>ho<="00100000";vo<="11011011";
                 when 4=>ho<="00010000";vo<="11011011";
                 when 5=>ho<="00001000";vo<="11011011";
                 when 6=>ho<="00000100";vo<="11011011";
		         when 7=>ho<="00000010";vo<="11100111";
		         when 8=>ho<="00000001";vo<="11111111";
		         when others=>ho<="00000000";vo<="11111111";
		        end case;
	  when "00010110"=>                       --'1'
               case counter1 is
                 when 1=>ho<="10000000";vo<="11111111";
                 when 2=>ho<="01000000";vo<="11101111";
                 when 3=>ho<="00100000";vo<="11101111";
                 when 4=>ho<="00010000";vo<="11101111";
                 when 5=>ho<="00001000";vo<="11101111";
                 when 6=>ho<="00000100";vo<="11101111";
		         when 7=>ho<="00000010";vo<="11101111";
		         when 8=>ho<="00000001";vo<="11111111";
		         when others=>ho<="00000000";vo<="11111111";
		        end case;
	 when "00011110"=>                       --'2'
               case counter1 is
                 when 1=>ho<="10000000";vo<="11111111";
                 when 2=>ho<="01000000";vo<="11100111";
                 when 3=>ho<="00100000";vo<="11011011";
                 when 4=>ho<="00010000";vo<="11110111";
                 when 5=>ho<="00001000";vo<="11101111";
                 when 6=>ho<="00000100";vo<="11011111";
		         when 7=>ho<="00000010";vo<="11000011";
		         when 8=>ho<="00000001";vo<="11111111";
		         when others=>ho<="00000000";vo<="11111111";
		        end case;
		when "00100110"=>                       --'3'
               case counter1 is
                 when 1=>ho<="10000000";vo<="11111111";
                 when 2=>ho<="01000000";vo<="11000011";
                 when 3=>ho<="00100000";vo<="11111011";
                 when 4=>ho<="00010000";vo<="11111011";
                 when 5=>ho<="00001000";vo<="11000011";
                 when 6=>ho<="00000100";vo<="11111011";
		         when 7=>ho<="00000010";vo<="11111011";
		         when 8=>ho<="00000001";vo<="11000011";
		         when others=>ho<="00000000";vo<="11111111";
		        end case;
	 when "00100101"=>                       --'4'
               case counter1 is
                 when 1=>ho<="10000000";vo<="11111111";
                 when 2=>ho<="01000000";vo<="11110111";
                 when 3=>ho<="00100000";vo<="11100111";
                 when 4=>ho<="00010000";vo<="11010111";
                 when 5=>ho<="00001000";vo<="10000011";
                 when 6=>ho<="00000100";vo<="11110111";
		         when 7=>ho<="00000010";vo<="11110111";
		         when 8=>ho<="00000001";vo<="11111111";
		         when others=>ho<="00000000"; vo<="11111111";
		        end case;
		when "00101110"=>                       --'5'
               case counter1 is
                 when 1=>ho<="10000000";vo<="11111111";
                 when 2=>ho<="01000000";vo<="11011111";
                 when 3=>ho<="00100000";vo<="11000011";
                 when 4=>ho<="00010000";vo<="11011111";
                 when 5=>ho<="00001000";vo<="11000011";
                 when 6=>ho<="00000100";vo<="11111011";
		         when 7=>ho<="00000010";vo<="11000011";
		         when 8=>ho<="00000001";vo<="11111111";
		         when others=>ho<="00000000";vo<="11111111";
		        end case;
		when "00110110"=>                       --'6'
               case counter1 is
                 when 1=>ho<="10000000";vo<="11111111";
                 when 2=>ho<="01000000";vo<="11100011";
                 when 3=>ho<="00100000";vo<="11011111";
                 when 4=>ho<="00010000";vo<="11000111";
                 when 5=>ho<="00001000";vo<="11011011";
                 when 6=>ho<="00000100";vo<="11011011";
		         when 7=>ho<="00000010";vo<="11100111";
		         when 8=>ho<="00000001";vo<="11111111";
		         when others=>ho<="00000000";vo<="11111111";
		        end case;
		when "00111101"=>                       --'7'
               case counter1 is
                 when 1=>ho<="10000000";vo<="11111111";
                 when 2=>ho<="01000000";vo<="11000011";
                 when 3=>ho<="00100000";vo<="11111011";
                 when 4=>ho<="00010000";vo<="11110111";
                 when 5=>ho<="00001000";vo<="11110111";

⌨️ 快捷键说明

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