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

📄 key_board.vhd

📁 自己写的键盘的扫描4乘4的键盘VHDL 很好用的
💻 VHD
字号:
--------------------------------------------------------------------------------------
--引脚的配置:D3~DO接pin24~pin21   D4~D7接pin47~pin50  led接pin72 pin70 pin69 pin67---
--------------------------------------------------------------------------------------
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY KEY_BOARD IS
 PORT(
  CLK  :IN     STD_LOGIC;
  COLUMN    :IN     STD_LOGIC_VECTOR(3 DOWNTO 0);---row
  LINE      :BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);--col
  KEY_VALUE :OUT    STD_LOGIC_VECTOR(3 DOWNTO 0);
  FLAG_OUT  :OUT    STD_LOGIC
  );
END ENTITY;
ARCHITECTURE A OF KEY_BOARD IS
 BEGIN
-----------------输出扫描行线的值------------------
 PROCESS
  VARIABLE X_VALUE :STD_LOGIC_VECTOR(3 DOWNTO 0):="1110";
 BEGIN
  WAIT UNTIL RISING_EDGE(CLK);
  IF X_VALUE="1111"THEN
   X_VALUE:="1110";
  ELSE---若有键按下就在这执行
   X_VALUE:=X_VALUE(2 DOWNTO 0)&'1';---后三位和1进行合并,轮流输出扫描线,前次的值依次后移3为在于1相与
  END IF;
  LINE<=X_VALUE;
 END PROCESS;
--------------------检测按键操作--------------------
 PROCESS
  VARIABLE HIT_FLAG  :STD_LOGIC; --按键标志
  VARIABLE KEYVAL    :STD_LOGIC_VECTOR(3 DOWNTO 0);
  VARIABLE XY_VALUE  :STD_LOGIC_VECTOR(7 DOWNTO 0);
 BEGIN
 WAIT UNTIL RISING_EDGE(CLK);
 IF COLUMN="1111"THEN            --松开按键,传递键值;column为1时,两种可能,按下又松开,一个是未按下,所以需要一个                                  --按键标志
  IF HIT_FLAG ='1' THEN
   HIT_FLAG:='0';
   FLAG_OUT<='1';                --输出键值标志
   KEY_VALUE<=KEYVAL;            --输出键值
  ELSE
   FLAG_OUT<='0';
  END IF;
 ELSE
  FLAG_OUT<='0';
  HIT_FLAG:='1';                 --有键按下
  XY_VALUE:=COLUMN & LINE;
  CASE XY_VALUE IS
   WHEN "11101110"=>KEYVAL:="0000";  --0
   WHEN "11101101"=>KEYVAL:="0001";  --1
   WHEN "11101011"=>KEYVAL:="0010";  --2
   WHEN "11100111"=>KEYVAL:="0011";  --3
   WHEN "11011110"=>KEYVAL:="0100";  --4
   WHEN "11011101"=>KEYVAL:="0101";  --5
   WHEN "11011011"=>KEYVAL:="0110";  --6
   WHEN "11010111"=>KEYVAL:="0111";  --7
   WHEN "10111110"=>KEYVAL:="1000";  --8
   WHEN "10111101"=>KEYVAL:="1001";  --9
   WHEN "10111011"=>KEYVAL:="1010";  --10 
   WHEN "10110111"=>KEYVAL:="1011";  --11
   WHEN "01111110"=>KEYVAL:="1100";  --12
   WHEN "01111101"=>KEYVAL:="1101";  --13
   WHEN "01111011"=>KEYVAL:="1110";  --14
   WHEN "01110111"=>KEYVAL:="1111";  --15
   WHEN OTHERS=>NULL;
  END CASE;
 END IF;
 END PROCESS;
END a;

⌨️ 快捷键说明

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