單片機課程設(shè)計-電子密碼鎖-實驗報告-_第1頁
單片機課程設(shè)計-電子密碼鎖-實驗報告-_第2頁
單片機課程設(shè)計-電子密碼鎖-實驗報告-_第3頁
單片機課程設(shè)計-電子密碼鎖-實驗報告-_第4頁
單片機課程設(shè)計-電子密碼鎖-實驗報告-_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、單片機課程設(shè)計電子密碼鎖實驗報告學(xué)院:電子信息工程學(xué)院班級:自*姓名:* 學(xué)號:*指導(dǎo)教師:*單片機課程設(shè)計電子密碼鎖實驗報告(一)實驗?zāi)康?、了解電子密碼鎖工作原理和八段LED數(shù)碼管顯示原理。2、掌握LED數(shù)碼管顯示器與單片機接口電路設(shè)計方法。3、掌握實現(xiàn)密碼鎖功能的編程方法。(二)設(shè)計實現(xiàn)功能(1) 由程序設(shè)定初始密碼,密碼輸入正確時鎖打開,指示燈亮,發(fā)出“叮咚”的聲音;密碼輸入不正確時,指示燈閃亮四次,發(fā)出“嘀嘀嘀滴”報警聲。(2) 具有保護密碼的功能,輸入密碼在數(shù)碼管上顯示可改為“88888”的方式,防止別人偷窺密碼。(3) 具有修改密碼的功能,密碼輸入錯誤可按DEL鍵進行刪除。(4)

2、 具有防止多次試探密碼的電子密碼鎖并加報警功能,密碼輸入錯誤超過三次,將一直發(fā)出“滴滴滴滴?!眻缶?。(5) 具有設(shè)定新密碼的功能,輸入密碼后按CHG鍵,密碼將被重新設(shè)定。(三)整體電路設(shè)計思路核心用單片機AT89S52來實現(xiàn)此實驗的要求。用4*4鍵盤來輸入密碼。 每個按鍵有它的行值和列值,行值和列值的組合就是識別這個按鍵的編碼。矩陣的行線和列線分別通過兩并行接口和CPU通信。每個按鍵的狀態(tài)同樣需變成數(shù)字量“0”和“1”,開關(guān)的一端(列線)通過電阻接VCC,而接地是通過程序輸出數(shù)字“0”實現(xiàn)的。鍵盤處理程序的任務(wù)是:確定有無鍵按下,判斷哪一個鍵按下,鍵的功能是什么;還要消除按鍵在閉合或斷開時的

3、抖動。兩個并行口中,一個輸出掃描碼,使按鍵逐行動態(tài)接地,另一個并行口輸入按鍵狀態(tài),由行掃描值和回饋信號共同形成鍵編碼而識別按鍵,通過軟件查表,查出該鍵的功能。 用8個7段數(shù)碼管來顯示密碼。數(shù)碼管的顯示用掃描的方式,利用動態(tài)接口采用各數(shù)碼管循環(huán)輪流顯示的方法,當(dāng)循環(huán)顯示頻率較高時,利用人眼的暫留特性,看不出閃爍顯示現(xiàn)象,這種顯示需要一個接口完成字形碼的輸出(字形選擇),另一接口完成各數(shù)碼管的輪流點亮(數(shù)位選擇)。 在進行數(shù)碼顯示的時候,要對顯示單元開辟8個顯示緩沖區(qū),每個顯示緩沖區(qū)裝有顯示的不同數(shù)據(jù)即可。 對于顯示的字形碼數(shù)據(jù)我們采用查表方法來完成。(四)設(shè)計總框圖89S52單片機數(shù)碼管顯示電路

