密碼鎖設(shè)計(jì)VHDL源程序文檔_第1頁
密碼鎖設(shè)計(jì)VHDL源程序文檔_第2頁
密碼鎖設(shè)計(jì)VHDL源程序文檔_第3頁
密碼鎖設(shè)計(jì)VHDL源程序文檔_第4頁
密碼鎖設(shè)計(jì)VHDL源程序文檔_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、2.2系統(tǒng)的輸入、輸出端口以及寄存器清單及說明: CLK 輸入時(shí)鐘方波信號端口 KIN 鍵盤按鍵輸入端口 KOUT 鍵盤完整編碼碼值輸出端口(七位二進(jìn)制數(shù)) KOUT1 掃描信號輸出端口(三位二進(jìn)制數(shù)) SIN 鍵盤消抖輸入端口(七位二進(jìn)制數(shù)) SOUT 鍵盤消抖輸出端口(七位二進(jìn)制數(shù)) LIN 鍵盤按鍵編碼模塊輸入端口(七位二進(jìn)制數(shù)) DF 數(shù)字按鍵標(biāo)志寄存器 FF 功能按鍵標(biāo)志寄存器 ND 數(shù)字按鍵識別編碼寄存器 NF 功能按鍵識別編碼寄存器 LOCK 電子密碼鎖上鎖狀態(tài)標(biāo)志寄存器 LOCK1 電子密碼鎖報(bào)警狀態(tài)標(biāo)志寄存器 UNLOCK 電子密碼鎖開鎖狀態(tài)標(biāo)志寄存器 NULL1 電子密碼鎖

2、無密碼狀態(tài)標(biāo)志寄存器 DATA 電子密碼鎖數(shù)碼顯示數(shù)據(jù)寄存器 CAT 電子密碼鎖數(shù)碼顯示位選寄存器 DISPLAY 電子密碼鎖數(shù)碼顯示段選寄存器(十七位二進(jìn)制數(shù)) NUM0、NUM1、NUM2、NUM3數(shù)碼顯示中分位顯示數(shù)據(jù)寄存器 DISNUM 數(shù)碼顯示段選數(shù)據(jù)寄存器 I1 數(shù)碼顯示計(jì)數(shù)器 SCANS 鍵盤掃描中按鍵完整編碼寄存器 SCAN 鍵盤掃描寄存器 CNT 鍵盤消抖計(jì)數(shù)器 SIN1 鍵盤按鍵鍵值寄存器 I 鍵盤掃描計(jì)數(shù)器 DF1 數(shù)字按鍵狀態(tài)標(biāo)志寄存器 ACC 鍵盤數(shù)字輸入暫存器 T 報(bào)警計(jì)數(shù)器 REG 電子密碼鎖密碼存儲器 NC 計(jì)數(shù)器1鍵盤輸入掃描部分源程序LIBRARY IEEE

