📄 keyboard_scan.vhd
字号:
--/*****************************************************************************
-- * 源文件: keyboard_scan.vhd
-- * 模块: 键盘扫描信号发生器
-- * 版权:
-- * Copyright(C) 北京联华众科科技有限公司
-- * www.lianhua-zhongke.com.cn
-- * 版本: Version 1.0
-- *
-- * 功能说明:
-- * 与输入时钟 clock 同频率产生键盘扫描信号,键盘扫描信号为低电平有效
-- *
-- * 参数说明:
-- * 输出
-- * row_select - 键盘行扫描信号,只有一位为低其余位为高电平,属于低
-- * 电平有效
-- *
-- * 输入
-- * clock - 键盘扫描驱动时钟
-- * reset - 复位信号,低电平有效
-- *
-- * 参数
-- * keyboard_size - 键盘扫描数据位数
-- *
-- * 变更记录:
-- * 2006.01.28, 新建
-- *
-- *****************************************************************************/
LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.all;USE ieee.std_logic_unsigned.all;ENTITY keyboard_scan IS GENERIC ( keyboard_size : INTEGER RANGE 0 TO 15:= 4 ); PORT ( row_select : OUT STD_LOGIC_VECTOR(keyboard_size-1 downto 0); clock : IN STD_LOGIC; reset : IN STD_LOGIC ); END keyboard_scan;ARCHITECTURE keyboard_scan_architecture OF keyboard_scan IS BEGIN PROCESS(clock, reset) VARIABLE row_counter : INTEGER RANGE 0 TO keyboard_size-1; BEGIN IF (reset = '0') THEN row_select <= NOT CONV_STD_LOGIC_VECTOR(0, keyboard_size); row_counter := 0; ELSIF(clock = '1' AND clock'EVENT) THEN row_select <= NOT CONV_STD_LOGIC_VECTOR(0, keyboard_size); row_select(row_counter) <= '0'; IF (row_counter = keyboard_size-1) THEN row_counter := 0; ELSE row_counter := row_counter+1; END IF; END IF; END PROCESS;END keyboard_scan_architecture;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -