版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 摘 要本文簡(jiǎn)述了VHDL語(yǔ)言的功能及其特點(diǎn),介紹一種用EDA技術(shù)和VHDL語(yǔ)言,在Quartus 環(huán)境下,設(shè)計(jì)一種新型的智能密碼鎖,該密碼鎖具有密碼預(yù)置和誤碼報(bào)警等功能,用一片F(xiàn)PGA(Field Programmable Gate Array)現(xiàn)場(chǎng)可編程門(mén)陣列芯片實(shí)現(xiàn),從而大大簡(jiǎn)化了系統(tǒng)結(jié)構(gòu),降低成本,提高了系統(tǒng)的保密性和可靠性。它體積小,功耗低,價(jià)格便宜,安全可靠,維護(hù)和升級(jí)都十分方便,具有較好的應(yīng)用前景。關(guān)鍵詞:智能密碼鎖、硬件描述語(yǔ)言、電子設(shè)計(jì)自動(dòng)化、Quartus IIAbstract The paper introduces the function and characteri
2、stic of VHDL language. A new type intelligent digital password lock is designed using VHDL language. An FPGA (Field Programmable Gate Array) chips is adopted in this design, thus greatly simplifying the system structure, reduce cost and improve the system of confidentiality and reliability .This new
3、 digital intelligent has better application prospect based on its small volume, low power, security and easy maintenance and upgrade.Keywords: intelligent lock、VHDL、 EDA、Quartus II目 錄引言31 VHDL語(yǔ)言特點(diǎn)32 智能密碼鎖的設(shè)計(jì)要求43 智能密碼鎖的電路組成4密碼鎖輸入電路4密碼鎖控制電路43.3 密碼鎖輸出顯示電路44 密碼鎖輸入電路的設(shè)計(jì)54.1 時(shí)序電路54.2 鍵盤(pán)掃描電路84.3 鍵盤(pán)消抖電路94.4
4、 鍵盤(pán)譯碼電路104.5 按鍵存儲(chǔ)電路134.6 智能密碼鎖控制電路145 結(jié)論23謝 辭24參考文獻(xiàn)25引言隨著社會(huì)物質(zhì)財(cái)富的日益增長(zhǎng),安全防盜已成為全社會(huì)問(wèn)題。人們對(duì)鎖的要求越來(lái)越高,既要安全可靠的防盜,又要使用方便,因此具有防盜報(bào)警等功能的電子密碼鎖代替密碼量少,安全性差的機(jī)械密碼鎖已是必然趨勢(shì)。目前設(shè)計(jì)密碼鎖的方法很多,例如用傳統(tǒng)的PCB(Printed Circuit Board, 印刷電路板)設(shè)計(jì)或者用單片機(jī)設(shè)計(jì)。但是使用的電子密碼鎖大部分是采用單片機(jī)進(jìn)行設(shè)計(jì),其成本較高及可靠性得不到保證,電路比較復(fù)雜,性能不夠靈活。而用VHDL(VHSIC Hardware Descriptio
5、n Language)可以更加快速、靈活地設(shè)計(jì)出符合各種要求的密碼鎖,優(yōu)于其他設(shè)計(jì)方法,使設(shè)計(jì)過(guò)程達(dá)到高度自動(dòng)化。本文采用先進(jìn)的EDA(即 Electronic Design Automation)技術(shù),利用Quartus工作平臺(tái)和VHDL 語(yǔ)言,設(shè)計(jì)了一種新型的智能密碼鎖。該密碼鎖具有密碼預(yù)置和誤碼報(bào)警等功能,用一片F(xiàn)PGA芯片實(shí)現(xiàn),從而大大簡(jiǎn)化了系統(tǒng)結(jié)構(gòu),降低成本,提高了系統(tǒng)的保密性和可靠性1。采用這種器件開(kāi)發(fā)的數(shù)字系統(tǒng),其升級(jí)與改進(jìn)極其方便。1 VHDL語(yǔ)言特點(diǎn)電子設(shè)計(jì)自動(dòng)化EDA的關(guān)鍵技術(shù)之一就是可以用硬件描述語(yǔ)言HDL(Hardware Description Language)來(lái)描
6、述硬件電路。VHDL是用來(lái)描述從抽象到具體級(jí)別的工業(yè)標(biāo)準(zhǔn)語(yǔ)言,它是由美國(guó)國(guó)防部在20世紀(jì)80年代開(kāi)發(fā)的HDL,現(xiàn)在已成為IEEE承認(rèn)的標(biāo)準(zhǔn)硬件描述語(yǔ)言。VHDL支持硬件的設(shè)計(jì)、驗(yàn)證、綜合和測(cè)試,以及硬件設(shè)計(jì)數(shù)據(jù)的交換、維護(hù)、修改和硬件的實(shí)現(xiàn),具有描述能力強(qiáng)、生命周期長(zhǎng)、支持大規(guī)模設(shè)計(jì)的分解和已有設(shè)計(jì)的再利用等優(yōu)點(diǎn)2。VHDL 主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu)、行為和功能,其程序結(jié)構(gòu)特點(diǎn)是將一個(gè)電路模塊或一個(gè)系統(tǒng)分成端口和內(nèi)部功能算法實(shí)現(xiàn)兩部分。對(duì)于一個(gè)電路模塊或者數(shù)字系統(tǒng)而言,定義了外部端口調(diào)用該電路模塊或數(shù)字系統(tǒng),而不必知道其內(nèi)部結(jié)構(gòu)和算法。VHDL 的特點(diǎn)使得電子系統(tǒng)新的設(shè)計(jì)方法-“自頂向下”設(shè)
7、計(jì)方法更加容易實(shí)現(xiàn)??梢韵葘?duì)整個(gè)系統(tǒng)進(jìn)行方案設(shè)計(jì),按功能劃分成若干單元模塊,然后對(duì)每個(gè)單元模塊進(jìn)一步細(xì)分,直到簡(jiǎn)單實(shí)現(xiàn)的單元電路。其優(yōu)點(diǎn):用軟件的方式設(shè)計(jì)硬件;用軟件方法設(shè)計(jì)的系統(tǒng)到硬件系統(tǒng)的轉(zhuǎn)換是由有關(guān)的開(kāi)發(fā)軟件自動(dòng)完成;設(shè)計(jì)過(guò)程中可用有關(guān)軟件進(jìn)行各種仿真等3。2 智能密碼鎖的設(shè)計(jì)要求該密碼鎖的密碼由六位十進(jìn)制數(shù)字組成,初始設(shè)定“000000”??捎捎脩?hù)任意設(shè)置密碼。密碼輸入正確時(shí)開(kāi)鎖,連續(xù)三次輸入錯(cuò)誤密碼時(shí)系統(tǒng)報(bào)警。3 智能密碼鎖的電路組成為達(dá)到以上功能,可將電子密碼鎖分為以下幾個(gè)模塊:鍵盤(pán)接口電路、鍵盤(pán)矩陣、鍵盤(pán)掃描、鍵盤(pán)消抖、鍵盤(pán)譯碼及按鍵存儲(chǔ)電路。數(shù)字按鍵輸入、存儲(chǔ)及清除。功能按鍵設(shè)
8、計(jì)。密碼清除、修改與存儲(chǔ)。數(shù)字密碼鎖的激活與解除。3.3 密碼鎖輸出顯示電路BCD譯碼、動(dòng)態(tài)掃描電路。4 密碼鎖輸入電路的設(shè)計(jì)4.1 時(shí)序電路圖1是電子密碼鎖的輸入電路框圖,由鍵盤(pán)掃描電路、鍵盤(pán)消抖電路、鍵盤(pán)譯碼電路、按鍵數(shù)據(jù)緩存器,加上外接的一個(gè)3×4矩陣式鍵盤(pán)組成。 矩陣式鍵盤(pán)是一種常見(jiàn)的輸入裝置,在日常的生活中,矩陣式鍵盤(pán)在計(jì)算機(jī)、 、 、微波爐等各式電子產(chǎn)品上已經(jīng)被廣泛應(yīng)用。其中數(shù)字09作為密碼鎖數(shù)字輸入按鍵,*作為“上鎖”功能按鍵,#作為“解除清除”功能按鍵。鍵盤(pán)上的每一個(gè)按鍵其實(shí)就是一個(gè)開(kāi)關(guān)電路,當(dāng)某鍵被按下時(shí)。該按鍵的接點(diǎn)會(huì)呈現(xiàn)0的狀態(tài),反之,未被按下時(shí)則呈現(xiàn)邏輯1的狀
9、態(tài)。 在一個(gè)系統(tǒng)的設(shè)計(jì)中,往往需要多種時(shí)鐘信號(hào),最為方便的方法是利用一個(gè)自由計(jì)數(shù)器來(lái)產(chǎn)生各種需要的頻率。時(shí)序電路中使用了三種不同頻率的工作脈沖波形:系統(tǒng)時(shí)鐘脈沖、消除抖動(dòng)取樣信號(hào)、鍵盤(pán)掃描信號(hào)。本電路需要:系統(tǒng)主時(shí)鐘、消抖取樣時(shí)鐘和動(dòng)態(tài)掃描時(shí)鐘。當(dāng)一個(gè)系統(tǒng)中需使用多種操作頻率的脈沖波形時(shí),其方法就是利用一個(gè)自由計(jì)數(shù)器來(lái)產(chǎn)生各種需要的頻率。也就是先建立一個(gè)N位計(jì)數(shù)器,N的大小根據(jù)電路的需求決定,N的值越大,電路可以分頻的次數(shù)就越多,這樣就可以獲得更大的頻率變化,以便提供多種不同頻率的時(shí)鐘信號(hào)。若輸入時(shí)鐘為CLK,N位計(jì)數(shù)器的輸出為QN1.0,則Q(0)為CLK的2分頻脈沖信號(hào),Q(1)為CLK的
10、4分頻脈沖信號(hào)Q(5 DOWNTO 4)取得的是一個(gè)脈沖波形序列,其值依000110110001周期性變化,其變化頻率為32分頻4。圖1 3×4鍵盤(pán)矩陣圖 時(shí)序產(chǎn)生電路的VHDL程序:library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity fee_counter isport(clk : in std_logic; clk_a : out std_logic; clk_b : out std_logic_vector(1
11、downto 0);end fee_counter;architecture a of fee_counter issignal q : std_logic_vector(6 downto 0);beginprocess (clk)beginif clk'event and clk = '1' thenq <= q + 1;end if;end process;clk_a <= q(1);clk_b <= q(4 downto 3);end architecture;分析: 首選信號(hào)q建立一個(gè)7位自由計(jì)數(shù)器,對(duì)輸入主時(shí)鐘進(jìn)行降頻處理; 使用clk_a
12、<= q(1)語(yǔ)句,取得一個(gè)脈沖波形,對(duì)主時(shí)鐘進(jìn)行4分頻; 使用clk_b <= q(4 downto 3) 語(yǔ)句,取得一個(gè)脈沖序列; library ieee是表示庫(kù)文件; use ieee.all打開(kāi)庫(kù)中地程序包,是表示實(shí)體中描述器件的輸入、輸出或者數(shù)據(jù)類(lèi)型;實(shí)體聲明部分的語(yǔ)句格式: entity 實(shí)體名 is port端口表;- std_logic表示邏輯型端口,std_logic_vector(1 downto 0)為標(biāo)準(zhǔn)型邏輯位矢量且矢量長(zhǎng)度為2。 end 實(shí)體名; 結(jié)構(gòu)體的語(yǔ)句格式為:architecture a of 實(shí)體名is 信號(hào)聲明語(yǔ)句;-為內(nèi)部型號(hào)名稱(chēng)及類(lèi)型聲
13、明 begin功能描述語(yǔ)句end 結(jié)構(gòu)體名;process (clk)-是進(jìn)程名,用來(lái)描述clk的行為if clk'event and clk = '1' thenq <= q + 1;-當(dāng)時(shí)鐘信號(hào)clk = 1時(shí),則q = q + 1,否則clk = 0時(shí),保持原狀態(tài)。信號(hào)用= 來(lái)賦值if 語(yǔ)句的格式為:if 條件語(yǔ)句 then順序語(yǔ)句; end if;-其中條件語(yǔ)句必須由boolean表達(dá)式構(gòu)成仿真波形圖: 該圖是時(shí)序電路的仿真波形圖,從其結(jié)果可以看出程序?qū)r(shí)鐘信號(hào)進(jìn)行了降頻處理,得到了兩個(gè)不同的時(shí)鐘脈沖序列。圖2時(shí)序電路仿真波形圖4.2 鍵盤(pán)掃描電路掃描電路
14、的作用是用來(lái)提供鍵盤(pán)掃描信號(hào)的,掃描信號(hào)變化的順序依次為11101101101101111110依序地周而復(fù)始。每掃描一排按鍵就檢查一次是否有按鍵被按下,如果這排沒(méi)有按鍵被按下就忽略,反之,如果出現(xiàn)被按下的鍵則立刻進(jìn)行按鍵編碼的動(dòng)作,且將編碼的結(jié)果存儲(chǔ)于寄存器中。鍵盤(pán)掃描電路的VHDL程序:library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity scan isport(clk : in std_logic; clk_scan : o
15、ut std_logic_vector(3 downto 0);end scan;architecture a of scan issignal s : std_logic_vector(1 downto 0);signal q : std_logic_vector(3 downto 0);beginprocess (clk)beginif clk'event and clk = '1' thenq <= q + 1;s <= q (3 downto 2);end if;end process;clk_scan<= "1110" w
16、hen s=0 else "1101" when s=1 else "1011" when s=2 else "0111" when s=3 else "1111"end architecture;分析: 程序中,S信號(hào)是用來(lái)產(chǎn)生行掃描信號(hào)的四個(gè)狀態(tài),q是為了對(duì)輸入主時(shí)鐘進(jìn)行降頻處理。仿真波形圖:圖3鍵盤(pán)掃描仿真波形圖通過(guò)波形圖可以看出S信號(hào)的四個(gè)狀態(tài):00、01、10、11。而q 是一個(gè)四位計(jì)數(shù)器對(duì)輸入主時(shí)鐘進(jìn)行降頻處理。證明了該程序提供鍵盤(pán)掃描信號(hào)的功能。4.3 鍵盤(pán)消抖電路智能密碼鎖的原理是利用數(shù)的比較原理,
17、事先在鎖內(nèi)設(shè)定一個(gè)數(shù),然后將輸入的密碼與設(shè)定的數(shù)進(jìn)行比較。如果一致,鎖將會(huì)打開(kāi);否則將會(huì)報(bào)警。功能的實(shí)現(xiàn)必須要有輸入數(shù)字的過(guò)程,而人們?cè)趯?shí)行的操作過(guò)程中,由于每個(gè)人的習(xí)慣不一樣且按鍵大多是機(jī)械式開(kāi)關(guān),所以該功能必定包含去除抖動(dòng)電路。如果調(diào)整取樣頻率,可以發(fā)現(xiàn)抖動(dòng)現(xiàn)象得到了改善。消抖電路所使用的脈沖信號(hào)的頻率必須比其他電路使用的脈沖信號(hào)的頻率更高;通常將掃描電路的工作頻率定在24HZ左右,而將消抖電路的工作頻率定在128HZ左右,其工作頻率通常是前者的4倍或者更高5。鍵盤(pán)消抖電路的VHDL程序:library ieee;use ieee.std_logic_1164.all;library al
18、tera;use altera.maxplus2.all;entity debouncing isport(d_in,clk : in std_logic; dd1,dd0,qq1,qq0 : out std_logic; d_out,d_out1 : out std_logic);end debouncing;architecture a of debouncing issignal vcc, inv_d : std_logic;signal q0,q1 : std_logic;signal d0,d1 : std_logic;beginvcc <= '1'inv_d
19、<= not d_in;dff1 : dff port map (d => vcc, q => q0,clk => clk,clrn => inv_d,prn => vcc);dff2 : dff port map (d => vcc, q => q1,clk => clk,clrn => q0,prn => vcc);process (clk)begin if clk'event and clk='1' thend0 <= not q1;d1 <= d0;end if;end process
20、;dd0 <= d0;dd1 <= d1;qq1 <= q1;qq0 <= q0;d_out <= not (d1 and not d0);d_out1 <= not q1;end a;仿真波形圖:圖4鍵盤(pán)消抖電路仿真波形圖 此圖顯示鍵盤(pán)的輸入信號(hào)d_in作為電路的輸入信號(hào),clk是電路的時(shí)鐘脈沖信號(hào),也就是取樣信號(hào)。從仿真圖的結(jié)果來(lái)看,可以發(fā)現(xiàn)鍵盤(pán)消抖現(xiàn)象獲得了改善。4.4 鍵盤(pán)譯碼電路從前面所述的鍵盤(pán)掃描電路的輸出可以看出,掃描得到的信號(hào)規(guī)律性不強(qiáng)。鍵盤(pán)中的按鍵可分為數(shù)字按鍵和文字按鍵,每一個(gè)按鍵可能負(fù)責(zé)不同的功能。如數(shù)字鍵主要用來(lái)輸入數(shù)字,但是鍵盤(pán)所產(chǎn)
21、生的輸出,也就是掃描回復(fù)信號(hào),是無(wú)法拿來(lái)直接使用,必須對(duì)其進(jìn)行譯碼才能使用。 鍵盤(pán)譯碼電路主要負(fù)責(zé)的工作是:首先判別是否有鍵按下;若被按下的是數(shù)字鍵,則解碼成相對(duì)應(yīng)的BCD碼,若被按下的是功能鍵,則解碼成六位數(shù)的碼字,由密碼鎖控制電路做相對(duì)應(yīng)的動(dòng)作。 表1 鍵盤(pán)參數(shù)表掃描位置 鍵盤(pán)輸出 相對(duì)應(yīng)的 鍵盤(pán)譯碼 按鍵功能KY3KY0 KX2KX0 鍵盤(pán)按鍵 電路輸出1110 011 1 F=0001 數(shù)碼輸入1110 101 2 F=0010 數(shù)碼輸入1110 110 3 F=0011 數(shù)碼輸入1101 011 4 F=0100 數(shù)碼輸入1101 101 5 F=0101 數(shù)碼輸入1101 110
22、6 F=0110 數(shù)碼輸入1011 011 7 F=0111 數(shù)碼輸入1011 101 8 F=1000 數(shù)碼輸入1011 110 9 F=1001 數(shù)碼輸入0111 011 * T=0100 激活密碼鎖0111 101 0 F=0000 數(shù)碼輸入0111 110 # T=0001 清除/解除密碼鎖使用case.when 或者whenelse語(yǔ)句,便可完成其鍵盤(pán)譯碼電路的設(shè)計(jì)6。 鍵盤(pán)譯碼電路的VHDL程序:library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsi
23、gned.all;entity keyboard_dec1 isport(clk : in std_logic; clk_keyboard : in std_logic_vector(1 downto 0); c : in std_logic_vector(2 downto 0); out_numb : out std_logic_vector(3 downto 0); out_func : out std_logic_vector(3 downto 0); flag_numb : out std_logic; flag_func : out std_logic);end entity key
24、board_dec1;architecture a of keyboard_dec1 issignal ff : std_logic;signal fn : std_logic;signal z : std_logic_vector(4 downto 0);signal f : std_logic_vector(3 downto 0);signal n : std_logic_vector(3 downto 0);beginprocess (clk)beginz <= clk_keyboard & c;if clk'event and clk='1' th
25、encase z iswhen "11101" => n <= "0000"when "00011" => n <= "0001"when "00101" => n <= "0010"when "00110" => n <= "0011"when "01011" => n <= "0100"when "01101" =
26、> n <= "0101"when "01110" => n <= "0110"when "10011" => n <= "0111"when "10101" => n <= "1000"when "10110" => n <= "1001"when others => n <= "1111"end case;end if;i
27、f clk'event and clk='1' thencase z iswhen "11011" => f <= "0100"when "11110" => f <= "0001"when others => f <= "1000"end case;end if;end process;fn <= not ( n(3) and n(2) and n(1) and n(0);產(chǎn)生數(shù)字信號(hào)的標(biāo)志值ff <= (not f(3)
28、 and f(2) and not f(1) and not f(0) or (not f(3) and not f(2) and not f(1) and f(0);產(chǎn)生功能信號(hào)的標(biāo)志值flag_numb <= fn;flag_func <= ff;out_numb <= n;out_func <= f;end architecture;分析: 鍵盤(pán)譯碼電路除了負(fù)責(zé)將鍵盤(pán)送出的數(shù)據(jù)進(jìn)行譯碼外,還有就是在譯碼的同時(shí),必須判別所按下的是數(shù)字鍵還是功能鍵。 若按下的是數(shù)字鍵,則flag_numb =1,且 out_numb輸出BCD碼,并送往顯示電路。 若按下的是功能鍵,則
29、flag_func =1,且out_func 輸出6位碼,并送往智能密碼鎖的控制電路。 CASE語(yǔ)句的格式為: WHEN 選擇值 => 順序語(yǔ)句; WHEN 選擇值 => 順序語(yǔ)句; WHEN OTHERS => 順序語(yǔ)句; END CASE;-當(dāng)執(zhí)行CASE語(yǔ)句時(shí),首先計(jì)算表達(dá)式的值,然后執(zhí)行在條件語(yǔ)句中找到的選擇值與其值相同時(shí)的順序語(yǔ)句。當(dāng)所有的條件語(yǔ)句的選擇值與表達(dá)式的值不同時(shí),則執(zhí)行OTHERS后的順序語(yǔ)句。條件語(yǔ)句中的=>只相當(dāng)于THEN 的作用。其仿真結(jié)果為:圖5鍵盤(pán)譯碼電路仿真波形圖 從仿真圖上可以看出,智能密碼鎖的鍵盤(pán)譯碼電路程序是正確的。4.5 按鍵存
30、儲(chǔ)電路因?yàn)槊看伟存I都會(huì)產(chǎn)生新的數(shù)據(jù),可能會(huì)覆蓋前面的數(shù)據(jù),所以需要一個(gè)按鍵存儲(chǔ)電路,將鍵盤(pán)掃描譯碼后的結(jié)果記錄下來(lái)。 這一功能可以用移位寄存器來(lái)實(shí)現(xiàn)。本設(shè)計(jì)將采用串行輸入/串行輸出移位寄存器硬件作為按鍵存儲(chǔ)電路。所謂的串行輸入/串行輸出移位寄存器,即數(shù)據(jù)一個(gè)接著一個(gè)依序進(jìn)來(lái),輸出時(shí)采用先進(jìn)先出的順序,同樣是一個(gè)接著一個(gè)依序輸出。 其VHDL的源程序:library ieee; use ieee.std_logic_1164.all;entity siso isport(data_in : in std_logic; clk : in std_logic; data_out : out std_
31、logic);end siso;architecture a of siso issignal q : std_logic_vector(5 downto 0);beginprocess (clk)beginif clk'event and clk='1' thenq(0) <= data_in;for i in 1 to 5 loopq(i) <= q(i-1);end loop;end if;end process;data_out <= q(5);end a;仿真結(jié)果圖:圖6按鍵存儲(chǔ)電路仿真波形圖 從圖可以看出按鍵存儲(chǔ)電路是用移位寄存器的串行輸入
32、/串行輸出。4.6 智能密碼鎖控制電路智能密碼鎖控制電路是整個(gè)電路的控制中心,主要完成以下功能:數(shù)字按鍵輸入部分如果輸入數(shù)字鍵,第一個(gè)數(shù)字會(huì)從顯示器的最右端開(kāi)始顯示,此后每新按下一個(gè)數(shù)字時(shí),顯示器上的數(shù)字必須往左移動(dòng)一位。若想要更改輸入的數(shù)字,可按退格鍵來(lái)清除前一個(gè)輸入的數(shù)字,或者按清除鍵清除輸入的所有的數(shù)字,再重新輸入六位數(shù)字。既然設(shè)計(jì)的是六位智能密碼鎖,當(dāng)輸入的數(shù)字鍵超過(guò)六位時(shí),電路不應(yīng)理會(huì)。功能鍵的輸入部分 退格鍵:只清除前一個(gè)輸入的數(shù)字。 清除鍵:清除所有的輸入。 密碼核對(duì):在密碼更改,開(kāi)鎖之前必須先核對(duì)密碼。 密碼更改:按下此鍵將目前輸入的數(shù)字鍵設(shè)定為新的密碼。 激活電鎖:上鎖,上鎖
33、之前必須先設(shè)定密碼才能上鎖。 解除電鎖:檢查輸入的密碼是否正確,正確才能開(kāi)鎖程序清單:六位智能密碼鎖library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;library altera;use altera.maxplus2.all;entity elec_lock isport(clk_4m : in std_logic; -系統(tǒng)原始時(shí)鐘脈沖4M clk_scan : out std_logic_vector(3 downto 0); -仿真時(shí)
34、用的鍵盤(pán)掃描序列 key_in : in std_logic_vector(2 downto 0); -按鍵輸入 flag_numb : out std_logic; -數(shù)字輸出標(biāo)志 flag_func : out std_logic; -功能輸出標(biāo)志 led_com : out std_logic; clear : out std_logic; -清零功能 enlock: out std_logic; -上鎖、開(kāi)鎖功能 numb_cnt : out std_logic_vector(4 downto 0); bcd_code : out std_logic_vector(23 downto
35、0); selout : out std_logic_vector(1 downto 0);segout : out std_logic_vector(6 downto 0) -數(shù)碼管7段顯示器的輸出端); end elec_lock;architecture a of elec_lock iscomponent debouncing -元件例化語(yǔ)句port(d_in : in std_logic; clk : in std_logic; d_out : out std_logic);end component;signal clk : std_logic; -電路工作時(shí)鐘脈沖signal c
36、lk_keyboard : std_logic_vector(1 downto 0); -鍵盤(pán)掃描信號(hào)寄存器signal clk_debounce : std_logic; -消抖電路工作時(shí)鐘脈沖信號(hào)signal clk_display : std_logic_vector(1 downto 0); -顯示器時(shí)鐘信號(hào)signal c : std_logic_vector(2 downto 0); -鍵盤(pán)輸入消抖后寄存器signal n : std_logic_vector(3 downto 0); -數(shù)字按鍵譯碼值的寄存器signal f : std_logic_vector(3 downto
37、 0); -功能按鍵譯碼值的寄存器signal fn : std_logic; -數(shù)字按鍵標(biāo)志值數(shù)字signal ff : std_logic; -功能按鍵標(biāo)志值數(shù)字signal sel : std_logic_vector(5 downto 0);signal out_numb : std_logic_vector(3 downto 0); -數(shù)字輸出signal out_func : std_logic_vector(3 downto 0); -功能輸出signal acc : std_logic_vector(23 downto 0); -用于暫存鍵盤(pán)輸入的信息signal reg :
38、std_logic_vector(23 downto 0); -用于存儲(chǔ)輸入的密碼signal rr2 : std_logic; -清零信號(hào)signal qa,qb,bb : std_logic; signal nc : std_logic_vector(4 downto 0); -輸入密碼的移位寄存器signal db : std_logic_vector(3 downto 0); -數(shù)字顯示器signal seg : std_logic_vector(6 downto 0);begin -進(jìn)行內(nèi)部連接out_numb <= n; out_func <= f;flag_numb
39、<= fn;flag_func <= ff;clk_debounce <= clk;numb_cnt <= nc;segout(6 downto 0) <= seg;selout <= clk_display;led_com <= '1'counter : blocksignal q : std_logic_vector(22 downto 0);signal s : std_logic_vector(1 downto 0); -鍵盤(pán)掃描信號(hào)大約是15HZsignal sel : std_logic_vector(3 downto 0)
40、;beginprocess (clk_4m)beginif clk_4m'event and clk_4m = '1' thenq <= q + 1;end if;end process;clk <= q(0);clk_keyboard <= q(5 downto 4); -消抖時(shí)鐘信號(hào)大約是2Mclk_display <= q(5 downto 4); -對(duì)鍵盤(pán)時(shí)鐘信號(hào)進(jìn)行32分頻sel <= "1110" when clk_keyboard = 0 else -鍵盤(pán)掃描信號(hào)發(fā)生器產(chǎn)生的序列 "1101&qu
41、ot; when clk_keyboard = 1 else "1011" when clk_keyboard = 2 else "0111" when clk_keyboard = 3 else "1111" ;clk_scan <= sel ;end block counter ;debounuing : block -鍵盤(pán)消抖模塊begin -調(diào)用模塊debouncingu1 : debouncing port map( -端口映射語(yǔ)句 d_in => key_in(0), d_out => c(0), clk
42、 => clk );u2 : debouncing port map( d_in => key_in(1), d_out => c(1), clk => clk );u3 : debouncing port map( d_in => key_in(2), d_out => c(2), clk => cl k);end block debounuing; -鍵盤(pán)譯碼模塊key_decoder : blocksignal z : std_logic_vector(4 downto 0); -按鍵譯碼存儲(chǔ)signal r1,r0 : std_logic ;b
43、eginprocess (clk)beginz <= clk_keyboard & c; -數(shù)字按鍵譯碼if clk'event and clk='1' thencase z iswhen "11101" => n <= "0000"when "00011" => n <= "0001"when "00101" => n <= "0010"when "00110" => n &
44、lt;= "0011"when "01011" => n <= "0100"when "01101" => n <= "0101"when "01110" => n <= "0110"when "10011" => n <= "0111"when "10101" => n <= "1000"when "101
45、10" => n <= "1001"when others => n <= "1111"end case;end if;if clk'event and clk='1' thencase z iswhen "11011" => f <= "0100" -功能按鍵譯碼when "11110" => f <= "0001"when others => f <= "1000&qu
46、ot;end case;end if;end process;fn <= not ( n(3) and n(2) and n(1) and n(0); -產(chǎn)生數(shù)字按鍵的標(biāo)志值ff <= (not f(3) and f(2) and not f(1) and not f(0) or (not f(3) and not f(2) and not f(1) and f(0); -產(chǎn)生功能按鍵的標(biāo)志值process (clk) -寄存器清零信號(hào)的產(chǎn)生進(jìn)程beginif clk'event and clk='1' thenr1 <= r0;r0 <= ff
47、;end if;rr2 <= r1 and not r0 ;clear <= rr2;end process;end block key_decoder; keyin_process : block -按鍵輸入數(shù)據(jù)的存儲(chǔ),數(shù)字輸入時(shí)的寄存器控制signal rst,d0,d1 : std_logic ;begin process(clk,fn,rst)beginif rst = '1' thenacc <= "000000000000000000000000" -輸入清零nc <= "00000" -輸入的密碼個(gè)數(shù)
48、也重新計(jì)算else if fn'event and fn='1' then if nc < 6 thenacc <= acc(19 downto 0) & n ;bb <= '0'nc <= nc + 1 ;elsebb <= '1' ;end if ;end if;end if;end process;rst <= rr2;end block keyin_process;lock_process : block -上鎖、開(kāi)鎖的進(jìn)程beginprocess(clk,f)beginif clk'event and clk='1' thenif nc = 6 thenif f(2) = '1' then -按*鍵上鎖控制信號(hào)有效reg <= acc; -密碼存儲(chǔ)qa <= '1' ; qb <= '0'elsif f(0) = '1' then -按#鍵開(kāi)鎖控制信號(hào)有效if reg = acc then -密碼進(jìn)行核對(duì)qb <= '1' ; qa <= '0'end i
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 印刷材料的科技創(chuàng)新與應(yīng)用考核試卷
- 2025年醫(yī)療病例管理協(xié)議
- 2025年度美發(fā)店客戶(hù)滿(mǎn)意度調(diào)查與服務(wù)提升合同8篇
- 2025年食堂檔口租賃及市場(chǎng)營(yíng)銷(xiāo)合作合同范本3篇
- 2024門(mén)店超市經(jīng)營(yíng)管理承包合同3篇
- 2025年度綠色建材采購(gòu)與施工一體化項(xiàng)目承包合同4篇
- 2025年度智能家用空調(diào)安裝與維護(hù)服務(wù)協(xié)議書(shū)
- 2025年度模具制造設(shè)備租賃及節(jié)能改造合同4篇
- 二零二五年度版黃金首飾等抵押交易合同
- 2025年度綠色有機(jī)糧食購(gòu)銷(xiāo)合作經(jīng)營(yíng)協(xié)議
- 電纜擠塑操作手冊(cè)
- 浙江寧波鄞州區(qū)市級(jí)名校2025屆中考生物全真模擬試卷含解析
- IATF16949基礎(chǔ)知識(shí)培訓(xùn)教材
- 【MOOC】大學(xué)生創(chuàng)新創(chuàng)業(yè)知能訓(xùn)練與指導(dǎo)-西北農(nóng)林科技大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 勞務(wù)派遣公司員工考核方案
- 基礎(chǔ)生態(tài)學(xué)-7種內(nèi)種間關(guān)系
- 2024年光伏農(nóng)田出租合同范本
- 《阻燃材料與技術(shù)》課件 第3講 阻燃基本理論
- 2024-2030年中國(guó)黃鱔市市場(chǎng)供需現(xiàn)狀與營(yíng)銷(xiāo)渠道分析報(bào)告
- 新人教版九年級(jí)化學(xué)第三單元復(fù)習(xí)課件
- 江蘇省南京鼓樓區(qū)2024年中考聯(lián)考英語(yǔ)試題含答案
評(píng)論
0/150
提交評(píng)論