數字密碼鎖實現:1、了不需要帶鑰匙,只要記住開鎖密碼即可開鎖的功能。2、在輸入密碼正確後,還可以修改密碼。3、在輸入密碼的過程中,不顯示密碼,只顯示無規律的提示某位密碼是否輸入完畢,防止了密碼的泄漏,大大加強了密碼鎖的保密性。
本演示系統實現了:1、輸入密碼正確後,正確小燈(led)亮,錯誤小燈(led1)不亮;2、正確修改密碼後,正確小燈(led)不亮,錯誤小燈(led1)不亮;3、輸入錯誤密碼,正確小燈(led)不亮,錯誤小燈(led1)亮,並有1KHz鬧鈴聲產生;4、按下reset後,密碼歸為初始密碼。
開鎖代碼為8位二進制數,當輸入代碼的位數和位值與鎖內給定的密碼壹致,且按規定程序開鎖時,方可開鎖,並點亮開鎖指示燈D3。否則系統進入“錯誤”狀態,並發出報警信號。
開鎖程序由設計者確定,並鎖內給定的密碼是可調的,且預置方便,保密性好。
串行數字鎖的報警方式是點亮指示燈D6,並使喇叭鳴叫來報警,報警動作直到按下復位開關,報警才停止。此時,數字鎖自動進入等待下壹次開鎖的狀態。
源代碼
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity code is
port( clk: in std_logic;--電路工作時的時鐘信號
clk1: in std_logic;--鬧鈴產生需要的時鐘信號
k: in std_logic;--高電平表示輸入1
led: out std_logic;--輸入正確時亮
led1: out std_logic;--輸入錯誤時亮
reset: in std_logic;-- 按下時復位
want: in std_logic;--是否修改密碼
alarm: out std_logic;--輸出鬧鈴聲
show: out std_logic_vector(3 downto 0));--提示作用
end;
architecture a of code is
signal temp: std_logic_vector(3 downto 0);--輸入壹位加1
signal code: std_logic_vector(7 downto 0);--儲存密碼
signal getcode: std_logic_vector(7 downto 0);--儲存修改後的密碼
signal counter: std_logic_vector(3 downto 0);--計數
signal allow: std_logic;--是否允許修改密碼
signal ring:std_logic;--是否接通鬧鈴
begin
process(clk)
begin
if ring='1' then
alarm<=clk1;--鬧鈴接通
else
alarm<='0';--鬧鈴截至
end if;
if reset='1' then--按下reset後,密碼歸為初始密碼
getcode<="00000000";--初始密碼
counter<="0000";--內部計數
code<="11001000";--密碼
led<='0';
led1<='0';
allow<='0';
elsif clk'event and clk='1' then--輸入clk脈沖,則接收1位密碼
getcode<=getcode(6 downto 0)&k;--將這1位密碼並入getcode中的最後壹位
if counter="1000" then--輸入為8位數碼時比較
if code=getcode then
led<='1';--正確燈亮
led1<='0';
ring<='0';
allow<='1';--允許修改密碼
elsif allow='1' and want='1' then--如果允許輸入且想輸入
code<=getcode;--輸入新密碼
led<='0';
led1<='0';
else
allow<='0';
led<='0';
led1<='1';--錯誤燈亮
ring<='1';--鬧鈴響
end if;
counter<="0000";--重新計數
else
counter<=counter+1; --累加
temp<=temp+1;--為防止泄露密碼,特別設置
end if;
end if;
show <= temp;
end process;
end;