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

📄 keyscan.vhd

📁 这是一个通过外部按键来控制发光二极管发光的程序
💻 VHD
字号:
--键盘扫描
 LIBRARY IEEE;
 USE IEEE.std_logic_1164.ALL;
 USE IEEE.std_logic_unsigned.ALL;
 
ENTITY keyscan IS
  PORT( clk_scan  : IN STD_LOGIC; --扫描时钟,100Hz,10ms
        keydrv    : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));  
END keyscan;
 
ARCHITECTURE behavier OF keyscan IS  --定义状态机编码
  CONSTANT s0: STD_LOGIC_VECTOR(3 DOWNTO 0):= "0001";                                    
  CONSTANT s1: STD_LOGIC_VECTOR(3 DOWNTO 0):= "0010";
  CONSTANT s2: STD_LOGIC_VECTOR(3 DOWNTO 0):= "0100";
  CONSTANT s3: STD_LOGIC_VECTOR(3 DOWNTO 0):= "1000"; 
  SIGNAL present_state: STD_LOGIC_VECTOR(3 DOWNTO 0);
  SIGNAL next_state: STD_LOGIC_VECTOR(3 DOWNTO 0); 
                                        --状态机次态
BEGIN
      
 PROCESS(clk_scan)   --状态机更新进程,每10毫秒更新一次状态
 BEGIN
   IF(clk_scan'event and clk_scan='1') THEN
      present_state <= next_state;
   END IF;
 END PROCESS;

PROCESS(present_state) --状态译码进程
 BEGIN
   CASE present_state IS
     WHEN s0 => next_state<=s1;
     WHEN s1 => next_state<=s2;
     WHEN s2 => next_state<=s3;
     WHEN s3 => next_state<=s0;
     WHEN OTHERS => next_state<=s0; --多余状态处理
   END CASE;
  END PROCESS;
   keydrv <= present_state; --输出扫描信号
END behavier;

⌨️ 快捷键说明

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