4、矩陣鍵盤控制報警電路復(fù)位電路電源LED指示電路圖1總體設(shè)計框圖(五)按鍵說明按鍵鍵名功能說明19鍵數(shù)字輸入密碼C鍵退格鍵DEL取消剛才輸入的密碼D鍵清除密碼鍵CLEAR將數(shù)碼管上顯示的數(shù)據(jù)清空E密碼重置鍵CHG密碼更改F確認鍵ENTER密碼輸入完成(六)仿真原理圖(七)程序框圖開始系統(tǒng)初始化提示輸入密碼鍵盤掃描有鍵按下數(shù)字鍵09退格鍵C密碼重置D確認鍵E燈亮緊接著發(fā)出開門的聲“叮咚”存儲鍵值刷新LED輸出數(shù)據(jù)清楚上次數(shù)字鍵輸入燈閃四次,發(fā)出報警聲“滴”錯誤3次報警,并鎖定鍵盤密碼判斷正確?YYNNNYNYYNNY(八)制作過程中所遇到的問題及解決辦法 調(diào)試時發(fā)現(xiàn)數(shù)碼管一閃一閃的顯示,程序剛開始

5、的是掃描8次數(shù)碼管才顯示,最后改成掃描4次數(shù)碼管才顯示,這樣動態(tài)顯示的數(shù)碼管顯示看起來不會晃眼睛了。 (九)體會與總結(jié)通過本次實驗,我對單片機有了更一步的認識,以前學(xué)習(xí)的都只是書本上的知識,對單片機的認識也只是停留課本。這次單片機課程設(shè)計,從選題,查資料,畫電路圖,編程,Proteus仿真,焊板子,調(diào)試。在這段單片機課程設(shè)計時間里,覺得自己很忙碌但很充實,有時很抓狂,因為程序的設(shè)計但很快樂。在實驗過程中遇到一些困難,比如蜂鳴器不按照設(shè)定的程序發(fā)出聲音,最后經(jīng)過和同學(xué)的幫忙,發(fā)現(xiàn)是蜂鳴器的控制三極管接錯了,應(yīng)該接PNP9012接成了NPN9013。以前模擬電路仿真用的是Multisum,這次單片

6、機課程設(shè)計顯然不再適合,因為有很多元器件Multisum都不包括,接著我開始學(xué)習(xí)Proteus仿真軟件,最后利用Proteus畫出了自己仿真圖。最后密碼鎖設(shè)計成功。這次實驗我動手能力得到很大的鍛煉,受益匪淺,呼吁學(xué)校應(yīng)該多開設(shè)類似課程,鍛煉學(xué)生的能力。(十)附件:主要程序#include unsigned char ps5=1,2,3,4,5;/程序預(yù)先設(shè)定的密碼 unsigned char code dispbit=0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f; /數(shù)碼管顯示位unsigned char code dispcode=0x3f,0x06,0x

7、5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71, 0x00,0x40,0x73,0xff; /每個數(shù)碼管顯示碼 共陰極字形碼unsigned char dispbuf8=18,16,16,16,16,16,16,16; /顯示緩沖 unsigned char dispcount; /數(shù)碼管顯示計數(shù)unsigned char flashcount; /掃描次數(shù)計數(shù)unsigned char temp; unsigned char key; /按鍵(0 1 2 3 4 5 6 7 8 9 ENTER DEL

8、)unsigned char keycount1;/按鍵計數(shù) unsigned char keycount2;/按鍵計數(shù) unsigned char pslen=5; /密碼位數(shù)unsigned char getps5;/鍵盤輸入密碼儲存數(shù)組 bit keyoverflag; /鍵值溢出標志bit errorflag; /錯誤標志位bit rightflag; /正確標志位unsigned int second3;/聲音unsigned int aa,bb; unsigned int cc,dd; bit okflag; /ok標志位bit alarmflag; /報警標志位unsigned

9、char oka,okb; void main(void) unsigned char i,j; TMOD=0x01;/to工作方式1 /重置定時500us TH0=(65536-500)/256; TL0=(65536-500)%256; TR0=1; /啟動計數(shù)器0 ET0=1; EA=1; while(1) if(dd0;i-) for(j=248;j0;j-); /延時2.48ms temp=P3; temp=temp & 0x0f;/取出低4位 if (temp!=0x0f) /有按鍵按下 temp=P3; temp=temp & 0x0f;/取出低4位 switch(temp) c

