• 方案介紹
  • 附件下載
  • 相關推薦
申請入駐 產業(yè)圖譜

簡易單元門禁系統(tǒng)4x4矩陣鍵盤VHDL代碼Quartus仿真

9小時前
118
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

2-24010910033T42.doc

共1個文件

名稱:簡易單元門禁系統(tǒng)4x4矩陣鍵盤VHDL代碼Quartus仿真

軟件:Quartus

語言:VHDL

代碼功能:

簡易單元門禁系統(tǒng)4x4矩陣鍵盤

設計實現(xiàn)一個簡易單元門禁系統(tǒng),模擬呼叫住戶和開關單元門的基本功能。

基本要求:

1、 本單元門禁系統(tǒng)的住戶為 8 戶,門牌號分別為 101、102、103、104、105、106、107 和 108),按鍵 BTN0-BTN7 為各家戶內開單元門的按鍵(BTN0→101、BTN1→102、BTN2→103、BTN3→104、BTN4→105、BTN5→106、BTN6→107、BTN7→108),發(fā)光二極管 LD0-LD7 為 8 個住戶被呼叫的指示燈(LD0→101、LD1→102、LD2→103、LD3→104、LD4→105、LD5→106、LD6→107、LD7→108)。

2、 來訪客人用鍵盤(鍵盤設置見圖 1)輸入門牌號(以 103 為例),客人在鍵盤上輸入的門牌號 103 的過程中,門牌號 103 要依次顯示在數(shù)碼管 DIP2-DISP0 上,當門牌號103 輸入無誤并按下確認鍵后,對應的發(fā)光二極管 LD2 亮起,同時蜂鳴器響起門鈴音樂(樂曲自擬),103 戶內的人聽到門鈴音樂后按一下對應的開門按鍵 BTN2 打開單元門(點陣演示開門動畫),同時對應的發(fā)光二極管 LD2 熄滅,門鈴音樂停止,數(shù)碼管 DIP6 從 9 開始進行 10 秒倒計時,倒計時到 0 時,點陣演示關門動畫,同時數(shù)碼管 DIP2-DISP0 上顯示的門牌號 103 熄滅,完成一次訪客進單元門的過程;

3、 如果來訪客人在輸入門牌號時發(fā)生的錯誤,可以按刪除鍵將已輸入的數(shù)字刪掉(數(shù)碼管 DIP2-DISP0 上已經(jīng)顯示的數(shù)字熄滅),重新輸入門牌號;

4、 住戶進門時,同時按下小鍵盤最右列上面的三個鍵(刷卡鍵)一次打開單元門(模擬刷卡開門),點陣演示開門動畫,同時數(shù)碼管 DIP6 從 9 開始進行 10 秒倒計時,倒計時到 0 時,點陣演示關門動畫,完成一次住戶進單元門的過程;

5、 來訪客人或住戶出門離開所在單元時,按一下小鍵盤上右下角的出門按鍵(模擬單元門內的開門鍵)打開單元門,點陣演示開門動畫,同時數(shù)碼管 DIP6 從 9 開始進行 10 秒倒計時,倒計時到 0 時,點陣演示關門動畫,完成一次訪客出單元門的過程;

6、 單元門的開門和關門動畫自擬,盡可能形象;

7、 系統(tǒng)上電時,實驗板上所有的顯示器件應都沒有顯示;

8、 系統(tǒng)工作流程合理,工作穩(wěn)定。

FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com

設計文檔:

一、整體框圖

電路功能由key_module、key44、control_module、seg_display共4個模塊組成。

二、模塊功能

key_module:即獨立按鍵處理模塊,用于對8個獨立按鍵進行消抖,輸入為按鍵,輸出為消抖后的按鍵上升沿。

key44:矩陣按鍵處理模塊,該模塊用于控制板子上的4*4矩陣鍵盤,輸入為矩陣鍵盤的行控制信號,輸出列信號和對應按鍵的鍵值。

control_module:即控制模塊,該模塊為系統(tǒng)主控模塊,用于根據(jù)按鍵輸入的內容判斷是否開門及LED、點陣等相關的操作。

