版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、數(shù)字電路綜合實(shí)驗(yàn)報(bào)告簡(jiǎn)易智能密碼鎖 一、實(shí)驗(yàn)課題及任務(wù)要求設(shè)計(jì)并實(shí)現(xiàn)一個(gè)數(shù)字密碼鎖,密碼鎖有四位數(shù)字密碼和一個(gè)確認(rèn)開(kāi)鎖按鍵,密碼輸入正 確,密碼鎖打開(kāi),密碼輸入錯(cuò)誤進(jìn)行警示?;疽螅?、密碼設(shè)置:通過(guò)鍵盤(pán)進(jìn)行4 位數(shù)字密碼設(shè)定輸入,在數(shù)碼管上顯示所輸入數(shù)字。 通過(guò)密碼設(shè)置確定鍵(BTN 鍵)進(jìn)行鎖定。2、開(kāi)鎖:在閉鎖狀態(tài)下,可以輸入密碼開(kāi)鎖,且每輸入一位密碼,在數(shù)碼管上顯示“-”,提示已輸入密碼的位數(shù)。輸入四位核對(duì)密碼后,按“開(kāi)鎖”鍵,若密碼正確則系統(tǒng)開(kāi)鎖,若密碼錯(cuò)誤系統(tǒng)仍然處于閉鎖狀態(tài),并用蜂鳴器或led 閃爍報(bào)警。3、在開(kāi)鎖狀態(tài)下,可以通過(guò)密碼復(fù)位鍵(BTN 鍵)來(lái)清除密碼,恢復(fù)初始密碼
2、“0000”。閉鎖狀態(tài)下不能清除密碼。4、用點(diǎn)陣顯示開(kāi)鎖和閉鎖狀態(tài)。提高要求:1、輸入密碼數(shù)字由右向左依次顯示,即:每輸入一數(shù)字顯示在最右邊的數(shù)碼管上,同時(shí) 將先前輸入的所有數(shù)字向左移動(dòng)一位。2、密碼鎖的密碼位數(shù)(46 位)可調(diào)。3、自擬其它功能。二、系統(tǒng)設(shè)計(jì)2.1系統(tǒng)總體框圖2.2邏輯流程圖2.3MDS圖2.4分塊說(shuō)明 程序主要分為6個(gè)模塊:鍵盤(pán)模塊,數(shù)碼管模塊,點(diǎn)陣模塊,報(bào)警模塊,防抖模塊,控制模塊。以下進(jìn)行詳細(xì)介紹。1. 鍵盤(pán)模塊本模塊主要完成是44鍵盤(pán)掃描,然后獲取其鍵值,并對(duì)其進(jìn)行編碼,從而進(jìn)行按鍵的識(shí)別,并將相應(yīng)的按鍵值進(jìn)行顯示。 鍵盤(pán)掃描的實(shí)現(xiàn)過(guò)程如下:對(duì)于44鍵盤(pán),通常連接為4
3、行、4列,因此要識(shí)別按鍵,只需要知道是哪一行和哪一列即可,為了完成這一識(shí)別過(guò)程,我們的思想是,首先固定輸出高電平,在讀入輸出的行值時(shí),通常高電平會(huì)被低電平拉低,當(dāng)當(dāng)前位置為高電平“1”時(shí),沒(méi)有按鍵按下,否則,如果讀入的4行有一位為低電平,那么對(duì)應(yīng)的該行肯定有一個(gè)按鍵按下,這樣便可以獲取到按鍵的行值。同理,獲取列值也是如此,先輸出4列為高電平,然后在輸出4行為低電平,再讀入列值,如果其中有哪一位為低電平,那么肯定對(duì)應(yīng)的那一列有按鍵按下。由此可確定按鍵位置。X78按鍵儲(chǔ)存鍵盤(pán)譯碼消抖9X456X123XX0鍵盤(pán)掃描x(X為無(wú)效按鍵)2.數(shù)碼管模塊本實(shí)驗(yàn)采用六位七段共陰極數(shù)碼管,通過(guò)選通6個(gè)位選管腳
4、,向相應(yīng)的IO口送低電平來(lái)點(diǎn)亮其中任何一位數(shù)碼管,因?yàn)楝F(xiàn)在采用四位密碼鎖,所以只是用了其中四個(gè),最高位兩位數(shù)碼管位選全部置1.如下附上7段共陰極數(shù)碼管真值表3.點(diǎn)陣模塊點(diǎn)陣模塊,共由8*8*2個(gè)發(fā)光二極管組成,行低電平有效,列高電平有效。要求在開(kāi)鎖模式和閉鎖模式顯示不同的圖案,則先將要顯示的每幅圖像畫(huà)8*8個(gè)小方格的矩形框中,再在有圖案下落處的小方格里填上“1”,無(wú)圖案處填上“0”,這樣就形成了與圖案所對(duì)應(yīng)的二進(jìn)制數(shù)據(jù)在該矩形框上的分布。當(dāng)閉鎖時(shí)以紅色點(diǎn)陣顯示,此時(shí)綠色點(diǎn)陣全部置0,反之亦然。4.報(bào)警模塊 當(dāng)報(bào)警程序被調(diào)用,蜂鳴器輸出高電平進(jìn)行報(bào)警,表示輸入密碼錯(cuò)誤5防抖按鍵輸入只有為15ms
5、以上的高電平時(shí)才會(huì)讀出按鍵值從而消除電路中的抖動(dòng)。6.控制中心 lockmode=1表示關(guān)鎖,此時(shí)點(diǎn)陣顯示落鎖,按任何鍵都不會(huì)顯示密碼,清零或者開(kāi)鎖,在此時(shí)輸入密碼kwei從0開(kāi)始不斷加1,輸入的密碼位數(shù)在數(shù)碼管上依次左移,當(dāng)輸入密碼m與寄存器中預(yù)設(shè)密碼mm相同時(shí),按下確認(rèn)鍵btn2切換為開(kāi)鎖狀態(tài),lockmode=0,此時(shí)按下btn1表示清零,恢復(fù)為初始密碼0000,按set鍵寄存器內(nèi)密碼,按下btnloc切換為關(guān)鎖狀態(tài)。三、仿真波形分析在QUARTUS2中應(yīng)用系統(tǒng)自帶的功能進(jìn)行波形仿真,這里采用了分模塊仿真。主程序仿真在主要功能程序方面波形如下,在初始化模式按下set鍵系統(tǒng)進(jìn)入修改密碼狀態(tài)
6、,setmode波形顯示高電平。為仿真方便,僅使kbin(即行輸入信號(hào))在1011和1111兩個(gè)狀態(tài)下相互轉(zhuǎn)換,在不同的kbout(即列掃描輸出信號(hào))下分別對(duì)應(yīng)4、5、6、7四個(gè)數(shù)字,故密碼寄存器mx為輸入的修改后的密碼。按下btn2(確認(rèn)鍵)確認(rèn)密碼后,setmode變?yōu)榈碗娖?,即修改密碼狀態(tài)結(jié)束。按下btn1時(shí)清零,密碼寄存器取值還原為0000,至此均為開(kāi)鎖狀態(tài)下的操作,lockmode一直為低電平。按下閉鎖鍵btnloc后,lockmode從0跳變到1,由此進(jìn)入閉鎖模式。按鍵消抖模塊仿真當(dāng)按下鍵時(shí)得到的高電平為輸入x,持續(xù)一定時(shí)間后方可輸出一個(gè)高電平,而無(wú)論按下的時(shí)間多長(zhǎng),都只輸出一個(gè)高
7、電平y(tǒng),從而實(shí)現(xiàn)消除按鍵電路中的抖動(dòng)。分頻模塊仿真為仿真方便,改變分頻比。原程序在50Mhz時(shí)鐘輸入下,輸出分別為1Mhz、200hz、1000hz、500hz,分別用于鍵盤(pán)掃描、消抖模塊輸入、點(diǎn)陣掃描以及數(shù)碼管掃描。數(shù)碼管模塊仿真由smgcatout輸出可以看出低四位數(shù)碼管依次選通。第i位選通時(shí),smgzf為mi的七段數(shù)碼管的譯碼值。點(diǎn)陣模塊仿真當(dāng)lockmode=1時(shí)dzcolr全部為0僅dzcolg顯示圖案; 當(dāng)lockmode=0時(shí)dzcolg全部為0由dzcolr顯示圖案;而dzrow一直在進(jìn)行行掃描,形成了兩種不同顏色點(diǎn)陣。報(bào)警模塊仿真當(dāng)bj=0時(shí),fmq為0;bj=1時(shí),fmq將
8、clk分頻后輸出,即蜂鳴器發(fā)出聲響。四、源程序-頂層文件-library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity lock isport (clk : in std_logic; setmode:out std_logic; lockmode:out std_logic; set:in std_logic; btn1,btn2,btnloc:in std_logic; smgzf: out std_logic_vector(6 downto 0); smgcatout:out std_log
9、ic_vector(5 downto 0); kbin: in std_logic_vector(3 downto 0); kbout: buffer std_logic_vector(3 downto 0); dzrow,dzcolr,dzcolg: out std_logic_vector(7 downto 0); fmq: out std_logic );end lock;architecture behave of lock is signal setm: std_logic; signal lockm: std_logic; signal lbj: std_logic; signal
10、 lkwei: integer range 0 to 4; signal lm1,lm2,lm3,lm4:integer range 0 to 9; signal clk_1: std_logic;-1MHzsignal clk_2: std_logic;-200Hzsignal clk_3: std_logic;-1000Hz signal clk_4: std_logic; -500Hzcomponent kb is -鍵盤(pán)模塊port (clk : in std_logic; set:in std_logic; btn1,btn2,btnloc:in std_logic; kbin: i
11、n std_logic_vector(3 downto 0); kbout: buffer std_logic_vector(3 downto 0); bj:out std_logic; setmod:out std_logic; lockmod:out std_logic; kbwei:out integer range 0 to 4; m1x,m2x,m3x,m4x:out integer range 0 to 9 );end component;component smg is -數(shù)碼管顯示模塊 port (clk : in std_logic; setmode:in std_logic
12、; lockmode:in std_logic; kwei:in integer range 0 to 4; m1,m2,m3,m4:in integer range 0 to 9; smgzf: out std_logic_vector(6 downto 0); smgcatout:out std_logic_vector(5 downto 0) );end component;component dz is -點(diǎn)陣模塊 port (clk : in std_logic; -set:in std_logic; lockmode:in std_logic; dzrow,dzcolr,dzcol
13、g: out std_logic_vector(7 downto 0) ); end component; component alarm is -報(bào)警模塊port (clk : in std_logic; bj:in std_logic; fmq: out std_logic );end component;component fenpin is -分頻模塊port(clk: in std_logic; clk_out1: out std_logic; clk_out2: out std_logic; clk_out3: out std_logic; clk_out4: out std_lo
14、gic);end component;begina1: fenpinport map(clk=clk,clk_out1=clk_1,clk_out2=clk_2, clk_out3=clk_3,clk_out4=clk_4);u1: kbport map(clk = clk, set = set, btn1 =btn1,btn2=btn2,btnloc=btnloc, kbin=kbin, kbout=kbout, bj=lbj, setmod=setm, lockmod=lockm, kbwei=lkwei, m1x=lm1,m2x=lm2,m3x=lm3,m4x=lm4);u2 :smgp
15、ort map(clk = clk_4, setmode=setm, lockmode=lockm, kwei=lkwei, m1=lm1,m2=lm2,m3=lm3,m4=lm4, smgzf=smgzf, smgcatout=smgcatout);u3 :dzport map(clk=clk_3, lockmode=lockm ,dzrow=dzrow, dzcolr=dzcolg, dzcolg=dzcolr );u4 :alarmport map(clk = clk, bj=lbj, fmq=fmq);setmode=setm;lockmode=lockm; end;-鍵盤(pán)模塊-lib
16、rary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity kb isport (clk : in std_logic; set:in std_logic; btn1,btn2,btnloc:in std_logic; kbin: in std_logic_vector(3 downto 0); kbout: buffer std_logic_vector(3 downto 0); bj:out std_logic; setmod:out std_logic; lockmod:out std_logi
17、c; kbwei:out integer range 0 to 4; m1x,m2x,m3x,m4x:out integer range 0 to 9 );end kb;architecture behave of kb is signal jpout:integer range 0 to 10; signal alarm:std_logic; signal tmp4: integer range 0 to 2499999; signal clkfd: std_logic; signal m1,m2,m3,m4,mm1,mm2,mm3,mm4: integer range 0 to 9; si
18、gnal wei:integer range 0 to 3; signal kwei:integer range 0 to 4; signal setmode:std_logic; signal lockmode:std_logic; signal set1:std_logic; signal clear: std_logic; signal sure: std_logic; signal lock: std_logic; signal en,finish: std_logic;signal btn1_out, btn2_out, btnloc_out, set_out: std_logic;
19、signal clk_1: std_logic;-1MHzsignal clk_2: std_logic;-200Hz component scan isport(clk_1: in std_logic; clk_2: in std_logic; row: in std_logic_vector(3 downto 0); col: buffer std_logic_vector(3 downto 0); en_up: buffer std_logic; y: out integer range 0 to 10);end component;component fenpin isport(clk
20、: in std_logic; clk_out1: out std_logic; clk_out2: out std_logic; clk_out3: out std_logic; clk_out4: out std_logic);end component;component debounce isport(clk, x: in std_logic; y: out std_logic);end component; begin setmod=setmode; lockmod=lockmode; bj=alarm; kbwei=kwei; m1x=m1;m2x=m2;m3x=m3;m4xclk
21、_1, clk_2=clk_2, row=kbin, col=kbout, en_up=en, y=jpout); u2: fenpin port map(clk=clk, clk_out1=clk_1, clk_out2=clk_2, clk_out3=open,clk_out4=open); u3: debounce port map(clk=clk_2, x=btn1, y=btn1_out); u4: debounce port map(clk=clk_2, x=btn2, y=btn2_out); u5: debounce port map(clk=clk_2, x=btnloc,
22、y=btnloc_out); u6: debounce port map(clk=clk_2, x=set, y=set_out);process(clk) begin if(clkevent and clk=1)then if (tmp4=2499999) then tmp4=0;clkfd=not clkfd; else tmp4=tmp4+1; end if; end if; end process; process(clk_1,en,jpout) begin if(clk_1event and clk_1=1) then if(lockmode=1)then -閉鎖狀態(tài)下輸入密碼并讀入
23、按鍵值后存入mm wei=0; if(jpout/=10)then if(kwei=3)then mm4=jpout;kwei=kwei+1; elsif(kwei=2)then mm3=jpout;kwei=kwei+1; elsif(kwei=1)then mm2=jpout;kwei=kwei+1; elsif(kwei=0)then mm1=jpout;kwei=kwei+1; end if; end if ; if(sure=1)then -確認(rèn)后判斷密碼是否正確 if(mm1=m1)and(mm2=m2)and(mm3=m3)and(mm4=m4) then lockmode=0;
24、alarm=0;-正確開(kāi)鎖 else kwei=0;alarm=1; -錯(cuò)誤報(bào)警 end if; end if; else kwei=0;-開(kāi)鎖狀態(tài)下 if(lock=1)then -上鎖 lockmode=1; else if(set1=1)then setmode=1; -修改密碼 else setmode=0; end if; if(clear=1) then -清零 m1=0;m2=0;m3=0;m4=0;-mm1=0;mm2=0;mm3=0;mm4=0; wei=0;kwei=0;alarm=0 elsif(setmode=1)then if(jpout/=10)then -修改密碼
25、狀態(tài)下讀入按鍵值存入m并移位 if(wei=0)then m1=m2;m2=m3;m3=m4;m4=jpout;wei=wei+1; elsif(wei=1)then m1=m2;m2=m3;m3=m4;m4=jpout;wei=wei+1; elsif(wei=2)then m1=m2;m2=m3;m3=m4;m4=jpout;wei=wei+1; elsif(wei=3)then m1=m2;m2=m3;m3=m4;m4=jpout;wei=0; end if; end if; if(sure=1)then -確認(rèn)后結(jié)束修改密碼狀態(tài)setmode=0;alarm=0; end if; en
26、d if; end if; end if; end if; end process; process(set,sure) -修改密碼鍵 begin if(clkfdevent and clkfd=1)then if(set=1)then set1=1; end if; if(sure=1)then set1=0; end if; end if;end process; process(btn1) -清零鍵 begin if(btn1=1)then clear=1; else clear=0; end if; end process; process(btn2) -確認(rèn)鍵 begin if(bt
27、n2=1)then sure=1; else sure=0; end if; end process; process(btnloc) -閉鎖鍵 begin if(btnloc=1)then lock=1; else lockclk_2, x=en, y=en_up);process(clk_1)beginif(clk_1event and clk_1=1) then -列掃描if(en=1) thencol col col col colif(row(3) and row(2) and row(1) and row(0)=1) thenencase row is-when 1110 = yy
28、=1; eny=4; eny=7; en ycase row iswhen 1110 =y=0; eny=2; eny=5; eny=8; enycase row is-when 1110 = yy=3; eny=6; eny=9; eny null;end case;end if;end process;end a;-消抖-library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity debounce isport(clk, x: in std_logic; - 200hz低頻時(shí)鐘y: out
29、std_logic);end debounce;architecture a of debounce istype state is(s0,s1,s2,s3,s4); -5個(gè)狀態(tài)signal pre_s, next_s: state;beginprocess(clk)beginif(clkevent and clk=1) thenpre_s -初始狀態(tài)s0if(x=1) thennext_s=s1;elsenext_s=s0;end if;yif(x=1) thennext_s=s2;elsenext_s=s0;end if;yif(x=1) thennext_s=s3;elsenext_s=
30、s0;end if;y -連續(xù)3個(gè)高電平,輸出一個(gè)高電平y(tǒng)=1;next_s -3個(gè)以上高電平,不再繼續(xù)輸出高電平y(tǒng)=0;if(x=1) thennext_s=s4;elsenext_s=s0;end if;end case;end process;end a;-分頻模塊-library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fenpin isport(clk: in std_logic;clk_out1: out std_logic;clk_out2: out std_logic;clk
31、_out3: out std_logic;clk_out4: out std_logic );end fenpin;architecture div of fenpin isconstant div1: integer:=24;-1Mhz,用于鍵盤(pán)掃描constant div2: integer:=124999;-200hz,用于消抖constant div3: integer:=24999;-1000hz,用于點(diǎn)陣掃描constant div4: integer:=49999;-500hz,用于數(shù)碼管掃描signal c1: integer range 0 to div1;signal c2
32、: integer range 0 to div2;signal c3: integer range 0 to div3;signal c4: integer range 0 to div4;signal temp1: std_logic;signal temp2: std_logic;signal temp3: std_logic;signal temp4: std_logic;begin process(clk)beginif(clkevent and clk=1) then if(c1=div1) thentemp1=not temp1;c1=0;elsec1=c1+1;end if;i
33、f(c2=div2) thentemp2=not temp2;c2=0;elsec2=c2+1;end if;if(c3=div3) thentemp3=not temp3;c3=0;elsec3=c3+1;end if;if(c4=div4) thentemp4=not temp4;c4=0;elsec4=c4+1;end if;end if;end process;clk_out1=temp1;clk_out2=temp2;clk_out3=temp3;clk_out4=temp4;end div;-數(shù)碼管-library ieee;use ieee.std_logic_1164.all;
34、use ieee.std_logic_unsigned.all;entity smg isport (clk : in std_logic; -500hz clkout4 setmode:in std_logic; lockmode:in std_logic; kwei:in integer range 0 to 4; m1,m2,m3,m4:in integer range 0 to 9; -四位密碼的值 smgzf: out std_logic_vector(6 downto 0); -編碼值 smgcatout:out std_logic_vector(5 downto 0) );end
35、 smg;architecture behave of smg is signal smgcat:integer range 0 to 5; signal m1y,m2y,m3y,m4y:std_logic_vector(6 downto 0); begin process(clk) -位選碼 begin if(clkevent and clk=1)then if (smgcat=5)then smgcat=0; else smgcatsmgcatout=110111;smgzfsmgcatout=111011;smgzfsmgcatout=111101;smgzfsmgcatout=111110;smgzfsmgcatoutsmgcatout=111111; end case;
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 吉林師范大學(xué)《數(shù)字調(diào)色技術(shù)》2021-2022學(xué)年第一學(xué)期期末試卷
- 吉林師范大學(xué)《量子力學(xué)II》2021-2022學(xué)年第一學(xué)期期末試卷
- 危險(xiǎn)廢物管理制度在制造業(yè)的必要性
- 醫(yī)療機(jī)構(gòu)衛(wèi)生管理制度制定方案
- 醫(yī)務(wù)科遠(yuǎn)程醫(yī)療服務(wù)發(fā)展方案
- 酒店物業(yè)管理效率提升方案
- 吉林師范大學(xué)《常微分方程》2021-2022學(xué)年第一學(xué)期期末試卷
- 大型活動(dòng)防汛安全實(shí)施方案
- 吉林大學(xué)《田徑基礎(chǔ)》2021-2022學(xué)年第一學(xué)期期末試卷
- 2024年網(wǎng)吧經(jīng)營(yíng)合同范文
- 漢語(yǔ)詞性專(zhuān)題練習(xí)(附答案)
- 北師大版二年級(jí)數(shù)學(xué)上冊(cè)第九單元《除法》知識(shí)點(diǎn)梳理復(fù)習(xí)ppt
- 店長(zhǎng)轉(zhuǎn)正考核(員工評(píng)價(jià))
- 9-2 《第三方過(guò)程評(píng)估淋蓄水檢查內(nèi)容》(指引)
- 鐵路企業(yè)高技能人才隊(duì)伍建設(shè)的對(duì)策與措施
- 亞馬遜品牌授權(quán)書(shū)(英文模板)
- TTJCA 0007-2022 住宅室內(nèi)裝飾裝修工程施工驗(yàn)收規(guī)范
- 構(gòu)造柱工程施工技術(shù)交底
- 流體力學(xué)筆記整理
- 現(xiàn)代簡(jiǎn)約風(fēng)格發(fā)展趨勢(shì)
- 路緣石滑模施工工法
評(píng)論
0/150
提交評(píng)論