基于單片機的電子密碼鎖實驗報告_第1頁
基于單片機的電子密碼鎖實驗報告_第2頁
基于單片機的電子密碼鎖實驗報告_第3頁
基于單片機的電子密碼鎖實驗報告_第4頁
基于單片機的電子密碼鎖實驗報告_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

.PAGE.201X年小學期單片機設計實驗報告題目:基于16F877的電子密碼鎖班級:班內(nèi)序號:實驗組號:學生__指導期中檢查教師評語指導教師簽字:年月日基于16F877的電子密碼鎖實驗摘要在日常的生活和工作中,住宅與部門的安全防范、單位的文件檔案、財務報表以及一些個人資料的保存多以加鎖的辦法來解決。若使用傳統(tǒng)的機械式鑰匙開鎖,人們常需攜帶多把鑰匙,使用極不方便,且鑰匙丟失后安全性即大打折扣。具有防盜報警等功能的電子密碼鎖代替密碼量少、安全性差的機械式密碼鎖已是必然趨勢。隨著科學技術的不斷發(fā)展,人們對日常生活中的安全保險器件的要求越來越高。為滿足人們對鎖的使用要求,增加其安全性,用密碼代替鑰匙的密碼鎖應運而生。密碼鎖具有安全性高、成本低、功耗低、易操作、記住密碼即可開鎖等優(yōu)點。 目前使用的電子密碼鎖大部分是基于單片機技術,以單片機為主要器件,其編碼器與解碼器的生成為軟件方式。本系統(tǒng)由16F877單片機系統(tǒng)〔主要是16F877單片機最小系統(tǒng)、4×4矩陣鍵盤、LCD1602顯示和報警系統(tǒng)等組成,具有設置、修改四位用戶密碼、輸入提示音、密碼錯誤報警等功能〔本設計由單片機控制LCD顯示,密碼正確顯示passwordok!密碼錯誤顯示wrong,pleasereset!用戶reset后進行重新輸入。由單片機控制矩陣鍵盤含有0-9數(shù)字鍵和A-F功能鍵。按F鍵,則進行密碼重置功能。本系統(tǒng)成本低廉,功能實用?!菜误w五號AbstractIndailylifeandwork,thedepartmentofhousingandsecurity,unitdocuments,financialstatementsandsomepersonalinformationtosavemoreinordertolockthewaystosolve.Ifusethetraditionalmechanicalkeytoopenthelock,peopleoftenneedtocarrymultiplekeys,useveryconvenient,andthekeymissingaftersecurityiscompromised.Withanti-theftalarmfunctionsuchaselectroniccombinationlockinsteadofpasswordquantityislittle,security,poormechanicalcombinationlockisinevitabletrend.Withthecontinuousdevelopmentofscienceandtechnology,peopleindailylifethedemandishigherandhighersafetyinsurancedevice.Tomeettherequirementsofpeopleontheuseofthelock,increaseitssafety,usethepasswordinsteadofthekeycombinationlockarisesatthehistoricmoment.Combinationlockwithhighsafety,lowcost,lowpowerconsumption,easyoperation,rememberpasswordlock,etc.Currentlyuseelectroniccombinationlockismostlybasedonsinglechipmicrocomputertechnology,singlechipmicrocomputerasthemaindevice,theencoderanddecoderforsoftware.Thissystemconsistsof16f877microcontrollersystem<mainlyminimum16f877microcontrollersystem>,4*4matrixkeyboard,LCD1602displayandalarmsystem,etc,andhassetupfour,modifyuserpassword,password,inputprompterroralarmfunctions<thisdesignbythesinglechipmicrocomputercontrolLCDdisplay,thepasswordcorrectlydisplaythepasswordok!Wrongpasswordshowswrong,bothpleasereset!Theusertoenteragainafterreset.Bysingle-chipmicrocomputercontrolmatrixkeyboardcontains0-9numberkeysandA-Ffunctionkeys.PresstheFkey,thencarriesonthepasswordresetfunction>.Thissystemislowcost,functionandpractical.WMfunctiontocontrolitsturn.Andthisissocallednavigatingaptitudinally.關鍵字單片機——microcontroller芯片——CMOSchip 16F877一、PIC16F877系列單片機簡介PIC16F87X<含873P874P876P877>是美國微芯<Microchip>公司推出的高性能單片機,除具有單片機的通用資源外,該系列單片機還采用哈佛總線結構、二級指令流水線取指方式、精簡指令集<RISC>和內(nèi)部具有E2PROM數(shù)據(jù)存儲器及FLASH結構的程序存儲器、僅35條單字節(jié)單周期指令、在系統(tǒng)串行編程技術和在線調(diào)試技術。因此采用該系列單片機的產(chǎn)品具有低成本、低功耗、高速度、高可靠性、體積小、性價比高等特點。其芯片引腳圖如圖1所示。另外,它內(nèi)部的E2PROM數(shù)據(jù)存儲器不僅具有掉電保護數(shù)據(jù)的功能,更重要的是它的讀寫操作均是由單片機內(nèi)部時序控制,即外部電路無法對其進行訪問,因而具有極高的數(shù)據(jù)保密性,這使得PIC16F87X在加密性產(chǎn)品如智能IC卡、密碼鎖、電子防盜系統(tǒng)等方面有很廣泛的應用。二.實驗論證與比較1.總體系統(tǒng)組成鍵盤電路單片鍵盤電路單片機16F877電源電路LCD顯示電路復位電路LCD顯示電路復位電路開/關鎖電路晶振電路開/關鎖電路晶振電路顯示電路報警電路顯示電路報警電路電路主要分8個模塊,即電源電路、復位電路、晶振電路、報警電路、鍵盤電路、LCD顯示電路、開/關鎖電路、聲音電路。由單片機主要控制、實現(xiàn)密碼鎖功能。1電源電路模塊從電源插座進來的是9V直流電,經(jīng)一片三端穩(wěn)壓器,將其轉換為5V的穩(wěn)定電壓。電源濾波的重要性,一個電路板的濾波特性如果不好,嚴重時將會影響整個電路板不能正常工作。所以要注意一個大電容和一個小電容并聯(lián)濾波,電源線要粗,走線要合理,模擬電路最好大面積接地。其主要作用是為電路提供工作電壓,保證電路正常工作。1.2復位電路模塊主要用于對電路進行手工復位。Osc15vGND空Osc15vGND空晶振主要就是為單片機工作提供一定的工作頻率。1.4報警電路模塊主要是用于密碼輸入錯誤時,鳴聲提醒用戶密碼輸入錯誤。1.5鍵盤電路模塊鍵盤采用4*4矩陣鍵盤,行線連接到RD端口,列線連接到RB接口。16個鍵分別為0~9的數(shù)字鍵及A~F的功能鍵,F鍵則表示密碼重置。鍵盤主要用于輸入密碼或進行功能、狀態(tài)切換。1.6LCD顯示電路模塊當通電時LCD顯示password,當密碼輸入正確顯示ok,不正確則顯示wrong,pleasereset。1.7開/關鎖電路模塊當密碼輸入正確時,單片機輸出高電平,則繼電器打開,表示鎖開。1.8顯示電路模塊1kohm1kohm主要用于密碼輸入時,顯示已輸入。當密碼輸入正確則燈一直亮,輸入錯誤則一直閃爍,提醒用戶。三系統(tǒng)總體設計3.1系統(tǒng)框圖燈提示燈提示其他Nreset報警Y開始初始化模式選擇識別按鍵密碼輸入燈提示燈提示其他Nreset報警Y開始初始化模式選擇識別按鍵密碼輸入手動清除密碼比較開門舊密碼輸入新密碼輸入存入緩存區(qū)再次輸入密碼重新輸入設置完返開始NFN0-E00Y3.2電路總圖四.硬件連接五.調(diào)試過程 程序開始就進入main,執(zhí)行初始設置后,進行LCD屏幕初始化。單片機就開始執(zhí)行鍵盤掃描是否有輸入階段,根據(jù)采集到的鍵盤信息,做出分析,進行密碼重置或者輸入密碼比較。調(diào)試過程中我遇到了很多問題,也就是在這些問題中,逐漸學會了MPLAB的使用和用匯編語言編程。在此,列舉幾個調(diào)試過程中比較典型的問題。5.1對屏幕初始化不能完成在小學期的出始階段,我和搭檔秦永寧決定在最開始階段,我倆都進行程序編程,對匯編語言進行學習。我們分模塊編寫,我進行屏幕初始化程序編寫,搭檔秦永寧寫鍵盤掃描程序。在后面階段,永寧主軟件,我主硬件。 剛開始學單片機以及匯編語言的時候,翻看過的內(nèi)容,也只是記得一點點皮毛,沒有真正的理解。特別是看手冊時看不懂,學校發(fā)的兩本書上并沒有初始化的程序。所以請教同學,同學告訴我,手冊上有初始化的過程,需要認真看看。所以我就認真的看了一個早上,終于把手冊上的內(nèi)容看懂了。所以就開始編程,在編程的過程中調(diào)試buildall時,有出現(xiàn)了一些error,通過改正,buildall終于成功,初始化程序完成?!参逄査误w初始化程序如下:;***************初始化程序***********************CHUSHIHUAMOVLWD'16';MOVWFCOUNT;初始化count為16DELAY16MS;延時16msCALLDELAY1MS;DECFSZCOUNT,1;〔1/2count送count并判斷結果是否為0?;是0,跳出循環(huán),否循環(huán)回去GOTODELAY16MS;MOVLWB'00111000';將38h送到wMOVWFPORTD;將38h送到portdMOVLWB'00000010';將02h送到wMOVWFPORTE;將02h送到porte,寫數(shù)據(jù)BCFPORTE,1;將porte的第一個位置清0MOVLWD'5';將5送到wMOVWFCOUNT;將count賦值為5DELAY5MS;延時1msCALLDELAY1MS;DECFSZCOUNT,1;GOTODELAY5MS;MOVLWB'00111000';將38h送到wMOVWFPORTD;將38h送到potdMOVLWB'00000010';將02h送到wMOVWFPORTE;將02h送到porte,寫數(shù)據(jù)BCFPORTE,1;將porte的第一個位置清0MOVLWD'3';MOVWFCOUNT;DELAY120US;延時120umCALLDELAY40US;DECFSZCOUNT,1;GOTODELAY120US;MOVLWB'00111000';MOVWFPORTD;MOVLWB'00000010';MOVWFPORTE;BCFPORTE,1;;*****************************************************************CALLDELAY40US;MOVLWB'00111000';MOVWFPORTD;MOVLWB'00000010';MOVWFPORTE;BCFPORTE,1;CALLDELAY40US;MOVLWB'00001000';將08h送到w,關顯示MOVWFPORTD;將o8h送到portdMOVLWB'00000010';將02h送到wMOVWFPORTE;將02h送到porteBCFPORTE,1;將porte的第一個位置清0CALLDELAY40US;MOVLWB'00000001';將01h送到w,清屏MOVWFPORTD;將o1h送到portdMOVLWB'00000010';MOVWFPORTE;將02h送到porteBCFPORTE,1;將porte的第一個位置清0CALLDELAY1MS;MOVLWD'16';MOVWFCOUNT;將count設置為16DELAY640US;延時640usCALLDELAY40US;DECFSZCOUNT,1;GOTODELAY640US;MOVLWB'00000110';將06h送到w,設置輸入方式MOVWFPORTD;MOVLWB'00000010';MOVWFPORTE;BCFPORTE,1;CALLDELAY40US;MOVLWB'00001101';將0DH送到w,*****MOVWFPORTD;將0DH送到portdMOVLWB'00000010';MOVWFPORTE;將02h送到porteBCFPORTE,1;將porte的第一個位置清05.2用EEPROM編寫密碼重置時,重置的密碼不能寫入EEPROM 在我們的實驗進行到一定階段,我去搭面包板,搭完后,我們將已經(jīng)編好的LCD顯示程序下載到單片機當中,加上電源,LCD顯示正確。所以我就趁著時間看書,當看到《PIC單片機實用教程——提高篇》第一章時,所以我就想嘗試著利用EEPROM編寫密碼重置問題。在編寫的過程中,為了調(diào)試方便,我就借用老師的實驗箱進行下載調(diào)試。而調(diào)試了好幾天,并沒有出現(xiàn)進展。所以就開始畫程序流程圖,畫完后對程序進行修改。當進行單步調(diào)試時,發(fā)現(xiàn)進行到查表程序時,程序下一步走得并不正確。請教老師后,把查表程序寫在了程序最前面,就解決了問題。可是用EEPROM寫入密碼還是不正確。由于時間問題,我就去焊接電路板了。到最后驗收時,老師讓我繼續(xù)編寫用EEPROM編寫密碼重置功能,當最后我想放棄,老師一直在鼓勵我,在不懈努力下以及老師的幫助下終于成功了。 這看似是一個小問題,但它卻告訴我,在學習單片機的過程中一點點微小的過失可能就會導致自己的程序看不到結果,不能忽略學習過程中的一點一滴疑問。也只有這樣才能真正學會、學到和學好知識。*************************EEPROM燒寫程序*******************************WRITEBSFSTATUS,RP0BSFSTATUS,RP1BTFSCEECON1,WRGOTO$-1BCFSTATUS,RP0MOVFADDKEY,0MOVWFEEADRMOVFKEY,0MOVWFEEDATABSFSTATUS,RP0BCFEECON1,EEPGDBSFEECON1,WRENMOVLW55HMOVWFEECON2MOVLW0AAHMOVWFEECON2BSFEECON1,WRBCFEECON1,WRENINCFADDKEY,1RETURN**********************EEPROM讀程序*********************************READBCFSTATUS,RP0BSFSTATUS,RP1MOVFADDR,0MOVWFEEADRBSFSTATUS,RP0BCFEECON1,EEPGDBSFEECON1,RDBCFSTATUS,RP0MOVFEEDATA,0MOVWFWORD_1RETURN5.3焊接電路時,電路焊接錯誤在最開始時,焊接電路,由于是第一次焊接電路,對電路焊接不太認真以及沒有做好準備,所以焊接好的電路并不出現(xiàn)正確的結果。對電路進行檢查時,發(fā)現(xiàn)電路焊接時電路焊接錯誤,用焊吸吸掉錫后,對電路進行改正,可是卻依然不出現(xiàn)正確結果。所以用萬用表對電路進行檢查,發(fā)現(xiàn)兩個結點之間電壓不應該相同,而測量結果卻一樣,改后卻依然一樣。所以決定重新焊接一塊板子,當?shù)诙K板子焊接完后,出現(xiàn)了正確結果。 這個小波折告訴我,知識的積累和掌握不能僅僅依靠課本,還要結合實踐進一步理解,這樣才能加深印象,融會貫通,也只有這樣才能真正學以致用。 這個小挫折告訴我只有聯(lián)系實際,在實踐中才能真正找出自己的錯誤,理論聯(lián)系實際才能真正學到知識。六.實驗心得體會對于整個實驗的心得體會,上面已經(jīng)提到很多了,不過,還是有好深刻的感覺和觸動。 其一,在小學期以前我沒有對單片機沒有任何概念。在剛剛接觸到單片機時,我可以說是一竅不通,甚至對于單片機究竟是什么也不能很精確地表達出來。經(jīng)過網(wǎng)上查詢以及了解,定下幾個想做的目標,經(jīng)過一個個篩選,最后確定我們做一個密碼鎖。說實在話,我當時心里也沒有太大的信心和勇氣,不過這些都得去學,所以就一頭扎進學習的過程。 其二,3星期單片機的學習讓我增強了自信心。學習單片機的過程中,我也不是沒有懷疑過自己的能力,而是我在學習的過程中,從對單片機的一無所知,對繁瑣的匯編語言的畏懼,到一步一步進行單步調(diào)試,再到能夠發(fā)現(xiàn)問題并經(jīng)過思考來解決問題,我感覺到自己在進步,也感受到只要每天努力一點點,希望就會再接近一點點,離成功的距離也就會再接近一點點,也就是這些一點點的努力和距離告訴我要繼續(xù)堅持,告訴我要相信自己,因為只有相信自己,不斷努力,才能戰(zhàn)勝自己的弱勢,得到自己想要的結果。 其三,我非常感謝向輔導我的幾位老師致謝,您們辛苦了!在學習的過程中,我發(fā)現(xiàn)了學習中的樂趣。 謝謝您們在我想放棄的時候還一直給我指導,給我鼓勵。七.參考文獻:PIC單片機實用教程——基礎篇〔五號宋體李學海北京航空航天大學出版社使用說明:的確是一本不可或缺的教材,本書列舉了很多實用的具有實戰(zhàn)意義的例子,單片機入門就是通過把這本書里的好例子一字一行敲進電腦去來實現(xiàn)的。PIC單片機實用教程——提高篇李學海北京航空航天大學出版社使用說明:繼承了前面基礎篇的風格,例子也具有實戰(zhàn)意義,主要講RA、TMR2的使用和CCP模塊的PWM脈寬調(diào)制功能。附錄:程序匯編代碼:LISTP=16F877,R=DEC;定義器件,默認為十進制#include<p16f877.inc>TMR0EQU01H;定義定時器/計數(shù)器0寄存地址PCLEQU02H;定義程序指針寄存器STATUSEQU3H;定義狀態(tài)寄存器地址OPTION_REGEQU81H;定義選項寄存地址INTCONEQU0BH;定義中斷控制寄存地址PORTBEQU6H;定義端口B的數(shù)據(jù)寄存器地址PORTCEQU7H;定義端口C的數(shù)據(jù)寄存器地址PORTDEQU8H;定義端口D的數(shù)據(jù)寄存器地址PORTEEQU9H;定義端口E的數(shù)據(jù)寄存器地址TRISCEQU87H;定義端口C的方向寄存器TRISAEQU85H;定義端口A的方向寄存器TRISBEQU86H;定義端口B的方向寄存器TRISDEQU88H;定義端口D的方向寄存器TRISEEQU89H;定義端口E的方向寄存器COUNTEQU20H;定義一個計數(shù)器變量寄存地址TMR0BEQUD'252';定義TMR0寄存地址初始值256-4=252>RP0EQU5H;定義狀態(tài)寄存器中的頁選位RP0T0IFEQU2;定義TMR0溢出標志位的位地址FEQU1;定義目標寄存器指示標號COUNT1EQU21H;定義計數(shù)器狀態(tài)變量COUNT2EQU23H;COUNT3EQU24H;COUNT4EQU25H;COUNT5EQU27H;COUNT6EQU28H;VALEQU30H;定義鍵盤的狀態(tài)變量WORD_1EQU22H;初始密碼WORD_2EQU26HWORD_3EQU2AHWORD_4EQU2BHKEY_1EQU47H;用戶輸入密碼KEY_2EQU48HKEY_3EQU49HKEY_4EQU4AHNEQU52H;定義外循環(huán)變量MMEQU53H;內(nèi)循環(huán)變量NTEMPEQU29HWEQU0;定義傳送目標寄存器為W的指示位FEQU1;定義傳送目標寄存器為RAM的指示位T0IFEQU2;定義TMR0中斷標志位的地址位T0IEEQU5;定義TMR0中斷矢能位的地址位INTEEQU4;定義外部中斷矢能位的地址位INTFEQU1;定義外部中斷標志位的地址位RBIFEQU0;定義RB口變化中斷標志位的位地址OPTION_REGEQU81H;定義選項寄存器地址OPTION_TEMPEQU0A6H;在bank1定義選項寄存器的備份寄存器地址SOUNDDELAY1EQU31H;聲音頻率變化計數(shù)器,從1.8~3.55KHZFRE_COUNTEQU32H;同一頻率的重復次數(shù)保存地址FRE_REPEATEQU33HSOUND_TEMPEQU34HTEMP1EQU35H;暫存寄存器S_LOOPEQU37H;93-47=46S_MAXEQU73H;最低頻率1.8K93*3=280US*2S_S_MINEQU36H;最高頻率3.55K47*3=140*2S_S_REPEATEQU4H;同一頻率重復次數(shù);**************************************************;**************************************************ORG000H;MAINNOPBSFSTATUS,RP0;文件寄存到BANK1MOVLW00H;將端口C的方向控制字先送到WMOVWFTRISC;然后再轉送到端口C的方向寄存器MOVLW0FFH;將端口B的方向控制字先送到WMOVWFTRISB;然后再轉送到端口B的方向寄存器MOVLW0FFH;將端口A的方向控制字先送到WMOVWFTRISA;然后再轉送到端口A的方向寄存器CLRFTRISD;CLRFTRISE;MOVLW02H;31HMOVWFOPTION_REG;設置分頻比"1:8"BCFSTATUS,RP0;恢復到文件寄存器BANK0CLRFPORTC;端口寄存器清0MOVLW31H;定義初始密碼MOVWFWORD_1;1MOVLW32HMOVWFWORD_2;2MOVLW33HMOVWFWORD_3;3MOVLW34HMOVWFWORD_4;4;************************************************CHUHUAMOVLWD'16';MOVWFCOUNT;初始化count為16DELAY16MS;延時16msCALLDELAY1MS;DECFSZCOUNT,1;〔1/2count送count并判斷結果是否為0?;是0,跳出循環(huán),否循環(huán)回去GOTODELAY16MS;MOVLWB'00111000';將38h送到wMOVWFPORTD;將38h送到portdMOVLWB'00000010';將02h送到wMOVWFPORTE;將02h送到porte,寫數(shù)據(jù)BCFPORTE,1;將porte的第一個位置清0MOVLWD'5';將5送到wMOVWFCOUNT;將count賦值為5DELAY5MS;延時1msCALLDELAY1MS;DECFSZCOUNT,1;GOTODELAY5MS;MOVLWB'00111000';將38h送到wMOVWFPORTD;將38h送到potdMOVLWB'00000010';將02h送到wMOVWFPORTE;將02h送到porte,寫數(shù)據(jù)BCFPORTE,1;將porte的第一個位置清0MOVLWD'3';MOVWFCOUNT;DELAY120US;延時120umCALLDELAY40US;DECFSZCOUNT,1;GOTODELAY120US;MOVLWB'00111000';MOVWFPORTD;MOVLWB'00000010';MOVWFPORTE;BCFPORTE,1;;*****************************************************************CALLDELAY40US;MOVLWB'00111000';MOVWFPORTD;MOVLWB'00000010';MOVWFPORTE;BCFPORTE,1;CALLDELAY40US;MOVLWB'00001000';將08h送到w,關顯示MOVWFPORTD;將o8h送到portdMOVLWB'00000010';將02h送到wMOVWFPORTE;將02h送到porteBCFPORTE,1;將porte的第一個位置清0CALLDELAY40US;MOVLWB'00000001';將01h送到w,清屏MOVWFPORTD;將o1h送到portdMOVLWB'00000010';MOVWFPORTE;將02h送到porteBCFPORTE,1;將porte的第一個位置清0CALLDELAY1MS;MOVLWD'16';MOVWFCOUNT;將count設置為16DELAY640US;延時640usCALLDELAY40US;DECFSZCOUNT,1;GOTODELAY640US;MOVLWB'00000110';將06h送到w,設置輸入方式MOVWFPORTD;MOVLWB'00000010';MOVWFPORTE;BCFPORTE,1;CALLDELAY40US;MOVLWB'00001101';將0DH送到w,*****MOVWFPORTD;將0DH送到portdMOVLWB'00000010';MOVWFPORTE;將02h送到porteBCFPORTE,1;將porte的第一個位置清0CALLDELAY40US;CALLPASSWORD;;************************************CALLKEYDOWNXORLW46HBTFSCSTATUS,2GOTOSETSMOVFTEMP,0MOVWFKEY_1GOTONUM2;****************************************************SETSCALLDELAY40US;MOVLWB'00000001';將0DH送到w,*****MOVWFPORTD;將0DH送到portdMOVLWB'00000010';MOVWFPORTE;將02h送到porteBCFPORTE,1MOVLWB'00000100'MOVWFPORTCCALLDELAY100MSMOVLWB'00000000'MOVWFPORTCCALLKEYDOWNMOVWFWORD_1CALLKEYDOWNMOVWFWORD_2CALLKEYDOWNMOVWFWORD_3CALLKEYDOWNMOVWFWORD_4CALLDELAY1MSCALLDELAY40US;MOVLWB'00000001';將0DH送到w,*****MOVWFPORTD;將0DH送到portdMOVLWB'00000010';MOVWFPORTE;將02h送到porteBCFPORTE,1CALLDELAY1MSCALLPASSWORDGOTONUM1;GOTOSTOP;************************************NUM1CALLKEYDOWNMOVWFKEY_1NUM2CALLKEYDOWNMOVWFKEY_2NUM3CALLKEYDOWNMOVWFKEY_3NUM4CALLKEYDOWNMOVWFKEY_4;;****************密碼比較*********************************************COMP1MOVFKEY_1,0XORWFWORD_1,0;第一位密碼比較BTFSSSTATUS,2;相同,則比較第二位GOTOWARN;COMP2MOVFKEY_2,0XORWFWORD_2,0;第一位密碼比較BTFSSSTATUS,2;相同,則比較第二位GOTOWARN;COMP3MOVFKEY_3,0XORWFWORD_3,0;第一位密碼比較BTFSSSTATUS,2;相同,則比較第二位GOTOWARN;COMP4MOVFKEY_4,0XORWFWORD_4,0;第一位密碼比較BTFSCSTATUS,2;相同,則比較第二位GOTOALLOWED;不同,則警告;**************警告*********************************WARN;顯示wrong,again;第三個燈閃爍幾下MOVLWB'00001111';MOVWFPORTCCALLDELAY100MS;閃爍間隔0.3sCALLDELAY100MSMOVLWB'00000000';第八個燈亮MOVWFPORTCCALLDELAY100MSMOVLWB'00001111';MOVWFPORTCCALLDELAY100MS;閃爍間隔0.3sCALLDELAY100MSMOVLWB'00000000';第八個燈亮MOVWFPORTCMOVLWB'00001111';MOVWFPORTCCALLDELAY100MS;閃爍間隔0.3sCALLDELAY100MSMOVLWB'00000000';第八個燈亮MOVWFPORTCGOTORESET;***************亮燈<開鎖>*************************************ALLOWEDMOVLWB'00001100';第八個燈亮MOVWFPORTC;JIDIANQIMOVLWB'10000000'MOVWFPORTB;OKMOVLWB'11000000';將01h送到w,清屏MOVWFPORTD;將o1h送到portdMOVLWB'00000010';MOVWFPORTE;將00H送到porteBCFPORTE,1;CALLDELAY1MSMOVLWB'01001000';MOVWFPORTDCALLENABLECALLDELAY1MSMOVLWB'01001111';OMOVWFPORTDCALLENABLECALLDELAY1MSMOVLWB'01001011';KMOVWFPORTDCALLENABLECALLDELAY1MSGOTOSTOP;********************************************************************KEYDOWNCLRFPORTD;將PORTD清零MOVFPORTB,0;ANDLW0FH;將0fh與w寄存器內(nèi)容相與,結果存入wXORLW0FHBTFSCSTATUS,2GOTOKEYDOWNBCFSTATUS,0COMFPORTDCALLTRANSLATEMOVFTEMP,0RETURN;*****************查表***************************CONVERT;查表程序ADDWFPCL,1;偏移量與pc相加TABLENOP;顯示碼,下同RETLW46H;FRETLW45H;ERETLW44H;DRETLW43H;CRETLW42H;BRETLW41H;ARETLW30H;0RETLW39H;9RETLW38H;8RETLW37H;7RETLW36H;6RETLW35H;5RETLW34H;4RETLW33H;3RETLW32H;2RETLW31H;1RETLW0FFH;黑方塊;*****************第二次檢測按鍵********************************TRANSLATERRFPORTD,1;對鍵盤進行列掃描,確定鍵值,高四位和第四位相加得valueMOVFPORTB,0ANDLW0FHXORLW0FHBTFSCSTATUS,2GOTOTRANSLATEMOVFPORTD,0ANDLW0F0HXORLW0F0HMOVWFVALMOVFPORTB,0ANDLW0FHXORLW0FHADDWFVAL,1CALLKEYUPCALLDELAY1MSRETURN;****************延時*****************************DELAY1MSMOVLWD'100';延遲1ms程序MOVWFCOUNT1;LOOP1MSNOPNOPNOPNOPNOPNOPNOPDECFSZCOUNT1,1;GOTOLOOP1MS;RETURN;********************************************DELAY40USMOVLWD'5';延遲40us程序MOVWFCOUNT2;LOOP40USNOPNOPNOPNOPNOPDECFSZCOUNT2,1;GOTOLOOP40US;NOPNOPRETURN;***************************************************KEYUPCLRFPORTD;檢測是否按鍵已經(jīng)松開,根據(jù)value及鍵盤的行列確定按下的鍵盤的鍵值MOVFPORTB,0ANDLW0FHXORLW0FHBTFSSSTATUS,2GOTOKEYUPCALLDELAY1MSMOVFPORTB,0ANDLW0FHXORLW0FHBTFSSSTATUS,2GOTOKEYUPCLRWBTFSCVAL,0ADDLW1BTFSCVAL,1ADDLW2BTFSCVAL,2ADDLW3BTFSCVAL,3ADDLW4BTFSCVAL,4ADDLW0BTFSCVAL,5ADDLW4BTFSCVAL,6ADDLW8BTFSCVAL,7ADDLWD'12'CALLCONVERTMOVWFTEMPGOTOXANSHIMOVLWB'10000000';第八個燈亮MOVWFPORTCRETURN;******************輸入密碼時顯示******************************XANSHIMOVLWB'000000001'MOVWFPORTC;第一個燈亮CALLDELAY100MSMOVLWB'00000000';MOVWFPORTCMOVLWB'00101010'MOVWFPORTD;顯示*MOVLWB'00000011';將03h存入wMOVWFPORTE;將03h存入porteBCFPORTE,1;將porte第一個位置清0CALLDELAY40US;CALLTONE500CALLTONE630RETURN;*************************************************PASSWORD;輸出password:;BSFPORTE,1MOVLWB'01010000';PMOVWFPORTDCALLENABLECALLDELAY1MSMOVLWB'01000001';AMOVWFPORTDCALLENABLECALLDELAY1MSMOVLWB'01010011';SMOVWFPORTDCALLENABLECALLDELAY1MSMOVLWB'01010011';SMOVWFPORTDCALLENABLECALLDELAY1MSMOVLWB'01010111';WMOVWFPORTDCALLENABLECALLDELAY1MSMOVLWB'01001111';OMOVWFPORTDCALLENABLECALLDELAY1MSMOVLWB'01010010';RMOVWFPORTDCALLENABLECALLDELAY1MSMOVLWB'01000100';DMOVWFPORTDCALLENABLECALLDELAY1MSMOVLWB'00111010';:MOVWFPORTDCALLENABLECALLDELAY1MSCALLDELAY1MSRETURN;***********PLEASERESET************************RESETCALLDELAY40US;MOVLWB'00000001';將0DH送到w,*****MOVWFPORTD;將0DH送到portdMOVLWB'00000010';MOVWFPORTE;將02h送到porteBCFPORTE,1;將porte的第一個位置清0MOVLWB'00100000';MOVWFPORTDCALLENABLECALLDELAY1MSMOVLWB'01010000';PMOVWFPORTDCALLENABLECALLDELAY1MSMOVLWB'01001100';LMOVWFPORTDCALLENABLECALLDELAY1MSMOVLWB'01000101';EMOVWFPORTDCALLENABLECALLDELAY1MSMOVLWB'01000001';AMOVWFPORTDCALLENABLECALLDELAY1MSMOVLWB'01010011';SMOVWFPORTDCALLENABLECALLDELAY1MSMOVLWB'01000101';EMOVWFPORTDCALLENABLECALLDELAY1MSMOVLWB'00100000';MOVWFPORTDCALLENABLECALLDELAY1MSMOVLWB'01010010';RMOVWFPORTDCALLENABLECALLDELAY1MSMOVLWB'01000101';EMOVWFPORTDCALLENABLECALLDELAY1MSMOVLWB'01010011';SMOVWFPORTDCALLENABLECALLDELAY1MSMOVLWB'01000101';EMOVWFPORTDCALLENABLECALLDELAY1MSMOVLWB'01010100';TMOVWFPORTDCALLENABLECALLDELAY1MSMOVLWB'00100001';!MOVWFPORTDCALLENABLECALLDELAY1MSCALLSPEAKERGOTOSTOP;**********************************************ENABLEMOVLWB'00000011';將03h存入wMOVWFPORTE;將03h存入porteNOPNOPNOPBCFPORTE,0CALLDELAY1MSRETURN;***********************************************DELAY100MSMOVLWD'133';外循環(huán)變量初始值經(jīng)W轉送MMOVWFMLOOP1MOVLWD'251';內(nèi)循環(huán)變量初始值經(jīng)W轉送NMOVWFNLOOP2DECFSZN,1;N-1=0?是!跳出內(nèi)層循環(huán)GOTOLOOP2;否!循環(huán)回去DECFSZM,1;M-1=0?是!跳出循環(huán)GOTOLOOP1;否!循環(huán)回去RETURN;返回調(diào)用程序;***************發(fā)聲1s<1s=10x<50ms+50ms>>***********TONE1SMOVLW.10;循環(huán)次數(shù)計數(shù)器賦予初值MOVWFCOUNT1;T1LOPCALLTONE630;CALLDELAY1MSCALLTONE630;DECFSZCOUNT1,F;循環(huán)次數(shù)遞減,為0,跳一步GOTOT1LOP;不為0,跳回RETURN;;*****低音調(diào)**************TONE500MOVLW.50;MOVWFCOUNT2;50=500hzx0.05sx2T5LOPBCFINTCON,T0IF;清除TMR0溢出中斷標志位MOVLW.190;256-125=131MOVWFTMR0;啟動定時器T5HEREBTFSSINTCON,T0IF;定時器溢出否GOTOT5HERE;否,循環(huán)檢測

溫馨提示

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

評論

0/150

提交評論