seg_display:數(shù)碼管顯示模塊,根據(jù)控制模塊輸出的數(shù)碼管顯示內容控制對應的數(shù)碼管點亮和顯示相關數(shù)字和字母。

三、波形仿真

1. 獨立按鍵處理模塊仿真

圖中,輸入信號為key,代表了8個按鍵,每個按鍵高電平表示按下,以key[0]為例,在圖中70ns附近變?yōu)楦唠娖剑?a class="article-link" target="_blank" href="/baike/1572723.html">輸出信號為key_flag,圖中可以看到,key_flag[0]信號在key[0]變?yōu)楦唠娖胶蟛痪?,就輸出了一個脈沖信號,該脈沖就是key[0]信號消抖后的上升沿。

2. 矩陣按鍵處理模塊

上圖中仿真了矩陣鍵盤依次按下7,F(xiàn),B,2的情況。矩陣鍵盤的最終輸出是根據(jù)行和列的值確定輸出按鍵值。即通過4位的row信號和4位的col信號進行拼接,再根據(jù)拼接后的信號輸出key_value。以上圖中200ns附近的波形為例說明:圖中row值為1011,col_out值為1110,拼接后就是10111110。該拼接后的值對應的按鍵鍵值就是7(key44模塊代碼171行)。

3. ? ? 控制模塊仿真

上圖中仿真以了一種典型的情況,即來訪客人用鍵盤輸入門牌號103?,客人在鍵盤上輸入 的門牌號?103?的過程中,門牌號?103 依次顯示在數(shù)碼管?DIP2-DISP0?上,當門牌號?103?輸入無誤并按下確認鍵后,對應的發(fā)光二極管?LD2?亮起,103?戶內的按一下對應的開門按鍵?BTN2?打開 單元門,同時對應的發(fā)光二極管?LD2?熄滅, 數(shù)碼管?DIP6?從?9?開始進行?10?秒倒計時。具體對應信號如下圖所示:

4. 數(shù)碼管顯示模塊

圖中,display_num為顯示內容。Seg為數(shù)碼管的段選,用于控制8段數(shù)碼管哪一段亮,低電平時亮,高電平滅。Sel為數(shù)碼管的位選信號,需要不斷的依次點亮。圖中Sel可以看到在依次循環(huán)點亮。同時圖中輸入的待顯示內容為AAAAA103,即模擬有用戶按下103,其中A表不顯示,對應數(shù)碼管的段選信號為11111111,即該數(shù)碼管不亮,因此實際數(shù)碼管顯示內容只有3個數(shù)碼管亮,其他滅,數(shù)碼管顯示內容為103。

部分代碼展示:

library?IEEE;
use?IEEE.STD_LOGIC_1164.ALL;
use?ieee.std_logic_arith.all;?
use?ieee.std_logic_unsigned.all;
--時鐘分頻模塊
entity?clock_fenpin?is
generic(cycle:integer:=50000000);--50000000
port
(
clk??:in??std_logic;--系統(tǒng)時鐘
rst??:in??std_logic;--系統(tǒng)復位,低有效
enable?:in??std_logic;--計數(shù)使能
clk_out??:out?std_logic?--分頻信號輸出
);
end?clock_fenpin;
architecture?Behavioral?of?clock_fenpin?is
signal?cnt:integer?range?0?to?99999999;
begin
--時鐘分頻計數(shù)
process(clk,rst)
begin
if(rst?=?'0')then
cnt?<=?0;?
elsif(rising_edge(clk))then
if(enable?=?'1')then
if(cnt?=?cycle-1)then
cnt?<=?0;
else?
cnt?<=?cnt+?1;??
end?if;
else?
cnt?<=?0;
end?if;
end?if;
end?process;
--分頻后的時鐘輸出
process(clk,rst)
begin
if(rst?=?'0')then
clk_out?<=?'0';?
elsif(rising_edge(clk))then
if(cnt?=?cycle-1?and?enable?=?'1')then
clk_out?<=?'1';?
else?
clk_out?<=?'0';?
end?if;
end?if;
end?process;
end?Behavioral;

點擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=515

  • 2-24010910033T42.doc
    下載

相關推薦