📄 keyscan.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 + -