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

📄 keyboardscan.txt

📁 PS2接口键盘扫描码截取电路
💻 TXT
字号:
library IEEE;

use IEEE.STD_LOGIC_1164.all;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity data_scanC is

 PORT(

       sys_clk : in STD_LOGIC; --系统同步时钟

       k_data : in STD_LOGIC; --键盘数据

       k_clock : in STD_LOGIC; --键盘时钟

       reset     : in STD_LOGIC;

       data    : buffer STD_LOGIC_VECTOR(7 DOWNTO 0); --扫描码输出

       PA      : buffer STD_LOGIC_VECTOR(7 DOWNTO 0);

       ZHJS    : buffer STD_LOGIC  ; --扫描码转换结束信号
       
       ascii   : out STD_LOGIC_VECTOR(7 DOWNTO 0)
       );

end data_scanC;

 architecture behav of data_scanC is

 signal tmp : STD_LOGIC_VECTOR(11 downto 0) :="000000000000";--用来记录一帧信号

 signal enable : std_logic :='0'; --输出使能

 signal now_kbclk,pre_kbclk : std_logic;

 

begin

 process(reset,k_clock,sys_clk) --系统时钟(sys_clk)比键盘时钟(k_clock)快很多

 variable started:STD_LOGIC :='0';

 variable counter :integer range 0 to 11 :=0;

begin

 if reset='0' then ZHJS<='0';counter:=0;

 elsif rising_edge(sys_clk) then --系统时钟(sys_clk)比键盘时钟(k_clock)快很多

       pre_kbclk <= now_kbclk;

       now_kbclk <= k_clock; 

 

       if(pre_kbclk > now_kbclk) then --由时序图可知,如果有数据发送则键盘时钟(k_clock)作周期性变化;如果k_clock 一直是高电平,则表示键盘正准备要发送数据。

           tmp(counter)<=k_data;    --键盘数据存tmp,例如,起始位存tmp[0],8位数据存tmp[1]—tmp[8]

            if counter=10 
			then ZHJS<='0'; --ZHJS=’0’表示接收结束
            else ZHJS<='1';
            end if;

            if counter=11 then 
			  counter:=1;
            else counter:=counter+1; --通过加法器把键盘的串行数据变成并行数据,即存tmp[counter]里面,这样做可以减少占用芯片资源.
            end if;

       end if;

 

 end if;

     if(counter>1 and counter<10) then started:='1'; --started=’1’表示没有接收完. 

             else started:='0';

     end if;

enable<=started;

end process;

 PA<="00000000" when enable='1' else tmp(8 downto 1); --如果接收完,则将tmp[8..1]存PA

 data<=PA;

 process(PA)
   begin
    case PA is
       when"01000101"=> ascii<="00110000";          --'0'
       when"00010110"=> ascii<="00110001";          --'1'
       when"00011110"=> ascii<="00110010";          --'2'
       when"00100110"=> ascii<="00110011";          --'3'
       when"00100101"=> ascii<="00110100";          --'4'
       when"00101110"=> ascii<="00110101";          --'5'
       when"00110110"=> ascii<="00110110";          --'6'
       when"00111101"=> ascii<="00110111";          --'7'
       when"00111110"=> ascii<="00111000";          --'8'
       when"01000110"=> ascii<="00111001";          --'9'

       when"00011100"=> ascii<="01100001";          --'a'
       when"00110010"=> ascii<="01100010";          --'b'
       when"00100001"=> ascii<="01100011";          --'c'
       when"00100011"=> ascii<="01100100";          --'d'
       when"00100100"=> ascii<="01100101";          --'e'
       when"00101011"=> ascii<="01100110";          --'f'
       when"00110100"=> ascii<="01100111";          --'g'
       when"00110011"=> ascii<="01101000";          --'h'
       when"01000011"=> ascii<="01101001";          --'i'
       when"00111011"=> ascii<="01101010";          --'j'
       when"01000010"=> ascii<="01101011";          --'k'
       when"01001011"=> ascii<="01101100";          --'l'
       when"00111010"=> ascii<="01101101";          --'m'
       when"00110001"=> ascii<="01101110";          --'n'
       when"01000100"=> ascii<="01111111";          --'o'
       when"01001101"=> ascii<="01110000";          --'p'
       when"00010101"=> ascii<="01110001";          --'q'
       when"00101101"=> ascii<="01110010";          --'r'
       when"00011011"=> ascii<="01110011";          --'s'
       when"00101100"=> ascii<="01110100";          --'t'
       when"00111100"=> ascii<="01110101";          --'u'
       when"00101010"=> ascii<="01110110";          --'v'
       when"00011101"=> ascii<="01110111";          --'w'
       when"00100010"=> ascii<="01111000";          --'x'
       when"00110101"=> ascii<="01111001";          --'y'
       when"00011010"=> ascii<="01111010";          --'z'   
       when others=>    ascii<="11111111";         
      end case;
   end process;
end behav;

⌨️ 快捷键说明

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