名稱:4位密碼鎖采用矩陣鍵盤輸入密碼(代碼在文末付費下載)
軟件:Quartus
語言:VHDL
代碼功能:
1、 設(shè)計一個四位的電子密碼鎖,每按下一個數(shù)字鍵,就輸入一個數(shù)字,并在顯示器上顯示該數(shù)值,同時將先前輸入的數(shù)據(jù)左移。
2、此外,包含密碼清除(密碼右移),密碼更改(可以通過按鍵修改新密碼),密碼上鎖和密碼解除(按下解除首先檢查密碼是否正確,密碼正確就開鎖)功能。
3、密碼連續(xù)錯誤3次報警。
演示視頻:
部分代碼展示
--設(shè)計一個四位的電子密碼鎖, --每按下一個數(shù)字鍵,就輸入一個數(shù)字, --并在顯示器上顯示該數(shù)值,同時將先前輸入的數(shù)據(jù)左移。 --此外,包含密碼清除(密碼右移), --密碼更改(可以通過按鍵修改新密碼), --密碼上鎖和密碼解除(按下解除首先檢查密碼是否正確,密碼正確就開鎖)功能。 --密碼連續(xù)錯誤3次報警 LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; --頂層模塊 ENTITY?mimasuo?IS ???PORT?( ??????clk???????:?IN?STD_LOGIC; ??????L_row???????:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);--矩陣鍵盤行? ??????H_col???????:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0);--矩陣鍵盤列? ?????? ??????confirm???:?IN?STD_LOGIC;--確認鍵 ??????reset?????:?IN?STD_LOGIC;--重置鍵 ??????modify????:?IN?STD_LOGIC;--修改鍵 ??????lock_up???:?IN?STD_LOGIC;--鎖住鍵 ?? ???delect????:?IN?STD_LOGIC;--刪除鍵 ?????? ??????alarm?????:?OUT?STD_LOGIC;--報警 ??????led_open??:?OUT?STD_LOGIC;--開鎖指示信號,高電平表示開鎖,低電平表示鎖住 ?????? ??????HEX0??????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);--數(shù)碼管顯示 ??????HEX1??????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);--數(shù)碼管顯示 ??????HEX2??????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);--數(shù)碼管顯示 ??????HEX3??????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)--數(shù)碼管顯示 ???); END?mimasuo; ARCHITECTURE?trans?OF?mimasuo?IS --例化報警模塊 --4x4矩陣鍵盤模塊 COMPONENT?key_4x4?IS ???PORT?( ??????clk?????????:?IN?STD_LOGIC; ??????reset???????:?IN?STD_LOGIC; ??????L_row???????:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);--行? ??????H_col???????:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0);--列? ??????key_number??:?OUT?STD_LOGIC_VECTOR(15?DOWNTO?0)--按鍵鍵值 ???); END?COMPONENT; --報警模塊 ???COMPONENT?alarm_on?IS ??????PORT?( ?????????clk???????:?IN?STD_LOGIC; ?????????current_state?:?IN?STD_LOGIC_VECTOR(2?DOWNTO?0); ?????????alarm?????:?OUT?STD_LOGIC ??????); ???END?COMPONENT; ???--修改密碼模塊(寄存器模塊,存儲正確密碼) ???COMPONENT?reset_password?IS ??????PORT?( ?????????clk???????:?IN?STD_LOGIC; ?????????password??:?IN?STD_LOGIC_VECTOR(15?DOWNTO?0); ?????????correct_password?:?OUT?STD_LOGIC_VECTOR(15?DOWNTO?0); ?????????confirm???:?IN?STD_LOGIC; ?????????current_state?:?IN?STD_LOGIC_VECTOR(2?DOWNTO?0) ??????); ???END?COMPONENT; ???--例化顯示模塊 ???COMPONENT?display?IS ??????PORT?( ?????????clk???????:?IN?STD_LOGIC; ?????????password??:?IN?STD_LOGIC_VECTOR(15?DOWNTO?0);--當前輸入密碼 ?????????HEX0??????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????HEX1??????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????HEX2??????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????HEX3??????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0) ??????); ???END?COMPONENT; ???--例化密碼輸入模塊 ???COMPONENT?mima_input?IS ??????PORT?( ?????????clk???????:?IN?STD_LOGIC; ?????????key_0?????:?IN?STD_LOGIC; ?????????key_1?????:?IN?STD_LOGIC; ?????????key_2?????:?IN?STD_LOGIC; ?????????key_3?????:?IN?STD_LOGIC; ?????????key_4?????:?IN?STD_LOGIC; ?????????key_5?????:?IN?STD_LOGIC; ?????????key_6?????:?IN?STD_LOGIC; ?????????key_7?????:?IN?STD_LOGIC; ?????????key_8?????:?IN?STD_LOGIC; ?????????key_9?????:?IN?STD_LOGIC; ???delect????:?IN?STD_LOGIC;--刪除鍵 ?????????current_state?:?IN?STD_LOGIC_VECTOR(2?DOWNTO?0); ?????????password??:?OUT?STD_LOGIC_VECTOR(15?DOWNTO?0) ??????); ???END?COMPONENT; ???--例化密碼鎖控制模塊 ???COMPONENT?mimasuo_ctrl?IS ??????PORT?( ?????????clk???????:?IN?STD_LOGIC; ?????????password??:?IN?STD_LOGIC_VECTOR(15?DOWNTO?0); ?????????correct_password?:?IN?STD_LOGIC_VECTOR(15?DOWNTO?0); ?????????confirm???:?IN?STD_LOGIC; ?????????reset?????:?IN?STD_LOGIC; ?????????modify????:?IN?STD_LOGIC; ?????????lock_up???:?IN?STD_LOGIC; ?????????led_open??:?OUT?STD_LOGIC; ?????????current_state?:?OUT?STD_LOGIC_VECTOR(2?DOWNTO?0) ??????); ???END?COMPONENT; ??? ???--定義信號 ???SIGNAL?current_state????:?STD_LOGIC_VECTOR(2?DOWNTO?0); ???SIGNAL?password?????????:?STD_LOGIC_VECTOR(15?DOWNTO?0); ???SIGNAL?correct_password?:?STD_LOGIC_VECTOR(15?DOWNTO?0);
設(shè)計文檔:
1. 工程文件
2. 程序文件
3. 程序編譯
4. RTL圖
5. Testbench
6. 仿真圖
整體仿真圖
上圖仿真過程為先輸入1234開鎖(默認密碼1234),開鎖后按下修改鍵進入修改模式,再輸入2537,確認,將密碼修改為2537,再關(guān)鎖。然后再輸入1234,無法開鎖,在輸入2537,開鎖。
矩陣鍵盤模塊仿真
顯示模塊
上圖仿真的是數(shù)碼管顯示模塊,4個數(shù)碼管顯示輸入的4位密碼,每輸入1位,密碼左移一次。
密碼輸入模塊
上圖為密碼輸入模塊,按鍵0~9輸入密碼,每輸入1位,密碼左移一次。
密碼鎖控制模塊
密碼鎖控制模塊為狀態(tài)機控制,state信號為當前狀態(tài)指示,密碼正確時led_open輸出高電平。Error_cnt信號為輸入密碼錯誤計數(shù)。
密碼修改模塊
在密碼修改狀態(tài)下,輸入新的密碼并按下確認鍵,修改密碼。上圖為將密碼1234修改為2537
報警模塊
State為密碼鎖當前狀態(tài),當密碼輸入連續(xù)錯誤3次,報警,上圖仿真輸入錯誤只有1次,無報警。
點擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=191