




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、基于FPGA 數(shù)字密碼鎖 板子使用的是DE2頂層topmodule lock(reset,clk,row,col,mm0,mm1,mm2,mm3,led1,led2,led3,set_flog);input clk,reset;input 3:0row;output wire 3:0 col;output wire 6:0 mm0,mm1,mm2,mm3;output reg led1, led2,led3;wire 3:0key_value;reg 3:0 temp_key;reg 3:0 m0,m1,m2,m3;reg 3:0 m_0,m_1,m_2,m_3;reg 5:0 state;r
2、eg 2:0 wei;wire key_valid;reg 1:0count_wrong;output reg set_flog;parameter valid =6'b000000, set =6'b000001, collection_mm =6'b000010, cmd =6'b000100, collection =6'b001000, wrong =6'b010000, correct =6'b100000, die_lock =6'b000011, lock =6'b000111; always (posedg
3、e clk or negedge reset)begin if(!reset) begin state<=6'b000000;wei<=0; led3<=0;set_flog<=0;led1<=0; led2<=0; m0<=15;m1<=15;m2<=15;m3<=15; end else begin case(state) valid : if(key_valid) begin temp_key<=key_value; state<=collection; end else state<=valid; c
4、ollection : begin if(key_value>=0&&key_value<=9) begin if(led1&&(!set_flog)/開啟狀態(tài) 不能按數(shù)字鍵 state<=valid; else if(!key_valid)&&(wei<5) begin led2<=0; state<=collection_mm; wei<=wei+1'b1; end else state<=collection; end else if(!key_valid) state<=cmd
5、; endcollection_mm: begin case(wei) 1:m0<=temp_key; 2:m1<=temp_key; 3:m2<=temp_key; 4:m3<=temp_key; endcase state<=valid; endcmd : begin case(temp_key) 15:if(!led1) begin m0<=15;m1<=15;m2<=15;m3<=15;/* clear state<= valid; wei<=0; led2<=0; led1<=0; end else sta
6、te<= valid; 14:if(led1) state<= valid; else if(wei) /back delete begin case(wei) 1:m0<=15; 2:m1<=15; 3:m2<=15; 4:m3<=15; endcase wei<=wei-1'b1; state<=valid; led2<=0; end else state<=valid; 13: if(set_flog)/保存密碼 begin set_flog<=0;led1<=0;m_0<=m0;m_1<=m1;
7、m_2<=m2;m_3<=m3;state<=lock;end else if(m0=m_0)&&(m1=m_1)&&(m2=m_2)&&(m3=m_3)/compare begin state<=correct;m0<=15;m1<=15;m2<=15;m3<=15; end else begin state<=wrong;count_wrong<=count_wrong+1;end 12: state<=lock; 10: if(led1) /set begin set_flo
8、g<=1; wei<=0; m0<=15;m1<=15;m2<=15;m3<=15; state<=valid; end default:state<=valid; endcaseendcorrect :begin /open led1<=1; state<=valid; count_wrong<=0; end wrong :begin led2<=1;state<=valid;led1<=0; if(count_wrong=3) /lock die begin count_wrong<=0; state
9、<=die_lock; end endlock :begin led1<=0;wei<=0;led2<=0; m0<=15;m1<=15;m2<=15;m3<=15; set_flog<=0; state<=valid;enddie_lock:led3<=1; endcaseendendwire 15:0 mm=m3,m2,m1,m0; key key_scan(reset,clk,row,col,key_value,key_valid);display dis_u1(clk,mm,mm3,mm2,mm1,mm0);endmod
10、ule鍵盤掃描模塊module key(reset,clk,row,col,key_value,key_flag);input clk,reset;input 3:0 row;/hangoutput reg 3:0 col;/lieoutput reg 3:0 key_value;output reg key_flag;reg 3:0 row_reg;reg 3:0 col_reg;reg 19:0 count;reg 2:0 state;reg clk_500khz;always (posedge clk or negedge reset)if(!reset) begin clk_500kh
11、z<=0;count<=0; endelse if(count>=5000) begin clk_500khz<=clk_500khz;count<=0;endelse count<=count + 1'b1;always (posedge clk_500khz or negedge reset)begin if(!reset)begin col<=0;state<=0;row_reg<=0;col_reg<=0;end else begin case(state) 0:begin col<=0; key_flag<
12、;=0; if(row3:0!=4'b1111) begin state<=1;col3:0<=4'b1110; end else state<=0; end 1: if(row3:0!=4'b1111) state<=5; else begin state<=2;col<=4'b1101;end 2: if(row3:0!=4'b1111) state<=5; else begin state<=3;col<=4'b1011;end 3: if(row3:0!=4'b1111) st
13、ate<=5; else begin state<=4;col<=4'b0111;end 4: if(row3:0!=4'b1111) state<=5; else state<=0; 5: if(row3:0!=4'b1111) begin col_reg<=col; row_reg<=row; state<=5; key_flag<=1; end else state <=0;endcaseendendalways(clk or col_reg or row_reg or key_value)begin i
14、f(!reset) key_value<=0; else if(key_flag=1'b1) begin case(col_reg,row_reg) 8'b1110_1110:key_value<=1; 8'b1110_1101:key_value<=2; 8'b1110_1011:key_value<=3; 8'b1110_0111:key_value<=10;/a 8'b1101_1110:key_value<=4; 8'b1101_1101:key_value<=5; 8'b1101
15、_1011:key_value<=6; 8'b1101_0111:key_value<=11;/b 8'b1011_1110:key_value<=7; 8'b1011_1101:key_value<=8; 8'b1011_1011:key_value<=9; 8'b1011_0111:key_value<=12;/c 8'b0111_1110:key_value<=15;/* 8'b0111_1101:key_value<=0; 8'b0111_1011:key_value<
16、=14;/# 8'b0111_0111:key_value<=13;/d endcase endendendmodule顯示模塊module display(clk,mm,wei0,wei1,wei2,wei3);input 15:0mm;input clk;output reg 6:0 wei0,wei1,wei2,wei3;always (clk)begin case(mm3:0)4'b0000:wei0<=7'b 1000000; 4'b0001:wei0<=7'b 1111001; 4'b0010:wei0<=7&
17、#39;b 0100100; 4'b0011:wei0<=7'b 0110000; 4'b0100:wei0<=7'b 0011001; 4'b0101:wei0<=7'b 0010010; 4'b0110:wei0<=7'b 0000010; 4'b0111:wei0<=7'b 1111000; 4'b1000:wei0<=7'b 0000000; 4'b1001:wei0<=7'b 0011000;4'b1010:wei0<
18、=7'b 0001000; 4'b1011:wei0<=7'b 0000011; 4'b1100:wei0<=7'b 1000110; 4'b1101:wei0<=7'b 0100001; 4'b1110:wei0<=7'b 0000110; 4'b1111:wei0<=7'b 1000000; /4'b1111:wei0<=7'b 0001110;endcase case(mm7:4)4'b0000:wei1<=7'b 100000
19、0; 4'b0001:wei1<=7'b 1111001; 4'b0010:wei1<=7'b 0100100; 4'b0011:wei1<=7'b 0110000; 4'b0100:wei1<=7'b 0011001; 4'b0101:wei1<=7'b 0010010; 4'b0110:wei1<=7'b 0000010; 4'b0111:wei1<=7'b 1111000; 4'b1000:wei1<=7'b 00
20、00000; 4'b1001:wei1<=7'b 0011000;4'b1010:wei1<=7'b 0001000; 4'b1011:wei1<=7'b 0000011; 4'b1100:wei1<=7'b 1000110; 4'b1101:wei1<=7'b 0100001; 4'b1110:wei1<=7'b 0000110; 4'b1111:wei1<=7'b 1000000; /4'b1111:wei1<=7'
21、b 0001110; endcase case(mm11:8)4'b0000:wei2<=7'b 1000000; 4'b0001:wei2<=7'b 1111001; 4'b0010:wei2<=7'b 0100100; 4'b0011:wei2<=7'b 0110000; 4'b0100:wei2<=7'b 0011001; 4'b0101:wei2<=7'b 0010010; 4'b0110:wei2<=7'b 0000010; 4
22、39;b0111:wei2<=7'b 1111000; 4'b1000:wei2<=7'b 0000000; 4'b1001:wei2<=7'b 0011000;4'b1010:wei2<=7'b 0001000; 4'b1011:wei2<=7'b 0000011; 4'b1100:wei2<=7'b 1000110; 4'b1101:wei2<=7'b 0100001; 4'b1110:wei2<=7'b 0000110; 4'b1111:wei2<=7'
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年貴州省安全員考試題庫
- 2025年吉林省安全員B證考試題庫
- 重慶工商大學(xué)派斯學(xué)院《酒店?duì)I銷》2023-2024學(xué)年第二學(xué)期期末試卷
- 青島港灣職業(yè)技術(shù)學(xué)院《口腔設(shè)備學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 武漢東湖學(xué)院《社會哲學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年海南省建筑安全員-C證考試(專職安全員)題庫附答案
- 南京信息工程大學(xué)《少兒體操與健美操》2023-2024學(xué)年第二學(xué)期期末試卷
- 南京審計(jì)大學(xué)金審學(xué)院《生物合成實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣東青年職業(yè)學(xué)院《建筑法規(guī)1》2023-2024學(xué)年第二學(xué)期期末試卷
- 武漢生物工程學(xué)院《婦女健康與康復(fù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 員工互評表(含指標(biāo))
- 美國電話區(qū)號一覽表
- 【MOOC】英語口語進(jìn)階-南京大學(xué) 中國大學(xué)慕課MOOC答案
- 2024-2030年中國干細(xì)胞美容產(chǎn)業(yè)競爭格局及投資戰(zhàn)略研究報(bào)告
- 《霉菌的形態(tài)和結(jié)構(gòu)》課件
- 人群聚集或集會事故應(yīng)急處理預(yù)案(5篇)
- 陜西省咸陽市2023-2024學(xué)年高一上學(xué)期期末考試 數(shù)學(xué) 含答案
- 期末試題-2024-2025學(xué)年人教PEP版英語六年級上冊 (含答案)
- 知識產(chǎn)權(quán)師招聘面試題及回答建議(某大型央企)
- 科技結(jié)合的小學(xué)種植園活動方案
- 2024小學(xué)語文課標(biāo)培訓(xùn)
評論
0/150
提交評論