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;

  

123下一頁

本文導航