版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
.PAGE.201X年小學(xué)期單片機(jī)設(shè)計(jì)實(shí)驗(yàn)報(bào)告題目:基于16F877的電子密碼鎖班級(jí):班內(nèi)序號(hào):實(shí)驗(yàn)組號(hào):學(xué)生__指導(dǎo)期中檢查教師評(píng)語(yǔ)指導(dǎo)教師簽字:年月日基于16F877的電子密碼鎖實(shí)驗(yàn)摘要在日常的生活和工作中,住宅與部門(mén)的安全防范、單位的文件檔案、財(cái)務(wù)報(bào)表以及一些個(gè)人資料的保存多以加鎖的辦法來(lái)解決。若使用傳統(tǒng)的機(jī)械式鑰匙開(kāi)鎖,人們常需攜帶多把鑰匙,使用極不方便,且鑰匙丟失后安全性即大打折扣。具有防盜報(bào)警等功能的電子密碼鎖代替密碼量少、安全性差的機(jī)械式密碼鎖已是必然趨勢(shì)。隨著科學(xué)技術(shù)的不斷發(fā)展,人們對(duì)日常生活中的安全保險(xiǎn)器件的要求越來(lái)越高。為滿足人們對(duì)鎖的使用要求,增加其安全性,用密碼代替鑰匙的密碼鎖應(yīng)運(yùn)而生。密碼鎖具有安全性高、成本低、功耗低、易操作、記住密碼即可開(kāi)鎖等優(yōu)點(diǎn)。 目前使用的電子密碼鎖大部分是基于單片機(jī)技術(shù),以單片機(jī)為主要器件,其編碼器與解碼器的生成為軟件方式。本系統(tǒng)由16F877單片機(jī)系統(tǒng)〔主要是16F877單片機(jī)最小系統(tǒng)、4×4矩陣鍵盤(pán)、LCD1602顯示和報(bào)警系統(tǒng)等組成,具有設(shè)置、修改四位用戶密碼、輸入提示音、密碼錯(cuò)誤報(bào)警等功能〔本設(shè)計(jì)由單片機(jī)控制LCD顯示,密碼正確顯示passwordok!密碼錯(cuò)誤顯示wrong,pleasereset!用戶reset后進(jìn)行重新輸入。由單片機(jī)控制矩陣鍵盤(pán)含有0-9數(shù)字鍵和A-F功能鍵。按F鍵,則進(jìn)行密碼重置功能。本系統(tǒng)成本低廉,功能實(shí)用?!菜误w五號(hào)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.關(guān)鍵字單片機(jī)——microcontroller芯片——CMOSchip 16F877一、PIC16F877系列單片機(jī)簡(jiǎn)介PIC16F87X<含873P874P876P877>是美國(guó)微芯<Microchip>公司推出的高性能單片機(jī),除具有單片機(jī)的通用資源外,該系列單片機(jī)還采用哈佛總線結(jié)構(gòu)、二級(jí)指令流水線取指方式、精簡(jiǎn)指令集<RISC>和內(nèi)部具有E2PROM數(shù)據(jù)存儲(chǔ)器及FLASH結(jié)構(gòu)的程序存儲(chǔ)器、僅35條單字節(jié)單周期指令、在系統(tǒng)串行編程技術(shù)和在線調(diào)試技術(shù)。因此采用該系列單片機(jī)的產(chǎn)品具有低成本、低功耗、高速度、高可靠性、體積小、性價(jià)比高等特點(diǎn)。其芯片引腳圖如圖1所示。另外,它內(nèi)部的E2PROM數(shù)據(jù)存儲(chǔ)器不僅具有掉電保護(hù)數(shù)據(jù)的功能,更重要的是它的讀寫(xiě)操作均是由單片機(jī)內(nèi)部時(shí)序控制,即外部電路無(wú)法對(duì)其進(jìn)行訪問(wèn),因而具有極高的數(shù)據(jù)保密性,這使得PIC16F87X在加密性產(chǎn)品如智能IC卡、密碼鎖、電子防盜系統(tǒng)等方面有很廣泛的應(yīng)用。二.實(shí)驗(yàn)論證與比較1.總體系統(tǒng)組成鍵盤(pán)電路單片鍵盤(pán)電路單片機(jī)16F877電源電路LCD顯示電路復(fù)位電路LCD顯示電路復(fù)位電路開(kāi)/關(guān)鎖電路晶振電路開(kāi)/關(guān)鎖電路晶振電路顯示電路報(bào)警電路顯示電路報(bào)警電路電路主要分8個(gè)模塊,即電源電路、復(fù)位電路、晶振電路、報(bào)警電路、鍵盤(pán)電路、LCD顯示電路、開(kāi)/關(guān)鎖電路、聲音電路。由單片機(jī)主要控制、實(shí)現(xiàn)密碼鎖功能。1電源電路模塊從電源插座進(jìn)來(lái)的是9V直流電,經(jīng)一片三端穩(wěn)壓器,將其轉(zhuǎn)換為5V的穩(wěn)定電壓。電源濾波的重要性,一個(gè)電路板的濾波特性如果不好,嚴(yán)重時(shí)將會(huì)影響整個(gè)電路板不能正常工作。所以要注意一個(gè)大電容和一個(gè)小電容并聯(lián)濾波,電源線要粗,走線要合理,模擬電路最好大面積接地。其主要作用是為電路提供工作電壓,保證電路正常工作。1.2復(fù)位電路模塊主要用于對(duì)電路進(jìn)行手工復(fù)位。Osc15vGND空Osc15vGND空晶振主要就是為單片機(jī)工作提供一定的工作頻率。1.4報(bào)警電路模塊主要是用于密碼輸入錯(cuò)誤時(shí),鳴聲提醒用戶密碼輸入錯(cuò)誤。1.5鍵盤(pán)電路模塊鍵盤(pán)采用4*4矩陣鍵盤(pán),行線連接到RD端口,列線連接到RB接口。16個(gè)鍵分別為0~9的數(shù)字鍵及A~F的功能鍵,F鍵則表示密碼重置。鍵盤(pán)主要用于輸入密碼或進(jìn)行功能、狀態(tài)切換。1.6LCD顯示電路模塊當(dāng)通電時(shí)LCD顯示password,當(dāng)密碼輸入正確顯示ok,不正確則顯示wrong,pleasereset。1.7開(kāi)/關(guān)鎖電路模塊當(dāng)密碼輸入正確時(shí),單片機(jī)輸出高電平,則繼電器打開(kāi),表示鎖開(kāi)。1.8顯示電路模塊1kohm1kohm主要用于密碼輸入時(shí),顯示已輸入。當(dāng)密碼輸入正確則燈一直亮,輸入錯(cuò)誤則一直閃爍,提醒用戶。三系統(tǒng)總體設(shè)計(jì)3.1系統(tǒng)框圖燈提示燈提示其他Nreset報(bào)警Y開(kāi)始初始化模式選擇識(shí)別按鍵密碼輸入燈提示燈提示其他Nreset報(bào)警Y開(kāi)始初始化模式選擇識(shí)別按鍵密碼輸入手動(dòng)清除密碼比較開(kāi)門(mén)舊密碼輸入新密碼輸入存入緩存區(qū)再次輸入密碼重新輸入設(shè)置完返開(kāi)始NFN0-E00Y3.2電路總圖四.硬件連接五.調(diào)試過(guò)程 程序開(kāi)始就進(jìn)入main,執(zhí)行初始設(shè)置后,進(jìn)行LCD屏幕初始化。單片機(jī)就開(kāi)始執(zhí)行鍵盤(pán)掃描是否有輸入階段,根據(jù)采集到的鍵盤(pán)信息,做出分析,進(jìn)行密碼重置或者輸入密碼比較。調(diào)試過(guò)程中我遇到了很多問(wèn)題,也就是在這些問(wèn)題中,逐漸學(xué)會(huì)了MPLAB的使用和用匯編語(yǔ)言編程。在此,列舉幾個(gè)調(diào)試過(guò)程中比較典型的問(wèn)題。5.1對(duì)屏幕初始化不能完成在小學(xué)期的出始階段,我和搭檔秦永寧決定在最開(kāi)始階段,我倆都進(jìn)行程序編程,對(duì)匯編語(yǔ)言進(jìn)行學(xué)習(xí)。我們分模塊編寫(xiě),我進(jìn)行屏幕初始化程序編寫(xiě),搭檔秦永寧寫(xiě)鍵盤(pán)掃描程序。在后面階段,永寧主軟件,我主硬件。 剛開(kāi)始學(xué)單片機(jī)以及匯編語(yǔ)言的時(shí)候,翻看過(guò)的內(nèi)容,也只是記得一點(diǎn)點(diǎn)皮毛,沒(méi)有真正的理解。特別是看手冊(cè)時(shí)看不懂,學(xué)校發(fā)的兩本書(shū)上并沒(méi)有初始化的程序。所以請(qǐng)教同學(xué),同學(xué)告訴我,手冊(cè)上有初始化的過(guò)程,需要認(rèn)真看看。所以我就認(rèn)真的看了一個(gè)早上,終于把手冊(cè)上的內(nèi)容看懂了。所以就開(kāi)始編程,在編程的過(guò)程中調(diào)試buildall時(shí),有出現(xiàn)了一些error,通過(guò)改正,buildall終于成功,初始化程序完成?!参逄?hào)宋體初始化程序如下:;***************初始化程序***********************CHUSHIHUAMOVLWD'16';MOVWFCOUNT;初始化count為16DELAY16MS;延時(shí)16msCALLDELAY1MS;DECFSZCOUNT,1;〔1/2count送count并判斷結(jié)果是否為0?;是0,跳出循環(huán),否循環(huán)回去GOTODELAY16MS;MOVLWB'00111000';將38h送到wMOVWFPORTD;將38h送到portdMOVLWB'00000010';將02h送到wMOVWFPORTE;將02h送到porte,寫(xiě)數(shù)據(jù)BCFPORTE,1;將porte的第一個(gè)位置清0MOVLWD'5';將5送到wMOVWFCOUNT;將count賦值為5DELAY5MS;延時(shí)1msCALLDELAY1MS;DECFSZCOUNT,1;GOTODELAY5MS;MOVLWB'00111000';將38h送到wMOVWFPORTD;將38h送到potdMOVLWB'00000010';將02h送到wMOVWFPORTE;將02h送到porte,寫(xiě)數(shù)據(jù)BCFPORTE,1;將porte的第一個(gè)位置清0MOVLWD'3';MOVWFCOUNT;DELAY120US;延時(shí)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,關(guān)顯示MOVWFPORTD;將o8h送到portdMOVLWB'00000010';將02h送到wMOVWFPORTE;將02h送到porteBCFPORTE,1;將porte的第一個(gè)位置清0CALLDELAY40US;MOVLWB'00000001';將01h送到w,清屏MOVWFPORTD;將o1h送到portdMOVLWB'00000010';MOVWFPORTE;將02h送到porteBCFPORTE,1;將porte的第一個(gè)位置清0CALLDELAY1MS;MOVLWD'16';MOVWFCOUNT;將count設(shè)置為16DELAY640US;延時(shí)640usCALLDELAY40US;DECFSZCOUNT,1;GOTODELAY640US;MOVLWB'00000110';將06h送到w,設(shè)置輸入方式MOVWFPORTD;MOVLWB'00000010';MOVWFPORTE;BCFPORTE,1;CALLDELAY40US;MOVLWB'00001101';將0DH送到w,*****MOVWFPORTD;將0DH送到portdMOVLWB'00000010';MOVWFPORTE;將02h送到porteBCFPORTE,1;將porte的第一個(gè)位置清05.2用EEPROM編寫(xiě)密碼重置時(shí),重置的密碼不能寫(xiě)入EEPROM 在我們的實(shí)驗(yàn)進(jìn)行到一定階段,我去搭面包板,搭完后,我們將已經(jīng)編好的LCD顯示程序下載到單片機(jī)當(dāng)中,加上電源,LCD顯示正確。所以我就趁著時(shí)間看書(shū),當(dāng)看到《PIC單片機(jī)實(shí)用教程——提高篇》第一章時(shí),所以我就想嘗試著利用EEPROM編寫(xiě)密碼重置問(wèn)題。在編寫(xiě)的過(guò)程中,為了調(diào)試方便,我就借用老師的實(shí)驗(yàn)箱進(jìn)行下載調(diào)試。而調(diào)試了好幾天,并沒(méi)有出現(xiàn)進(jìn)展。所以就開(kāi)始畫(huà)程序流程圖,畫(huà)完后對(duì)程序進(jìn)行修改。當(dāng)進(jìn)行單步調(diào)試時(shí),發(fā)現(xiàn)進(jìn)行到查表程序時(shí),程序下一步走得并不正確。請(qǐng)教老師后,把查表程序?qū)懺诹顺绦蜃钋懊?就解決了問(wèn)題。可是用EEPROM寫(xiě)入密碼還是不正確。由于時(shí)間問(wèn)題,我就去焊接電路板了。到最后驗(yàn)收時(shí),老師讓我繼續(xù)編寫(xiě)用EEPROM編寫(xiě)密碼重置功能,當(dāng)最后我想放棄,老師一直在鼓勵(lì)我,在不懈努力下以及老師的幫助下終于成功了。 這看似是一個(gè)小問(wèn)題,但它卻告訴我,在學(xué)習(xí)單片機(jī)的過(guò)程中一點(diǎn)點(diǎn)微小的過(guò)失可能就會(huì)導(dǎo)致自己的程序看不到結(jié)果,不能忽略學(xué)習(xí)過(guò)程中的一點(diǎn)一滴疑問(wèn)。也只有這樣才能真正學(xué)會(huì)、學(xué)到和學(xué)好知識(shí)。*************************EEPROM燒寫(xiě)程序*******************************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焊接電路時(shí),電路焊接錯(cuò)誤在最開(kāi)始時(shí),焊接電路,由于是第一次焊接電路,對(duì)電路焊接不太認(rèn)真以及沒(méi)有做好準(zhǔn)備,所以焊接好的電路并不出現(xiàn)正確的結(jié)果。對(duì)電路進(jìn)行檢查時(shí),發(fā)現(xiàn)電路焊接時(shí)電路焊接錯(cuò)誤,用焊吸吸掉錫后,對(duì)電路進(jìn)行改正,可是卻依然不出現(xiàn)正確結(jié)果。所以用萬(wàn)用表對(duì)電路進(jìn)行檢查,發(fā)現(xiàn)兩個(gè)結(jié)點(diǎn)之間電壓不應(yīng)該相同,而測(cè)量結(jié)果卻一樣,改后卻依然一樣。所以決定重新焊接一塊板子,當(dāng)?shù)诙K板子焊接完后,出現(xiàn)了正確結(jié)果。 這個(gè)小波折告訴我,知識(shí)的積累和掌握不能僅僅依靠課本,還要結(jié)合實(shí)踐進(jìn)一步理解,這樣才能加深印象,融會(huì)貫通,也只有這樣才能真正學(xué)以致用。 這個(gè)小挫折告訴我只有聯(lián)系實(shí)際,在實(shí)踐中才能真正找出自己的錯(cuò)誤,理論聯(lián)系實(shí)際才能真正學(xué)到知識(shí)。六.實(shí)驗(yàn)心得體會(huì)對(duì)于整個(gè)實(shí)驗(yàn)的心得體會(huì),上面已經(jīng)提到很多了,不過(guò),還是有好深刻的感覺(jué)和觸動(dòng)。 其一,在小學(xué)期以前我沒(méi)有對(duì)單片機(jī)沒(méi)有任何概念。在剛剛接觸到單片機(jī)時(shí),我可以說(shuō)是一竅不通,甚至對(duì)于單片機(jī)究竟是什么也不能很精確地表達(dá)出來(lái)。經(jīng)過(guò)網(wǎng)上查詢以及了解,定下幾個(gè)想做的目標(biāo),經(jīng)過(guò)一個(gè)個(gè)篩選,最后確定我們做一個(gè)密碼鎖。說(shuō)實(shí)在話,我當(dāng)時(shí)心里也沒(méi)有太大的信心和勇氣,不過(guò)這些都得去學(xué),所以就一頭扎進(jìn)學(xué)習(xí)的過(guò)程。 其二,3星期單片機(jī)的學(xué)習(xí)讓我增強(qiáng)了自信心。學(xué)習(xí)單片機(jī)的過(guò)程中,我也不是沒(méi)有懷疑過(guò)自己的能力,而是我在學(xué)習(xí)的過(guò)程中,從對(duì)單片機(jī)的一無(wú)所知,對(duì)繁瑣的匯編語(yǔ)言的畏懼,到一步一步進(jìn)行單步調(diào)試,再到能夠發(fā)現(xiàn)問(wèn)題并經(jīng)過(guò)思考來(lái)解決問(wèn)題,我感覺(jué)到自己在進(jìn)步,也感受到只要每天努力一點(diǎn)點(diǎn),希望就會(huì)再接近一點(diǎn)點(diǎn),離成功的距離也就會(huì)再接近一點(diǎn)點(diǎn),也就是這些一點(diǎn)點(diǎn)的努力和距離告訴我要繼續(xù)堅(jiān)持,告訴我要相信自己,因?yàn)橹挥邢嘈抛约?不斷努力,才能戰(zhàn)勝自己的弱勢(shì),得到自己想要的結(jié)果。 其三,我非常感謝向輔導(dǎo)我的幾位老師致謝,您們辛苦了!在學(xué)習(xí)的過(guò)程中,我發(fā)現(xiàn)了學(xué)習(xí)中的樂(lè)趣。 謝謝您們?cè)谖蚁敕艞壍臅r(shí)候還一直給我指導(dǎo),給我鼓勵(lì)。七.參考文獻(xiàn):PIC單片機(jī)實(shí)用教程——基礎(chǔ)篇〔五號(hào)宋體李學(xué)海北京航空航天大學(xué)出版社使用說(shuō)明:的確是一本不可或缺的教材,本書(shū)列舉了很多實(shí)用的具有實(shí)戰(zhàn)意義的例子,單片機(jī)入門(mén)就是通過(guò)把這本書(shū)里的好例子一字一行敲進(jìn)電腦去來(lái)實(shí)現(xiàn)的。PIC單片機(jī)實(shí)用教程——提高篇李學(xué)海北京航空航天大學(xué)出版社使用說(shuō)明:繼承了前面基礎(chǔ)篇的風(fēng)格,例子也具有實(shí)戰(zhàn)意義,主要講RA、TMR2的使用和CCP模塊的PWM脈寬調(diào)制功能。附錄:程序匯編代碼:LISTP=16F877,R=DEC;定義器件,默認(rèn)為十進(jìn)制#include<p16f877.inc>TMR0EQU01H;定義定時(shí)器/計(jì)數(shù)器0寄存地址PCLEQU02H;定義程序指針寄存器STATUSEQU3H;定義狀態(tài)寄存器地址OPTION_REGEQU81H;定義選項(xiàng)寄存地址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;定義一個(gè)計(jì)數(shù)器變量寄存地址TMR0BEQUD'252';定義TMR0寄存地址初始值256-4=252>RP0EQU5H;定義狀態(tài)寄存器中的頁(yè)選位RP0T0IFEQU2;定義TMR0溢出標(biāo)志位的位地址FEQU1;定義目標(biāo)寄存器指示標(biāo)號(hào)COUNT1EQU21H;定義計(jì)數(shù)器狀態(tài)變量COUNT2EQU23H;COUNT3EQU24H;COUNT4EQU25H;COUNT5EQU27H;COUNT6EQU28H;VALEQU30H;定義鍵盤(pán)的狀態(tài)變量WORD_1EQU22H;初始密碼WORD_2EQU26HWORD_3EQU2AHWORD_4EQU2BHKEY_1EQU47H;用戶輸入密碼KEY_2EQU48HKEY_3EQU49HKEY_4EQU4AHNEQU52H;定義外循環(huán)變量MMEQU53H;內(nèi)循環(huán)變量NTEMPEQU29HWEQU0;定義傳送目標(biāo)寄存器為W的指示位FEQU1;定義傳送目標(biāo)寄存器為RAM的指示位T0IFEQU2;定義TMR0中斷標(biāo)志位的地址位T0IEEQU5;定義TMR0中斷矢能位的地址位INTEEQU4;定義外部中斷矢能位的地址位INTFEQU1;定義外部中斷標(biāo)志位的地址位RBIFEQU0;定義RB口變化中斷標(biāo)志位的位地址OPTION_REGEQU81H;定義選項(xiàng)寄存器地址OPTION_TEMPEQU0A6H;在bank1定義選項(xiàng)寄存器的備份寄存器地址SOUNDDELAY1EQU31H;聲音頻率變化計(jì)數(shù)器,從1.8~3.55KHZFRE_COUNTEQU32H;同一頻率的重復(fù)次數(shù)保存地址FRE_REPEATEQU33HSOUND_TEMPEQU34HTEMP1EQU35H;暫存寄存器S_LOOPEQU37H;93-47=46S_MAXEQU73H;最低頻率1.8K93*3=280US*2S_S_MINEQU36H;最高頻率3.55K47*3=140*2S_S_REPEATEQU4H;同一頻率重復(fù)次數(shù);**************************************************;**************************************************ORG000H;MAINNOPBSFSTATUS,RP0;文件寄存到BANK1MOVLW00H;將端口C的方向控制字先送到WMOVWFTRISC;然后再轉(zhuǎn)送到端口C的方向寄存器MOVLW0FFH;將端口B的方向控制字先送到WMOVWFTRISB;然后再轉(zhuǎn)送到端口B的方向寄存器MOVLW0FFH;將端口A的方向控制字先送到WMOVWFTRISA;然后再轉(zhuǎn)送到端口A的方向寄存器CLRFTRISD;CLRFTRISE;MOVLW02H;31HMOVWFOPTION_REG;設(shè)置分頻比"1:8"BCFSTATUS,RP0;恢復(fù)到文件寄存器BANK0CLRFPORTC;端口寄存器清0MOVLW31H;定義初始密碼MOVWFWORD_1;1MOVLW32HMOVWFWORD_2;2MOVLW33HMOVWFWORD_3;3MOVLW34HMOVWFWORD_4;4;************************************************CHUHUAMOVLWD'16';MOVWFCOUNT;初始化count為16DELAY16MS;延時(shí)16msCALLDELAY1MS;DECFSZCOUNT,1;〔1/2count送count并判斷結(jié)果是否為0?;是0,跳出循環(huán),否循環(huán)回去GOTODELAY16MS;MOVLWB'00111000';將38h送到wMOVWFPORTD;將38h送到portdMOVLWB'00000010';將02h送到wMOVWFPORTE;將02h送到porte,寫(xiě)數(shù)據(jù)BCFPORTE,1;將porte的第一個(gè)位置清0MOVLWD'5';將5送到wMOVWFCOUNT;將count賦值為5DELAY5MS;延時(shí)1msCALLDELAY1MS;DECFSZCOUNT,1;GOTODELAY5MS;MOVLWB'00111000';將38h送到wMOVWFPORTD;將38h送到potdMOVLWB'00000010';將02h送到wMOVWFPORTE;將02h送到porte,寫(xiě)數(shù)據(jù)BCFPORTE,1;將porte的第一個(gè)位置清0MOVLWD'3';MOVWFCOUNT;DELAY120US;延時(shí)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,關(guān)顯示MOVWFPORTD;將o8h送到portdMOVLWB'00000010';將02h送到wMOVWFPORTE;將02h送到porteBCFPORTE,1;將porte的第一個(gè)位置清0CALLDELAY40US;MOVLWB'00000001';將01h送到w,清屏MOVWFPORTD;將o1h送到portdMOVLWB'00000010';MOVWFPORTE;將02h送到porteBCFPORTE,1;將porte的第一個(gè)位置清0CALLDELAY1MS;MOVLWD'16';MOVWFCOUNT;將count設(shè)置為16DELAY640US;延時(shí)640usCALLDELAY40US;DECFSZCOUNT,1;GOTODELAY640US;MOVLWB'00000110';將06h送到w,設(shè)置輸入方式MOVWFPORTD;MOVLWB'00000010';MOVWFPORTE;BCFPORTE,1;CALLDELAY40US;MOVLWB'00001101';將0DH送到w,*****MOVWFPORTD;將0DH送到portdMOVLWB'00000010';MOVWFPORTE;將02h送到porteBCFPORTE,1;將porte的第一個(gè)位置清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;第三個(gè)燈閃爍幾下MOVLWB'00001111';MOVWFPORTCCALLDELAY100MS;閃爍間隔0.3sCALLDELAY100MSMOVLWB'00000000';第八個(gè)燈亮MOVWFPORTCCALLDELAY100MSMOVLWB'00001111';MOVWFPORTCCALLDELAY100MS;閃爍間隔0.3sCALLDELAY100MSMOVLWB'00000000';第八個(gè)燈亮MOVWFPORTCMOVLWB'00001111';MOVWFPORTCCALLDELAY100MS;閃爍間隔0.3sCALLDELAY100MSMOVLWB'00000000';第八個(gè)燈亮MOVWFPORTCGOTORESET;***************亮燈<開(kāi)鎖>*************************************ALLOWEDMOVLWB'00001100';第八個(gè)燈亮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)容相與,結(jié)果存入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;黑方塊;*****************第二次檢測(cè)按鍵********************************TRANSLATERRFPORTD,1;對(duì)鍵盤(pán)進(jìn)行列掃描,確定鍵值,高四位和第四位相加得valueMOVFPORTB,0ANDLW0FHXORLW0FHBTFSCSTATUS,2GOTOTRANSLATEMOVFPORTD,0ANDLW0F0HXORLW0F0HMOVWFVALMOVFPORTB,0ANDLW0FHXORLW0FHADDWFVAL,1CALLKEYUPCALLDELAY1MSRETURN;****************延時(shí)*****************************DELAY1MSMOVLWD'100';延遲1ms程序MOVWFCOUNT1;LOOP1MSNOPNOPNOPNOPNOPNOPNOPDECFSZCOUNT1,1;GOTOLOOP1MS;RETURN;********************************************DELAY40USMOVLWD'5';延遲40us程序MOVWFCOUNT2;LOOP40USNOPNOPNOPNOPNOPDECFSZCOUNT2,1;GOTOLOOP40US;NOPNOPRETURN;***************************************************KEYUPCLRFPORTD;檢測(cè)是否按鍵已經(jīng)松開(kāi),根據(jù)value及鍵盤(pán)的行列確定按下的鍵盤(pán)的鍵值MOVFPORTB,0ANDLW0FHXORLW0FHBTFSSSTATUS,2GOTOKEYUPCALLDELAY1MSMOVFPORTB,0ANDLW0FHXORLW0FHBTFSSSTATUS,2GOTOKEYUPCLRWBTFSCVAL,0ADDLW1BTFSCVAL,1ADDLW2BTFSCVAL,2ADDLW3BTFSCVAL,3ADDLW4BTFSCVAL,4ADDLW0BTFSCVAL,5ADDLW4BTFSCVAL,6ADDLW8BTFSCVAL,7ADDLWD'12'CALLCONVERTMOVWFTEMPGOTOXANSHIMOVLWB'10000000';第八個(gè)燈亮MOVWFPORTCRETURN;******************輸入密碼時(shí)顯示******************************XANSHIMOVLWB'000000001'MOVWFPORTC;第一個(gè)燈亮CALLDELAY100MSMOVLWB'00000000';MOVWFPORTCMOVLWB'00101010'MOVWFPORTD;顯示*MOVLWB'00000011';將03h存入wMOVWFPORTE;將03h存入porteBCFPORTE,1;將porte第一個(gè)位置清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的第一個(gè)位置清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轉(zhuǎn)送MMOVWFMLOOP1MOVLWD'251';內(nèi)循環(huán)變量初始值經(jīng)W轉(zhuǎn)送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ù)計(jì)數(shù)器賦予初值MOVWFCOUNT1;T1LOPCALLTONE630;CALLDELAY1MSCALLTONE630;DECFSZCOUNT1,F;循環(huán)次數(shù)遞減,為0,跳一步GOTOT1LOP;不為0,跳回RETURN;;*****低音調(diào)**************TONE500MOVLW.50;MOVWFCOUNT2;50=500hzx0.05sx2T5LOPBCFINTCON,T0IF;清除TMR0溢出中斷標(biāo)志位MOVLW.190;256-125=131MOVWFTMR0;啟動(dòng)定時(shí)器T5HEREBTFSSINTCON,T0IF;定時(shí)器溢出否GOTOT5HERE;否,循環(huán)檢測(cè)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 花字課件教學(xué)課件
- 吸墨白板課件教學(xué)課件
- 2024固定資產(chǎn)業(yè)權(quán)轉(zhuǎn)讓合同
- 2024年店鋪買(mǎi)賣(mài)與租賃合同一本通
- 2024年廣告裝飾新篇章:工程合同全新范本
- 2024年辦公室裝修設(shè)計(jì)實(shí)施合同
- 2024年度供應(yīng)鏈管理合同與物流服務(wù)協(xié)議
- 2024年工程項(xiàng)目人力資源配置與管理合同
- 2024光伏發(fā)電設(shè)備采購(gòu)合同
- 江蘇開(kāi)放大學(xué)2023年秋《中級(jí)會(huì)計(jì)實(shí)務(wù)(上) 050284》第4次任務(wù)參考答案
- 屋頂光伏安全專項(xiàng)施工方案
- 4.與食品經(jīng)營(yíng)相適應(yīng)的主要設(shè)備設(shè)施布局操作流程等文件
- 四班三倒排班表
- 銀行業(yè)信息系統(tǒng)災(zāi)難恢復(fù)管理規(guī)范
- 醫(yī)院重點(diǎn)崗位工作人員輪崗制度
- 2023光伏發(fā)電工程項(xiàng)目安全文明施工方案
- 帶式輸送機(jī)膠帶安裝
- 陳育民對(duì)FLAC3D常見(jiàn)問(wèn)題的解答概要
- 專利文獻(xiàn)檢索方法與步驟課件
- 第5講-申論大作文課件
評(píng)論
0/150
提交評(píng)論