• 方案介紹
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

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

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

2-24010910033T42.doc

共1個(gè)文件

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

軟件:Quartus

語言:VHDL

代碼功能:

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

設(shè)計(jì)實(shí)現(xiàn)一個(gè)簡(jiǎn)易單元門禁系統(tǒng),模擬呼叫住戶和開關(guān)單元門的基本功能。

基本要求:

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

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

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

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

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

6、 單元門的開門和關(guān)門動(dòng)畫自擬,盡可能形象;

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

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

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

設(shè)計(jì)文檔:

一、整體框圖

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

二、模塊功能

key_module:即獨(dú)立按鍵處理模塊,用于對(duì)8個(gè)獨(dú)立按鍵進(jìn)行消抖,輸入為按鍵,輸出為消抖后的按鍵上升沿。

key44:矩陣按鍵處理模塊,該模塊用于控制板子上的4*4矩陣鍵盤,輸入為矩陣鍵盤的行控制信號(hào),輸出列信號(hào)和對(duì)應(yīng)按鍵的鍵值。

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

seg_display:數(shù)碼管顯示模塊,根據(jù)控制模塊輸出的數(shù)碼管顯示內(nèi)容控制對(duì)應(yīng)的數(shù)碼管點(diǎn)亮和顯示相關(guān)數(shù)字和字母。

三、波形仿真

1. 獨(dú)立按鍵處理模塊仿真

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

2. 矩陣按鍵處理模塊

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

3. ? ? 控制模塊仿真

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

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

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

部分代碼展示:

library?IEEE;
use?IEEE.STD_LOGIC_1164.ALL;
use?ieee.std_logic_arith.all;?
use?ieee.std_logic_unsigned.all;
--時(shí)鐘分頻模塊
entity?clock_fenpin?is
generic(cycle:integer:=50000000);--50000000
port
(
clk??:in??std_logic;--系統(tǒng)時(shí)鐘
rst??:in??std_logic;--系統(tǒng)復(fù)位,低有效
enable?:in??std_logic;--計(jì)數(shù)使能
clk_out??:out?std_logic?--分頻信號(hào)輸出
);
end?clock_fenpin;
architecture?Behavioral?of?clock_fenpin?is
signal?cnt:integer?range?0?to?99999999;
begin
--時(shí)鐘分頻計(jì)數(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;
--分頻后的時(shí)鐘輸出
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;

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

  • 2-24010910033T42.doc
    下載

相關(guān)推薦