3、;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_1164.ALL;ENTITY kbscan1 is PORT(clk:in STD_LOGIC; kin:in STD_LOGIC_VECTOR(3 DOWNTO 0);-PC7-PC4 kout:out STD_LOGIC_VECTOR(7 downto 0);-PC3-PC kout1: out STD_LOGIC_VECTOR(3 downto 0); end kbscan1; architecture a of kbscan

4、1 is signal scans: std_logic_vector(7 downto 0);-PC7-PC0 signal scan : std_logic_vector(3 downto 0);-PC3-PC0 signal cnt :integer range 0 to 140; signal sin1:std_logic_vector(3 downto 0); signal i:integer range 0 to 3; begin scans<=scan& kin; kout<=scans; kout1<=scan; process(clk) begin

5、if(falling_edge(clk)then if(i=3)then i<=0; else i<=i+1; end if; case i is when 0=>scan<="0001" when 1=>scan<="0010" when 2=>scan<="0100" when 3=>scan<="1000" end case; end if; end process; End a;2鍵盤輸入消抖部分源程序LIBRARY IEEE;USE IEEE.S

6、TD_LOGIC_1164.ALL;ENTITY xiaodou is Port(clk :in STD_LOGIC; sin:in std_logic_vector(7 downto 0); sout:out std_logic_vector(7 downto 0); end xiaodou; architecture behavioral of xiaodou is signal cnt :integer range 0 to 120; signal sin1:std_logic_vector(7 downto 0); begin process(clk) begin sin1<=s

7、in; if (rising_edge(clk)then if(sin1=sin)then cnt<=cnt+1; else sin1<=sin; cnt<=0; end if; if(cnt=120)then sout<=sin; cnt<=0; end if; end if; end process; end behavioral; 3鍵盤輸入編碼部分源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_1164.ALL;E

8、NTITY bianma is PORT(clk:in STD_LOGIC; lin:in STD_LOGIC_VECTOR(7 DOWNTO 0);-PC7-PC4 DF,FF: out std_logic; nd,nf:BUFFER std_logic_vector(3 downto 0); end bianma; architecture b of bianma is begin process(clk) begin if clk'event and clk='1' then case lin is when"10000001"=>ND&

9、lt;="0000"-0 when"00010001"=>ND<="0001"-1 when"00010010"=>ND<="0010"-2 when"00010100"=>ND<="0011"-3 when"00100001"=>ND<="0100"-4 when"00100010"=>ND<="0101"-5 wh

10、en"00100100"=>ND<="0110"-6 when"01000001"=>ND<="0111"-7 when"01000010"=>ND<="1000"-8 when"01000100"=>ND<="1001"-9 when others =>ND<="1111" END CASE; END IF; IF CLK'EVENT AND CL

11、K='1' THEN CASE LIN IS when"00011000"=>NF<="0001"-qingchu when"00101000"=>NF<="0010"-queren when"01001000"=>NF<="0011"-shangsuo when"10001000"=>NF<="0100"-kaisuo when"10000100"=&

12、gt;NF<="0101"-wangjimima when"10000010"=>NF<="0111"-genggaimima When others =>NF<="1000" END CASE; END IF; END PROCESS; DF<=NOT(ND(3) AND ND(2) AND ND(1) AND ND(0); FF<=NF(2) OR NF(1) OR NF(0); end b;4 電子密碼鎖的控制部分程序DF 數(shù)字按鍵標(biāo)志寄存器 FF 功能按鍵標(biāo)志寄存器

13、 ND 數(shù)字按鍵識別編碼寄存器 NF 功能按鍵識別編碼寄存器 LOCK 電子密碼鎖上鎖狀態(tài)標(biāo)志寄存器 LOCK1 電子密碼鎖報(bào)警狀態(tài)標(biāo)志寄存器 UNLOCK 電子密碼鎖開鎖狀態(tài)標(biāo)志寄存器 NULL1 電子密碼鎖無密碼狀態(tài)標(biāo)志寄存器 DATA 電子密碼鎖數(shù)碼顯示數(shù)據(jù)寄存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY kongzhi IS PORT(CLK: IN STD_LOGIC; DF,FF: in STD_LOGIC; ND,NF:in STD_LOGIC_VECTOR(3 downTO 0); LOCK,LOCK1,UNLOCK:buff

14、er STD_LOGIC; NULL1: buffer STD_LOGIC; DATA: out STD_LOGIC_VECTOR(15 downTO 0) ); END kongzhi; ARCHITECTURE V1 OF kongzhi IS signal i1:integer range 0 to 3; signal df1:std_logic; signal ACC: STD_LOGIC_VECTOR(15 DOWNTO 0); signal t: INTEGER RANGE 0 TO 2; signal REG:STD_LOGIC_VECTOR(15 downTO 0); sign

15、al NC,A:INTEGER RANGE 0 TO 3; begin PROCESS(FF,DF)IS BEGIN if rising_edge(clk) then IF FF='1'THEN IF NF="0001"THEN ACC<="0000000000000000" NC<=0; END IF; ELSE df1<=df; IF df1='0'and DF='1' THEN IF NC<4 THEN ACC<=ACC(11 DOWNTO 0)&ND; NC&l

16、t;=NC+1; END IF; END IF; END IF; IF FF='1' THEN IF NF="0011" THEN REG<=ACC; LOCK<='0' UNLOCK<='1' LOCK1<='1' NULL1<='1' else IF NF="0100" THEN IF REG=ACC THEN LOCK<='1' UNLOCK<='0' LOCK1<='1'

17、NULL1<='1' ELSE LOCK<='0' UNLOCK<='1' IF t=2 THEN REG<="1000100010001000" LOCK1<='0' lock<='1' unlock<='1' null1<='1' t<=0; ELSE t<=t+1; END IF; END IF; else IF NF="0101" THEN REG<="1000

18、100010001000" LOCK<='0' UNLOCK<='1' LOCK1<='1' NULL1<='1' else IF NF="0111" THEN IF UNLOCK='1' THEN IF REG=ACC THEN REG<="0000000000000000" NULL1<='0' LOCK<='1' LOCK1<='1' UNLOCK<='

19、;1' END IF; END IF; else IF NF="0010" THEN REG<=ACC; NULL1<='1' LOCK<='0' LOCK1<='1' UNLOCK<='1' END IF; end if; end if; end if; end if; end if; end if; END PROCESS; DATA<=ACC; END ARCHITECTURE V1; CAT 電子密碼鎖數(shù)碼顯示位選寄存器 DISPLAY 電子密碼鎖數(shù)碼顯示段選

20、寄存器(十七位二進(jìn)制數(shù)) DISPLAY 電子密碼鎖數(shù)碼顯示段選寄存器(十七位二進(jìn)制數(shù)) NUM0、NUM1、NUM2、NUM3數(shù)碼顯示中分位顯示數(shù)據(jù)寄存器 DISNUM 數(shù)碼顯示段選數(shù)據(jù)寄存器 I1 數(shù)碼顯示計(jì)數(shù)器 5電子密碼鎖的數(shù)碼顯示模塊源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY LEDXIANSHI IS PORT(CLK :IN STD_LOGIC; DATA: in STD_LOGIC_VECTOR (15 DOWNTO 0); CAT:OUT STD_LOGIC_VECTOR(0 TO 3); DISPLAY:OUT ST

21、D_LOGIC_VECTOR(16 DOWNTO 0); END LEDXIANSHI; ARCHITECTURE BEHAVIORAL OF LEDXIANSHI IS Signal NUM0,NUM1,NUM2,NUM3: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL DISNUM:STD_LOGIC_VECTOR(16 DOWNTO 0); SIGNAL I1:INTEGER RANGE 0 TO 3; BEGIN NUM0<=DATA(3 DOWNTO 0);NUM1<=DATA(7 DOWNTO 4);NUM2<=DATA(11 DOWN

22、TO 8);NUM3<=DATA(15 DOWNTO 12); DISPLAY<=DISNUM; PROCESS(CLK) BEGIN IF(RISING_EDGE(CLK)THEN IF(I1=3)THEN I1<=0; ELSE I1<=I1+1; END IF; END IF; END PROCESS; PROCESS(I1) BEGIN CASE I1 IS WHEN 0=>CAT<="1110" CASE NUM0 IS WHEN "0000"=>DISNUM<="00000000011

23、111111" WHEN "0001"=>DISNUM<="00000000000001100" WHEN "0010"=>DISNUM<="00001000101110111" WHEN "0011"=>DISNUM<="00001000100111111" WHEN "0100"=>DISNUM<="01001010110000000" WHEN "0101&quo

24、t;=>DISNUM<="00001100110111011" WHEN "0110"=>DISNUM<="00001000111111011" WHEN "0111"=>DISNUM<="00000000000001111" WHEN "1000"=>DISNUM<="00001000111111111" WHEN "1001"=>DISNUM<="00001000

25、110111111" WHEN OTHERS=>DISNUM<=NULL; END CASE; WHEN 1 => CAT<="1101" CASE NUM1 IS WHEN "0000"=>DISNUM<="00000000011111111" WHEN "0001"=>DISNUM<="00000000000001100" WHEN "0010"=>DISNUM<="0000100010111

26、0111" WHEN "0011"=>DISNUM<="00001000100111111" WHEN "0100"=>DISNUM<="01001010110000000" WHEN "0101"=>DISNUM<="00001100110111011" WHEN "0110"=>DISNUM<="00001000111111011" WHEN "0111"

27、=>DISNUM<="00000000000001111" WHEN "1000"=>DISNUM<="00001000111111111" WHEN "1001"=>DISNUM<="00001000110111111" WHEN OTHERS=>DISNUM<=NULL; END CASE; WHEN 2=> CAT<="1011" CASE NUM2 IS WHEN "0000"=>D

28、ISNUM<="00000000011111111" WHEN "0001"=>DISNUM<="00000000000001100" WHEN "0010"=>DISNUM<="00001000101110111" WHEN "0011"=>DISNUM<="00001000100111111" WHEN "0100"=>DISNUM<="0100101011000000

29、0" WHEN "0101"=>DISNUM<="00001100110111011" WHEN "0110"=>DISNUM<="00001000111111011" WHEN "0111"=>DISNUM<="00000000000001111" WHEN "1000"=>DISNUM<="00001000111111111" WHEN "1001"=&g

30、t;DISNUM<="00001000110111111" WHEN OTHERS=>DISNUM<=NULL; END CASE; WHEN 3=> CAT<="0111" CASE NUM3 IS WHEN "0000"=>DISNUM<="00000000011111111" WHEN "0001"=>DISNUM<="00000000000001100" WHEN "0010"=>DISN

31、UM<="00001000101110111" WHEN "0011"=>DISNUM<="00001000100111111" WHEN "0100"=>DISNUM<="01001010110000000" WHEN "0101"=>DISNUM<="00001100110111011" WHEN "0110"=>DISNUM<="00001000111111011&q

32、uot; WHEN "0111"=>DISNUM<="00000000000001111" WHEN "1000"=>DISNUM<="00001000111111111" WHEN "1001"=>DISNUM<="00001000110111111" WHEN OTHERS=>DISNUM<=NULL; END CASE; END CASE; END PROCESS; END BEHAVIORAL;6電子密碼鎖的數(shù)碼顯示部分

33、(附加)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY LEDXIANSHI IS PORT(CLK :IN STD_LOGIC; DATA: in STD_LOGIC_VECTOR (15 DOWNTO 0); CAT:OUT STD_LOGIC_VECTOR(0 TO 3); DISPLAY:OUT STD_LOGIC_VECTOR(16 DOWNTO 0); END LEDXIANSHI; ARCHITECTURE BEHAVIORAL OF LEDXIANSHI IS signal NUM0,NUM1,NUM2,NUM3: STD_LOG

34、IC_VECTOR(3 DOWNTO 0); SIGNAL DISNUM:STD_LOGIC_VECTOR(16 DOWNTO 0); SIGNAL I1:INTEGER RANGE 0 TO 3; BEGIN NUM0<=DATA(3 DOWNTO 0);NUM1<=DATA(7 DOWNTO 4);NUM2<=DATA(11 DOWNTO 8);NUM3<=DATA(15 DOWNTO 12); DISPLAY<=DISNUM; PROCESS(CLK) BEGIN IF(RISING_EDGE(CLK)THEN IF(I1=3)THEN I1<=0;

35、ELSE I1<=I1+1; END IF; END IF; END PROCESS; PROCESS(I1) BEGIN CASE I1 IS WHEN 0=>CAT<="1110" CASE NUM0 IS WHEN "0000"=>DISNUM<="00000000011111111" WHEN OTHERS=>DISNUM<="01111111100000000" END CASE; WHEN 1=> CAT<="1101" CASE

36、 NUM1 IS WHEN "0000"=>DISNUM<="00000000011111111" WHEN OTHERS=>DISNUM<="01111111100000000" END CASE; WHEN 2=> CAT<="1011" CASE NUM2 IS WHEN "0000"=>DISNUM<="00000000011111111" WHEN OTHERS=>DISNUM<="0111111

37、1100000000" END CASE; WHEN 3=> CAT<="0111" CASE NUM3 IS WHEN "0000"=>DISNUM<="00000000011111111" WHEN OTHERS=>DISNUM<="01111111100000000" END CASE; END CASE; END PROCESS; END BEHAVIORAL;數(shù)碼管顯示library IEEE;use IEEE.STD_LOGIC_1164.ALL;use I

38、EEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity KeyScan isport(RESET:in std_logic;CLK:in std_logic; -基本時(shí)鐘源6MHzKeyIn:in std_logic_vector(3 downto 0);-column列KeyOut:out std_logic_vector(3 downto 0); -row行LED_A: out std_logic; -4位數(shù)碼管引腳LED_B: out std_logic;LED_C: out std_logic;LED_D: out

39、std_logic;LED_E: out std_logic;LED_F: out std_logic;LED_G: out std_logic;LED_VCC1: out std_logic; -時(shí)十位LED_VCC2: out std_logic; -時(shí)個(gè)位LED_VCC3: out std_logic; -分十位LED_VCC4: out std_logic; -分個(gè)位LED_TimePoint:out std_logic; -冒號LED_Point:out std_logic; -小數(shù)點(diǎn) LED_EN1:out std_logic -小數(shù)點(diǎn) );end KeyScan;architec

40、ture Behavioral of KeyScan issignal timecnt:integer range 0 to 100000; -分頻計(jì)數(shù)器,用來得到10ms時(shí)鐘signal time10ms:std_logic;-10ms時(shí)鐘signal scanvalue : std_logic_vector(3 downto 0);-記錄掃描數(shù)據(jù)signal combvalue : std_logic_vector(7 downto 0);-KeyIn、KeyOut組合值signal cpy_scanvalue : std_logic_vector(3 downto 0);-備份掃描數(shù)據(jù)s

41、ignal count:integer range 0 to 60000;-分頻器,產(chǎn)生毫秒時(shí)鐘基準(zhǔn)signal scancnt:integer range 0 to 3;-LED掃描輪轉(zhuǎn)signal Data0:integer range 0 to 9; beginLED_EN1<='0'-進(jìn)程1:產(chǎn)生20ms時(shí)鐘process( CLK,RESET)beginif RESET='0' then time10ms<='0'-初始化elsif CLK'event and CLK='1' thentimecnt&

42、lt;=timecnt+1;if timecnt=100000 then time10ms<=not time10ms; timecnt<=0;end if;end if;end process;-進(jìn)程2:鍵盤掃描輸出process( time10ms,RESET)beginif RESET='0' then scanvalue<="0001"combvalue<="00000000"Data0<=0;-初始化elsif time10ms'event and time10ms='1'

43、then-每10ms進(jìn)行一次鍵盤掃描KeyOut<=scanvalue; -輸出掃描值 cpy_scanvalue<=scanvalue; -備份掃描值,為了進(jìn)程3對掃描結(jié)果進(jìn)行比較 case scanvalue is -掃描值移位when "0001" => scanvalue<="0010"when "0010" => scanvalue<="0100"when "0100" => scanvalue<="1000"when

44、 "1000" => scanvalue<="0001"when others => scanvalue<="0001" end case;combvalue<= (KeyIn & cpy_scanvalue); -組合鍵盤掃描的輸入和輸出 case combvalue is -翻譯掃描結(jié)果when "00010001" => Data0<=1; -對應(yīng)鍵盤“1”when "00100001" => Data0<=2; -對應(yīng)鍵盤“2

45、”when "01000001" => Data0<=3; -對應(yīng)鍵盤“3”when "00010010" => Data0<=4; -對應(yīng)鍵盤“4”when "00100010" => Data0<=5; -對應(yīng)鍵盤“5”when "01000010" => Data0<=6; -對應(yīng)鍵盤“6”when "00010100" => Data0<=7; -對應(yīng)鍵盤“7”when "00100100" => Da

46、ta0<=8; -對應(yīng)鍵盤“8”when "01000100" => Data0<=9; -對應(yīng)鍵盤“9”when "00011000" => Data0<=0; -對應(yīng)鍵盤“0”when others => null; -無鍵盤按下 end case;end if;end process;-數(shù)碼管掃描 process(CLK,RESET)-時(shí)鐘進(jìn)程,產(chǎn)生各種時(shí)鐘信號beginif RESET='0' then NULL;elsif CLK'event and CLK='1' t

47、hen count<=count+1;if count=60000 then count<=0;if scancnt>3 then scancnt<=0; else scancnt<=scancnt+1;end if;end if; end if;end process;-數(shù)碼管掃描 process(CLK, RESET)begin-LED_VCC信號是1有效,其余信號均為0有效,中間的冒號兩個(gè)點(diǎn)分別由VCC2和VCC3控制if RESET='0' then LED_A<='1'LED_B<='1'LED_C<='1'LED_D<='1'LED_E<='1'LED_F<='1'LED_G<='1'LED_VCC1<='0'LED_VCC2<='0' LED_VCC3<='0'LED_VCC4<='0'LED_TimePoint<='1'LED_Po

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論