BJ-EPM CPLD開發板:VHDL入門例程2(2)

2012年05月16日 10:52 來源:本站整理 作者:秩名 我要評論(0)

--第二拍按鍵鎖存

  process(Clk,Rst_n)

  begin

  if (Rst_n = '0') then --異步復位

  key_inr1 <= "111";

  elsif (Clk'event AND Clk = '1') then --時鐘上升沿

  key_inr1 <= key_inr0; --鎖存上一拍鍵值

  end if;

  end process;

  --按鍵邊沿檢測

  key_posedge <= (NOT key_inr1) AND key_inr0; --按鍵上升沿標志位,高電平有效一個時鐘周期

  key_negedge <= key_inr1 AND (NOT key_inr0); --按鍵下降沿標志位,高電平有效一個時鐘周期

  --20ms計數

  process(Clk,Rst_n)

  begin

  if (Rst_n = '0') then --異步復位

  cnt20ms <= x"00000";

  elsif (Clk'event AND Clk = '1') then --時鐘上升沿

  if ((key_posedge /= "000") OR (key_negedge /= "000")) then --鍵值邊沿標志位復位計數器,此處理目的為消除抖動

  cnt20ms <= x"00000";

  elsif (cnt20ms < 10#1000000#) then --20ms計數

  cnt20ms <= cnt20ms+1;

  else

  cnt20ms <= x"00000";

  end if;

  end if;

  end process;

  --消抖后鍵值鎖存

  process(Clk,Rst_n)

  begin

  if (Rst_n = '0') then --異步復位

  key_value <= "111";

  elsif (Clk'event AND Clk = '1') then --時鐘上升沿

  if (cnt20ms = 10#1000000#) then --計數值到20ms

  key_value <= key_inr1; --鎖存鍵值

  end if;

  end if;

  end process;

  

上一頁123下一頁

本文導航