10、ase 0x0e: key=1; break; case 0x0d: key=5; break; case 0x0b: key=9; break; case 0x07: key=12; break; temp=P3; if(key=0) & (key10) if(keycount15) getpskeycount1=key; keycount1+; if(keycount26) keycount2=6; keyoverflag=1;/key overflow 鍵值溢出 輸入密碼長度超過 else if(key=12)/delete key 刪除鍵值 if(keycount10)&(keycou

11、nt20) keycount1-;keycount2-; getpskeycount1=0; /最近1次數(shù)入的數(shù)值清0 dispbufkeycount2+2=16; else keyoverflag=1; /未輸入密碼,按到功能鍵,報錯!嘀一聲。 else if(key=13)/clear 密碼for(i=0;i6;i+)dispbufi+2=16; else if(key=14)/change ps 修改密碼for(i=0;i5;i+)psi=getpsi;getpsi=0;keycount1=0;keycount2=0; else if(key=15)/enter key 進入鍵值 if(

12、keycount1!=pslen) errorflag=1; rightflag=0; second3=0; keycount1=0; keycount2=0; dd+; else for(i=0;i0;i-) for(j=248;j0;j-); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) case 0x0e: key=2; break; case 0x0d: key=6; break; case 0x0b: key=0; break; case 0x07: key=13;

13、 break; temp=P3; if(key=0) & (key10) if(keycount15) getpskeycount1=key; keycount1+; if (keycount26) keycount2=6; keyoverflag=1;/key overflow 鍵值溢出 else if(key=12)/delete key 刪除鍵值 if(keycount10)&(keycount20) keycount1-; keycount2-; getpskeycount1=0; dispbufkeycount2+2=16; else keyoverflag=1; else if(k

14、ey=13)/clear 密碼for(i=0;i6;i+)dispbufi+2=16; else if(key=14)/change ps 修改密碼for(i=0;i5;i+)psi=getpsi; getpsi=0; keycount1=0;keycount2=0; else if(key=15)/enter key 進入鍵值 if(keycount1!=pslen) errorflag=1; rightflag=0; second3=0; keycount1=0; keycount2=0; dd+; else for(i=0;i0;i-) for(j=248;j0;j-); temp=P3

15、; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) case 0x0e: key=3; break; case 0x0d: key=7; break; case 0x0b: key=10; break; case 0x07: key=14; break; /開始處 temp=P3; if(key=0) & (key10) if(keycount15) getpskeycount1=key; keycount1+; if(keycount26) keycount2=6; keyoverflag=1

16、;/key overflow 鍵值溢出 else if(key=12)/delete key 刪除鍵值 if(keycount10)&(keycount20) keycount1-; keycount2-; getpskeycount1=0; dispbufkeycount2+2=16; else keyoverflag=1; else if(key=13)/clear 密碼for(i=0;i6;i+)dispbufi+2=16; else if(key=14)/change ps 修改密碼for(i=0;i5;i+)psi=getpsi;getpsi=0;keycount1=0;keycou

17、nt2=0; else if(key=15)/enter key 進入鍵值 if(keycount1!=pslen) errorflag=1; rightflag=0; second3=0; keycount1=0; keycount2=0; dd+; else for(i=0;i0;i-) for(j=248;j0;j-); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) case 0x0e: key=4; break; case 0x0d: key=8; break; ca

18、se 0x0b: key=11; break; case 0x07: key=15; break; temp=P3; if(key=0) & (key10) if(keycount15) getpskeycount1=key; keycount1+; if(keycount26) keycount2=6; keyoverflag=1;/key overflow 鍵值溢出 else if(key=12)/delete key 刪除鍵值 if(keycount10)&(keycount20) keycount1-; keycount2-; getpskeycount1=0; dispbufkeyc

19、ount2+2=16; else keyoverflag=1; else if(key=13)/clear 密碼for(i=0;i6;i+)dispbufi+2=16; else if(key=14)/change ps 修改密碼for(i=0;i5;i+)psi=getpsi;getpsi=0;keycount1=0;keycount2=0; else if(key=15)/enter key if(keycount1!=pslen) errorflag=1; rightflag=0; second3=0; keycount1=0; keycount2=0; dd+; else for(i=0;i5;i+) if(getpsi!=psi) i=keycount1; errorflag=1; rightflag=0; second3=0; keycount1=0; keycount2=0;dd+; goto a2; /開始處 errorflag=0; rightflag=1; keycount1=0; keycount2=0;a2: i=keycount1; temp=temp & 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f; keyoverflag=0;/? elsebb+; if(bb=8000)

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論