您的位置:电子发烧友网 > 电子技术应用 > 实验中心 > 编程实验 >
BJ-EPM CPLD开发板:VHDL入门例程2
2012年05月16日 10:52 来源:本站整理 作者:秩名 我要评论(0)
-- Filename ﹕ SW_DEBOUNCE.vhd
-- Author ﹕ wuhouhang
-- Description ﹕ 三个独立按键控制LED灯亮灭
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity SW_DEBOUNCE is
port(
Clk: in STD_LOGIC; --50MHz输入时钟
Rst_n: in STD_LOGIC; --低电平复位信号
Key_in: in STD_LOGIC_VECTOR (2 downto 0); --三个独立按键,低表示按下
Led_out: buffer STD_LOGIC_VECTOR (2 downto 0) --发光二极管,分别由按键控制
);
end entity SW_DEBOUNCE;
--20ms按键消抖处理
--消抖后按键下降沿检测
--LED的键值控制
architecture KEY_CONTROL_OF_LED of SW_DEBOUNCE is
signal key_inr0: STD_LOGIC_VECTOR (2 downto 0); --第一拍按键锁存寄存器
signal key_inr1: STD_LOGIC_VECTOR (2 downto 0); --第二拍按键锁存寄存器
signal key_posedge: STD_LOGIC_VECTOR (2 downto 0); --按键上升沿标志位,高电平有效一个时钟周期
signal key_negedge: STD_LOGIC_VECTOR (2 downto 0); --按键下降沿标志位,高电平有效一个时钟周期
signal cnt20ms: STD_LOGIC_VECTOR (19 downto 0); --20ms计数寄存器
signal key_value: STD_LOGIC_VECTOR (2 downto 0); --消抖后的键值锁存寄存器
signal key_valuer0: STD_LOGIC_VECTOR (2 downto 0); --消抖后第一拍按键锁存寄存器
signal key_valuer1: STD_LOGIC_VECTOR (2 downto 0); --消抖后第二拍按键锁存寄存器
signal key_valueneg: STD_LOGIC_VECTOR (2 downto 0); --消抖后按键下降沿标志位,高电平有效一个时钟周期
begin
--第一拍按键锁存
process(Clk,Rst_n)
begin
if (Rst_n = '0') then --异步复位
key_inr0 <= "111";
elsif (Clk'event AND Clk = '1') then --时钟上升沿
key_inr0 <= Key_in; --锁存上一拍键值
end if;
end process;
本文导航
- 第 1 页:BJ-EPM CPLD开发板:VHDL入门例程2(1)
- 第 2 页:第二拍按键锁存
- 第 3 页:消抖后第一拍按键锁存
标签: