電子密碼鎖proteus仿真設(shè)計報告_第1頁
電子密碼鎖proteus仿真設(shè)計報告_第2頁
電子密碼鎖proteus仿真設(shè)計報告_第3頁
電子密碼鎖proteus仿真設(shè)計報告_第4頁
電子密碼鎖proteus仿真設(shè)計報告_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 中國海洋大學(xué)單片機課程實驗設(shè)計報告設(shè)計題目:電子鎖密碼proteus仿真計姓名: 班級: 學(xué)號:任課教師: 課時: 一、 實驗設(shè)計功能描述本設(shè)計采用單片機為主控芯片,結(jié)合外圍電路,組成*電子密碼鎖,用戶想要打開鎖,必先通過提供的鍵盤輸入正確的密碼才能將鎖打開,密碼輸入錯誤有提示,為了提高安全性,當(dāng)密碼輸入錯誤三次將報警。密碼可以由用戶自己修改設(shè)定,鎖打開后才能修改密碼。修改密碼之前必須再次輸入密碼,在輸入新密碼時候需要二次確認,以防止誤操作。二、 設(shè)計所用原器件主控芯片AT89S51、4*4 矩陣按鍵、 LCD1602 顯示器 、蜂鳴器 、24c04a芯片、存儲芯片AT24C02、晶體振蕩器

2、三、 硬件電路設(shè)計1、鍵盤輸入部分由于本設(shè)計所用到的按鍵數(shù)量較多而不適合用獨立按鍵式鍵盤。采用的是矩陣式按鍵鍵盤,它由行線和列線組成,也稱行列式鍵盤,按鍵位于行列的交叉點上,密碼鎖的密碼由鍵盤輸入完成,與獨立式按鍵鍵盤相比,要節(jié)省很多I/O口。2、密碼存儲部分用EPROM芯片AT24C02存儲密碼。AT24C02是美國Atmel公司的低功耗CMOS型E2PROM,內(nèi)含256×8位存儲空間,具有工作電壓寬(2.55.5 V)、擦寫次數(shù)多(大于10000次)、寫入速度快(小于10 ms)、抗干擾能力強、數(shù)據(jù)不易丟失、體積小等特點。而且他是采用了I2C總線式進行數(shù)據(jù)讀寫的串行器件,占用很少

3、的資源和IO線,并且支持在線編程,進行數(shù)據(jù)實時的存取十分方便。3、晶振部分AT89S51引腳XTAL1和XTAL2與晶體振蕩器及電容C2、C1按圖4.5所示方式連接。晶振、電容C1C2及片內(nèi)與非門(作為反饋、放大元件)構(gòu)成了電容三點式振蕩器,振蕩信號頻率與晶振頻率及電容C1、C2的容量有關(guān),但主要由晶振頻率決定,范圍在033MHz之間,電容C1、C2取值范圍在530pF之間。根據(jù)實際情況,本設(shè)計中采用12MHZ做為系統(tǒng)的外部晶振。電容取值為20pF。4、顯示部分為了提高密碼鎖的密碼顯示效果能力。本設(shè)計的顯示部分由液晶顯示器LCD1602取代普通的數(shù)碼管來完成。只有按下鍵盤上的開啟按鍵后,顯示器

4、才處于開啟狀態(tài)。同理只有按下關(guān)閉按鍵后顯示器才處于關(guān)閉狀態(tài)。否則顯示器將一直處于初始狀態(tài),當(dāng)需要對密碼鎖進行開鎖時,按下鍵盤上的開鎖按鍵后利用鍵盤上的數(shù)字鍵09輸入密碼,每按下一個數(shù)字鍵后在顯示器上顯示一個*,輸入多少位就顯示多少個*。5、報警部分報警部分由陶瓷壓電發(fā)聲裝置及外圍電路組成,加電后不發(fā)聲,當(dāng)有鍵按下時,“叮”聲,每按一下,發(fā)聲一次,密碼正確時,不發(fā)聲直接開鎖,當(dāng)密碼輸入錯誤時,單片機的P2.1引腳為低電平,三極管T3導(dǎo)通轟鳴器發(fā)出噪鳴聲報警。6、開鎖部分開鎖控制電路的功能是當(dāng)輸入正確的密碼后將鎖打開。系統(tǒng)使用單片機其中一引腳線發(fā)出信號,經(jīng)三極管放大后,由繼電器驅(qū)動電磁閥動作將鎖打

5、開。用戶通過鍵盤任意設(shè)置密碼,并儲存在EEPROM中作為鎖碼指令。四、 軟件設(shè)計本系統(tǒng)軟件設(shè)計由主程序、初始化程序、LCD顯示程序、鍵盤掃描程序、鍵功能程序、密碼設(shè)置程序、EEPROM讀寫程序和延時程序等組成。主要程序設(shè)計流程圖如下所示:五、 仿真抓圖1、輸入原始密碼:2輸入正確:3.輸入錯誤:六、 設(shè)計體會設(shè)計剛開始時,我感到茫然不知從何下手,對程序的總體思路也缺乏了解。后來在老師的指導(dǎo)下,漸漸有了思路知道大體的框架。之后又參考了有關(guān)的書籍和資料,慢慢的經(jīng)過兩三周的時間才把程序調(diào)試好,理清仿真圖的出口與入口。在仿真方面因為程序的思路都理清了,所以只要按要求調(diào)用器件連接好電路,并且與KILL

6、軟件進行互接,功能比較順利的就實現(xiàn)了,沒有出現(xiàn)太大的問題。設(shè)計很小,可是在這過程中我學(xué)會了很多課本上學(xué)不到的知識。也明白書本的知識永遠不夠,我們自己要學(xué)會自學(xué)。同時對于學(xué)工科的學(xué)生還是要多多動手,在調(diào)試硬件時很多東西是要靠經(jīng)驗來檢查電路的問題,而且動手經(jīng)驗也可以免去很多不必要的錯誤。七、 設(shè)計程序ORG 0000h; LJMP start; ORG 000bh;中斷T0 入口地址 LJMP intermit_t0;調(diào)用中斷服務(wù)程序清指示燈 ORG 001bh;中斷T1 入口地址 LJMP intermit_t1;初始化喇叭 ORG 0030h; start: MOV sp,#60h;設(shè)棧底 l

7、call sys_initialization;調(diào)用系統(tǒng)初始化程序 ; ;主程序 main0: lcall strat_display;液晶最初顯示的程序 main: MOV 52h,#0; 52h 判斷輸入錯誤次數(shù)儲存地址 setb led;使指示燈處于亮的狀態(tài) setb tr0;開啟定時器 lcall key;掃描鍵值 cjne a,#'A',next1;輸入A 設(shè)置密碼 LJMP set_password;設(shè)置密碼程序 next1: cjne a,#'B',next2;輸入B 輸入密碼 LJMP input_password; 輸入密碼程序 next2:

8、ajmp main; ; 系統(tǒng)初始化 sys_initialization: clr led;使指示燈處于初始滅的狀態(tài) clr open;繼電器的初始化 clr speaker;喇叭的初始化 MOV 34h,#'1' MOV 35h,#'2' MOV 36h,#'3' MOV 37h,#'4' MOV 38h,#'5' MOV 39h,#'6'34h39h 存放初始密碼 MOV r7,#12; MOV r0,#40h;設(shè)置新密碼存儲的首地址 loop: MOV r0,#10h; inc r0; dj

9、nz r7,loop;密碼鍵值存放區(qū)清零完畢 lcall delay0_1s; MOV p0,#03h;液晶的控制代碼 call write_instruction; 液晶軟復(fù)位 MOV p0,#01h; call write_instruction;清屏 MOV p0,#3fh;設(shè)置單片機與LCD 接口數(shù)據(jù)位為8 位;顯示行數(shù)為2 行,字型為5*10 call write_instruction; MOV p0,#0fh;整體開顯示,顯示光標(biāo)光標(biāo)字符位爍 call write_instruction; MOV p0,#06h;光標(biāo)右移整體顯示不移動 UnRegistered call wri

10、te_instruction;液晶初始化完畢 MOV r4,#10; MOV tmod,#11h; MOV th0,#3ch; MOV tl0,#0b0h; setb ea;允許開中斷 setb et0;定時器T0,0.5S 定時中斷初始化完畢 ret;系統(tǒng)初始化完畢 ; 中斷服務(wù)程序 intermit_t0: push acc; push psw; MOV th0,#3ch; MOV tl0,#0b0h;初值的設(shè)置 MOV r4,#10; djnz r4,return; cpl led; return: pop psw; pop acc; reti; intermit_t1: push ac

11、c; push psw; MOV th1,#9eh; MOV tl1,#58h;初值設(shè)置 djnz r4,return_t1; cpl led; cpl speaker; MOV r4,#10; return_t1:pop psw; pop acc; reti; ; 鍵盤掃描; key: call ks;調(diào)用行掃描程序 jnz k1;判斷是否有按鍵按下,若A 不等于0按鍵按下 jmp key;A 等于零再次掃描取值 k1: call delay;調(diào)用延時子程序 call ks;調(diào)用掃描程序 jnz k2; jmp key; k2: clr tr0;關(guān)閉計時器 clr led; MOV r2,#

12、0feh;行掃描初值為"0FE", 從0 行開始逐行掃描 MOV r6,#00h;設(shè)置行號初始值為"00" k3: MOV a,r2;取行掃描字 MOV p2,a;行掃描字送至P2 口 MOV a,p2;到P2 取值 jb acc.4,l1;判斷A 取列值,第0 列有鍵按下嗎?若;ACC.4=0 說明有按鍵按下 MOV a,#0;將第0 列首號"00"送到A LJMP lk;轉(zhuǎn)至鍵號計算程序 l1: jb acc.5,l2;第1 列有鍵按下嗎?若ACC.5=0 說明有;按鍵按下 MOV a,#4;將第1 列首號"04&quo

13、t;送到A LJMP lk;轉(zhuǎn)至鍵號計算程序 l2: jb acc.6,l3;第2 列有鍵按下嗎?若ACC.6=0 說明有按鍵按下 MOV a,#8;將第2 列首號"08"送到A LJMP lk;轉(zhuǎn)至鍵號計算程序 l3: jb acc.7,next_key;第3 列有鍵按下嗎?若ACC.7=0 ;說明有按鍵按下 MOV a,#12;將第3 列首號"12"送到A lk: add a,r6;按鍵號=行號+列首號(A) MOV r6,a; k4: call ks;調(diào)用掃描子程序(等待按鍵釋放) jnz k4; MOV a,r6; MOV dptr,#table

14、0; MOVc a,a+dptr; MOV 50h,a; 查表取值存入50h,保護鍵值 ret; next_key: inc r6;行號加1 MOV a,r2;行掃描字送至A jnb acc.7,key;判斷4 行都掃描完了UnRegisteredrl a;若未掃描完將行掃描字左移 MOV r2,a;行掃描字送至R2,為掃描下一行做準(zhǔn)備 jmp k3;循環(huán)繼續(xù)掃描下一行 ; ks: MOV p2,#0f0h;送初值到P2 口進行掃描,將列線P2.4P2.7 設(shè)置為低電平 MOV a,p2;將掃描的值輸入A xrl a,#0f0h;屏蔽與行按鍵無關(guān)的4 位,有任意鍵按下時,A 不等于0 ret;

15、 ; 設(shè)置密碼程序 set_password: call clear_display;調(diào)用LCD 清零顯示程序 MOV dptr,#table4; 查表液晶顯示'INPUT PASSWROD: ' call input_hint;LCD 顯示要顯示的信息 MOV r0,#40h;輸入密碼的儲存首地址 call password;調(diào)用原始密碼 jbc returnbit,set_password;先輸入原密碼完畢 MOV r5,#6; MOV r0,#40h;輸入的密碼的首地址 MOV r1,#34h;原始密碼的首地址 input_compere: MOV a,r0; xrl a

16、,r1;用異或進行比較輸入密碼和原密碼 jnz input_error;輸入密碼與原密碼不一致時跳至input_error inc r0; inc r1; nop; nop; djnz r5,input_compere;驗證輸入密碼完畢 jmp set_password0; input_error: setb speaker;蜂鳴器響 setb led;指示燈亮 call clear_display;清屏 MOV dptr,#table5; 查表顯示'PASSWORD ERROR! ' call input_hint; call delay1_5s; clr speaker;關(guān)

17、蜂鳴器 clr led;指示燈滅 inc 52h;密碼錯誤次數(shù)加1 MOV a,52h; cjne a,#3,set_password; sjmp $;輸入密碼錯誤次數(shù)超過3 次, 鎖死 set_password0: call clear_display;清屏 MOV dptr,#table2;顯示設(shè)置密碼信息 call input_hint;調(diào)用LCD 顯示程序 MOV r0,#40h; call password;輸入密碼顯示程序 jbc returnbit,set_password; 第一次輸入新密碼完畢 call clear_display;清屏 MOV dptr,#table3;提示

18、再次輸入密碼信息 call input_hint;LCD 顯示 call delay1_5s;延時 ;顯示再次輸入新密碼完畢 call clear_display;清屏 MOV dptr,#table4;提示輸入密碼信息 call input_hint;調(diào)用LCD 顯示程序 MOV r0,#46h;第二次輸入密碼的首地址 call password; jbc returnbit,set_password; 第二次輸入新密碼完畢 MOV r5,#6; MOV r0,#40h; MOV r1,#46h; set_compere: MOV a,r0; xrl a,r1; jnz set_error;

