目录
问题描述:
在使用FPGA开发一些需要按键输入的项目时,对于按键信号的处理必不可少,我们在使用普通机械按键,当按键按下和松开将出现以下不稳定波形
按键消抖通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖。
代码:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY key IS
PORT(
key_in:in std_logic;--按键
clk:in std_logic;--时钟频率,此处pin连接clk
key_out:out std_logic--代表key_out按键,若为1,表示按键按下,若为0,表示按键未按下
);
end entity;
ARCHITECTURE one OF key IS
signal count:integer;--计数
begin
process(clk)
begin
if(clk'event and clk='1') then--上升沿
if(key_in='0') then--按键初始为1
count<=count+1;
if(count=2000) then--对应现实20ms
key_out<='1';--判断是否有一段持续20ms的'0'状态,若有即代表按下
else
key_out<='0';--若无代表没按下
end if;
else
count<=0;
end if;
end if;
end process;
end one;
下载完整工程项目请到:VHDL实现按键消抖完整项目-嵌入式文档类资源-CSDN文库