19、顯示設(shè)置錯誤信息 inc r0; inc r1; UnRegistereddjnz r5,set_compere; MOV 34h,40h; MOV 35h,41h; MOV 36h,42h; MOV 37h,43h; MOV 38h,44h; MOV 39h,45h; ;存入新密碼完畢 jmp main0;設(shè)置新密碼成功,返主程序 set_error: setb speaker;蜂鳴器響 setb led;指示燈亮 call clear_display;清屏 MOV dptr,#table5; call input_hint; call delay1_5s; clr speaker;蜂鳴器關(guān)

20、 clr led;指示燈滅 LJMP set_password0;前后兩次輸入新密碼不一致,返回重設(shè) ;輸入密碼開鎖程序 input_password: call clear_display;清屏 MOV dptr,#table4; 查表顯示'INPUT PASSWROD: ' call input_hint;調(diào)用顯示程序 MOV r0,#40h; call password;調(diào)用原密碼 jbc returnbit,input_password; 輸入原密碼完畢 MOV r5,#6; MOV r0,#40h;輸入密碼的首地址 MOV r1,#34h;原始密碼的首地址 input

21、_compere0: MOV a,r0; xrl a,r1;用異或判斷輸入密碼是否與原始密碼一樣 jnz input_error22;判斷密碼有誤 inc r0; inc r1; nop; nop; djnz r5,input_compere0;驗證輸入碼完畢 jmp display_right;調(diào)用密碼正確息 input_error22: setb speaker;蜂鳴器響 setb led;指示燈亮 call clear_display;清屏 MOV dptr,#table5;調(diào)用密碼錯誤的顯示信息 call input_hint;顯示子程序 call delay1_5s;延時 clr s

22、peaker;蜂鳴器關(guān) clr led;指示燈滅 inc 52h;輸入密碼次數(shù)加1 MOV a,52h; cjne a,#3,input_password; sjmp $;輸入密碼錯誤超過3 次,鎖死 display_right: call clear_display;清屏 MOV dptr,#table6;密碼正確顯示信息 call input_hint;顯示輸入密碼正確提示完畢 setb open; 開鎖 next_key1:call key; nop; nop; cjne a,#'F',next_key1; clr open; 按下關(guān)鎖鍵,關(guān)鎖 jmp main0; 返回

23、主程序 ;主程序的子程序 strat_display: MOV p0,#80h;第一行顯示地址 call write_instruction;調(diào)用寫指令程序 MOV dptr,#table1; call input_hint;調(diào)用顯示子程序 MOV p0,#0c0h;第二行顯示地址 call write_instruction;調(diào)用寫指令程序 MOV dptr,#table11; call input_hint;調(diào)用顯示子程序 ret; clear_display: MOV display,#01h;LCD 屏幕清零 call write_instruction; MOV p0,#06h; c

24、all write_instruction; ret; input_hint: MOV r5,#16;要顯示的字符個數(shù)(液晶行為16 位) MOV a,#00h;查詢的初值 all_or_not: MOVc a,a+dptr; MOV display,a; call writedata;調(diào)用寫數(shù)據(jù) inc dptr; clr a; nop; nop; djnz r5,all_or_not; ret; password: MOV r5,#6;密碼個數(shù) MOV r1,#0c0h;LCD 第二行顯示地址 MOV a,r1; MOV p0,a; call write_instruction;調(diào)用LCD

25、 初始化程序 loop1: call key; nop; nop; cjne a,#'C',next_to;如果按鍵為C 時,按鍵標(biāo)志為1 setb returnbit;2.0 位置一 jmp endt; next_to: MOV a,50h; MOV r0,a; MOV display,#'*'a; 輸入鍵盤的密碼值顯示為"*" call writedata;調(diào)用寫數(shù)據(jù)指令初始化程序 inc r1; inc r0; djnz r5,loop1; endt: ret; ;寫數(shù)據(jù)指令 writedata: SETB rs;選擇數(shù)據(jù)寄存器 CLR rw;選擇寫操作 clr en;使能端初始化 setb en;使能端置1 nop; nop; clr en; call delay; ret; ;寫指令 write_instruction: CLR rs;選擇指令寄存器 CLR rw;選擇寫操作 clr en;使能端初始化 setb en;使能端置1 nop; nop; clr en; call delay;調(diào)用延時子程序 ret; ;延時程序 delay1_

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論