版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于單片機(jī)的電子密碼鎖設(shè)計(jì)摘要:鎖,是指加在門(mén)、箱子、抽屜等物體上的封緘器,要用專(zhuān)用的鑰匙才能翻開(kāi)。自古以來(lái)鎖都是人們財(cái)產(chǎn)平安乃至生命平安的一種重要保障。伴隨著人類(lèi)歷史的開(kāi)展和人們對(duì)自身財(cái)產(chǎn)平安和人生平安的重視,各種各樣的多功能的鎖具也相繼出現(xiàn),人們使用的鎖具也由傳統(tǒng)的機(jī)械式鎖逐漸開(kāi)展為平安性能更好,功能更多的電子密碼鎖。在現(xiàn)代社會(huì),電子密碼鎖已是一個(gè)被大家所熟識(shí)的名詞。相信很多人的小區(qū)大門(mén)上的鎖都用的是電子密碼鎖。本文中將要介紹的電子密碼鎖是一種通過(guò)判斷密碼輸入是否正確來(lái)控制電路或是芯片的工作狀態(tài),進(jìn)而控制鎖的翻開(kāi)和閉合,從而完成開(kāi)鎖、閉鎖任務(wù)的電子鎖裝置。本設(shè)計(jì)是基于AT89C51單片機(jī)為控制核心的密碼鎖設(shè)計(jì)方案。在本次基于單片機(jī)的電子密碼鎖設(shè)計(jì)中,將采用AT89C51單片機(jī)作為控制核心,配合相應(yīng)的電路和軟件程序,實(shí)現(xiàn)密碼的輸入和修改、信息的顯示、鍵盤(pán)的鎖定、系統(tǒng)報(bào)警、開(kāi)鎖和閉鎖等功能。在設(shè)計(jì)中,利用識(shí)別密碼是否正確來(lái)開(kāi)鎖或報(bào)警,通過(guò)串行存儲(chǔ)器AT24C02來(lái)實(shí)現(xiàn)密碼的修改和存儲(chǔ)。本文設(shè)計(jì)的密碼鎖具有平安性高、功耗低、操作簡(jiǎn)單等優(yōu)點(diǎn)。關(guān)鍵詞:單片機(jī);密碼鎖;電子鎖;矩陣鍵盤(pán);掉電存儲(chǔ)TheDesignOfElectronicCodeLockBasedOnSingleChipMicrocomputerAbstract:Assealeddevice,thelockaddedtosuchobjectslikedoor,box,draweretc,canbeopenedwithspecifiedkey.Sincetheancienttime,lockisakindofsecurity,guaranteeingpeople’spropertysafetyevenlifesafety.Withthedevelopmentofhumanhistoryandmoreattentionpaidtopropertysafetyandlifesafety,variousmulti-functionallockscanbeseenintheworld.Traditionalmechanicallockspeopleuseinlifearegraduallyreplacedbyelectroniccombinationlockcharacterizedwithbettersafetyperformanceandmorefunctions.Inthemodernsociety,electroniccombinationlockisanounfamiliartoeveryone.Usually,thedoorofcommunityisequippedwithelectroniccombinationlock.Thispaperwillintroduceanelectroniccombinationlock.Thislockcontrolstheelectriccircuitsandtheperformanceofchipsbyidentifyingpassword.Thus,theopennessandclosenessofthelockcanbecontrolled,andthetaskofelectroniclockdevicecanbecompleted.Thisdesignisaboutcombinationlock,basedontheAT89C51single-chipmicrocomputerasthecoreofcontrollinggoals.ThisdesigninwhichtheAT89C51single-chipmicrocomputerasthecoreofthecontrollinggoalscooperatedwithrelevantcircuitsandsoftwareprogramscanachievesuchfunctionslikepasswordinputandmodification,informationdisplay,keyboardlocking,warningsystem,andtheopennessandclosenessofthelocketc.Inthisdesign,theopennessoflockandalarmingareaccordingtoidentifyingthepassword,andpasswordrevisionandstorageisachievedbythefunctionoftheAT24C02serialstorage.Electroniccombinationlockdescribedinthispaperischaracterizedwithhighsecurity,lowpowerconsumption,andsimplicityofoperationetc.Keywords:Single-chipmicrocomputer,Combinationlock,Electroniclock,Matrixkeyboard,Powerloststorage目錄第1章緒論11.1電子密碼鎖簡(jiǎn)介11.2電子密碼鎖設(shè)計(jì)的背景及意義11.3電子密碼鎖的現(xiàn)狀及開(kāi)展趨勢(shì)2第2章總體設(shè)計(jì)32.1設(shè)計(jì)分析32.2系統(tǒng)結(jié)構(gòu)4第3章硬件電路設(shè)計(jì)53.1單片機(jī)接口分配53.2單片機(jī)最小系統(tǒng)設(shè)計(jì)53.2.1時(shí)鐘電路53.2.2復(fù)位電路63.2.3最小系統(tǒng)63.3矩陣鍵盤(pán)設(shè)計(jì)73.4LCD顯示模塊設(shè)計(jì)83.5掉電存儲(chǔ)模塊103.5.1I2C總線103.5.2AT24C02簡(jiǎn)介123.6開(kāi)鎖機(jī)構(gòu)133.7報(bào)警機(jī)構(gòu)133.8硬件綜合設(shè)計(jì)14第4章軟件設(shè)計(jì)154.1軟件總體設(shè)計(jì)154.2鍵盤(pán)掃描子程序164.3顯示模塊子程序184.4掉電存儲(chǔ)子程序204.4.1寫(xiě)操作方式214.4.2讀操作方式224.5定時(shí)器中斷子程序234.6密碼輸入子程序254.7報(bào)警子程序26第5章聯(lián)合仿真和調(diào)試27第6章實(shí)物設(shè)計(jì)和制作29總結(jié)31致謝32參考文獻(xiàn)33附錄1設(shè)計(jì)實(shí)物圖34附錄2程序源代碼36第1章緒論1.1電子密碼鎖簡(jiǎn)介什么是電子密碼鎖?“一種通過(guò)密碼輸入來(lái)控制電路或者是芯片工作,從而控制機(jī)械開(kāi)關(guān)的閉合,完成開(kāi)鎖、閉鎖任務(wù)的電子產(chǎn)品。〞——百度百科上是這樣解釋的。簡(jiǎn)單來(lái)說(shuō),電子密碼鎖就是能夠?qū)崿F(xiàn)密碼等信息的設(shè)置、存貯、識(shí)別和顯示,以及報(bào)警信號(hào)的接收和發(fā)送等功能的電子器件。 電子密碼鎖相對(duì)傳統(tǒng)機(jī)械鎖有以下幾個(gè)優(yōu)勢(shì): (1)密碼可更改。用戶可以隨時(shí)更改密碼,以確保密碼鎖的平安性和可靠性。可以更改密碼這一功能同時(shí)也防止了人員的更替而使鎖的平安性降低,這是傳統(tǒng)鑰匙鎖所不具備的功能。 (2)操作簡(jiǎn)單。無(wú)論是開(kāi)鎖還是更改密碼,只要識(shí)字的人都能夠直接使用,使用方法簡(jiǎn)單而不繁瑣。 (3)能夠報(bào)警。報(bào)警功能無(wú)疑更增加了鎖的平安性。 (4)無(wú)法“技術(shù)〞破解。不知道密碼就無(wú)法翻開(kāi)鎖,即使是慣偷也只能望“鎖〞興嘆。1.2電子密碼鎖設(shè)計(jì)的背景及意義在現(xiàn)代文明社會(huì),雖然人們的道德素質(zhì)越來(lái)越高,“梁上君子〞、“三只手〞等人群相對(duì)舊社會(huì)大大減少,但是像“某某小區(qū)遭入室行竊,居民損失XXXX〞之類(lèi)的新聞我們還是經(jīng)常能夠在報(bào)紙上看到的。隨著人們生活水平和自身防范意識(shí)的提高,個(gè)人財(cái)產(chǎn)平安和人身平安的問(wèn)題也越來(lái)越受到人們的重視,擁有一把能夠有效保證居民財(cái)產(chǎn)平安和人身平安的鎖具也越發(fā)的重要起來(lái)。鎖具的起源可以追朔到人類(lèi)社會(huì)財(cái)產(chǎn)私有化的出現(xiàn),鎖具從其出現(xiàn)到開(kāi)展至今天的高科技化、信息化,已經(jīng)有假設(shè)干年的歷史了。經(jīng)過(guò)假設(shè)干年的使用和研究,人們對(duì)鎖具的結(jié)構(gòu)、機(jī)理也了解得相當(dāng)透徹了,因此,不使用鑰匙就能將鎖翻開(kāi)的方法也層出不窮。特別是傳統(tǒng)的機(jī)械鎖,由于其構(gòu)造簡(jiǎn)單,在慣偷面前,甚至能夠只用一根鐵絲就直接將其翻開(kāi),使其失去了保障用戶個(gè)人財(cái)產(chǎn)平安的意義。那么,如何才能提高鎖具保障用戶財(cái)產(chǎn)平安的有效性呢?在信息現(xiàn)代化的今天,鎖具也應(yīng)該向高精度、高平安性的智能化、信息化開(kāi)展。自20世紀(jì)70年代第一塊單片機(jī)芯片TMS-1000于美國(guó)德克薩斯儀器公司面世以來(lái),基于其體積小、價(jià)格低廉、個(gè)性突出等特點(diǎn),越來(lái)越多的電子產(chǎn)品開(kāi)始采用單片機(jī)芯片作為核心控制部件。在這樣的大環(huán)境下,基于單片機(jī)的電子密碼鎖也應(yīng)運(yùn)而生。這種電子密碼鎖是以單片機(jī)為核心,配以相應(yīng)的硬件電路和軟件程序,實(shí)現(xiàn)密碼的設(shè)置、存貯、識(shí)別和顯示,以及報(bào)警信號(hào)的接收和發(fā)送等功能,具有操作快、修改密碼簡(jiǎn)單、平安性高、功耗低等優(yōu)點(diǎn)?;趩纹瑱C(jī)的電子密碼鎖的面世使人們的自身財(cái)產(chǎn)平安有了更多的保障,同時(shí)也促進(jìn)了平安信息系統(tǒng)的開(kāi)展,是平安信息系統(tǒng)的一大進(jìn)步?;趩纹瑱C(jī)的電子密碼鎖的出現(xiàn),在一定程度上解決了用戶私人財(cái)產(chǎn)平安的問(wèn)題。但是,時(shí)代在開(kāi)展,社會(huì)在進(jìn)步,任何事物只有不斷地進(jìn)步才能適應(yīng)時(shí)代開(kāi)展的需求。電子密碼鎖雖然有平安性高、操作簡(jiǎn)單等優(yōu)點(diǎn),但是卻不如機(jī)械鎖價(jià)格低廉,因此,在市場(chǎng)上的主流產(chǎn)品還是機(jī)械鎖。電子密碼鎖要想取代機(jī)械鎖成為市場(chǎng)上的主流,就必須不斷改良,在具有更多功能的同時(shí)向更智能化和更低本錢(qián)化開(kāi)展。這就需要我們不斷研究電子密碼鎖的設(shè)計(jì)方法和實(shí)現(xiàn)原理。因此,研究基于單片機(jī)的電子密碼鎖的設(shè)計(jì)是很有必要且具有現(xiàn)實(shí)意義的。1.3電子密碼鎖的現(xiàn)狀及開(kāi)展趨勢(shì)目前,和西方興旺國(guó)家相比,我國(guó)的電子密碼鎖技術(shù)還相對(duì)落后。在西方興旺國(guó)家,電子密碼鎖的種類(lèi)已經(jīng)很齊全,技術(shù)也比擬先進(jìn),且在各個(gè)領(lǐng)域得到了廣泛應(yīng)用。在我國(guó),電子密碼鎖技術(shù)卻才相當(dāng)于國(guó)際上七十年代的水平,相對(duì)來(lái)說(shuō)還很落后。20世紀(jì)80年代以來(lái),隨著各種電子集成電路的出現(xiàn),特別是單片機(jī)的面世,電子密碼鎖得到了很大的開(kāi)展。相對(duì)于笨重而構(gòu)造簡(jiǎn)單的傳統(tǒng)機(jī)械鎖來(lái)說(shuō),電子密碼鎖具有體積小,可靠性高的優(yōu)勢(shì)。但是就目前而言,電子密碼鎖的價(jià)格相對(duì)較高且需要有電源提供能量,使得其使用還局限在一定范圍,特別是在國(guó)內(nèi),各種條件的制約使得電子密碼鎖暫時(shí)難以普及。 盡管電子密碼鎖還存在著一些缺陷,但是其平安性高、方便易用、能夠智能報(bào)警的優(yōu)勢(shì)卻是傳統(tǒng)鑰匙鎖取代不了的,而且隨著電子信息技術(shù)的開(kāi)展和各種電子器件的價(jià)格的不斷降低,電子密碼鎖也將往低本錢(qián)、多功能的方向開(kāi)展。第2章總體設(shè)計(jì)2.1設(shè)計(jì)分析一個(gè)電子密碼鎖,應(yīng)該能實(shí)現(xiàn)以下功能:(1)能夠從鍵盤(pán)中輸入密碼,并相應(yīng)地在顯示器上顯示‘*’;(2)能夠判斷密碼是否正確,正確那么開(kāi)鎖,錯(cuò)誤那么輸出相應(yīng)信息;(3)能夠?qū)崿F(xiàn)密碼的修改;(4)斷電或者單片機(jī)復(fù)位后能夠保存之前的操作,比方密碼的修改;(5)在操作錯(cuò)誤到達(dá)一定次數(shù)后能夠報(bào)警;(6)在一定時(shí)間內(nèi)沒(méi)有任何按鍵操作那么關(guān)閉顯示器,并鎖定鍵盤(pán),禁止鍵盤(pán)輸入〔單片機(jī)復(fù)位后鎖定取消〕;(7)設(shè)置一個(gè)備用密碼。為了防止用戶忘記密碼而開(kāi)不了鎖,應(yīng)該在經(jīng)常使用的密碼外再設(shè)置一個(gè)備用密碼以防萬(wàn)一。此備用密碼應(yīng)該只有少數(shù)人知道,比方小區(qū)管理員。根據(jù)以上分析,本次電子密碼鎖設(shè)計(jì)的主要重點(diǎn)是以下幾個(gè)局部:4x4矩陣鍵盤(pán)設(shè)計(jì)、LCD信息顯示、密碼的掉電存儲(chǔ)和密碼的比擬和處理。當(dāng)然,除了這幾個(gè)局部外還有定時(shí)器/計(jì)數(shù)器計(jì)時(shí)中斷和報(bào)警等功能模塊。本設(shè)計(jì)應(yīng)該按以下步驟去實(shí)現(xiàn):第一步:選擇材料和器件。第二步:根據(jù)單片機(jī)原理和模擬電子技術(shù)根底等理論知識(shí)在PROTEUS中畫(huà)出仿真圖。第三步:檢查仿真圖,確保其能夠?qū)崿F(xiàn)所有功能。第四步:根據(jù)需要實(shí)現(xiàn)的功能邏輯畫(huà)出程序流程圖。第五步:根據(jù)程序流程圖和PROTEUS仿真圖,使用KEIL軟件進(jìn)行程序的編寫(xiě)和調(diào)試。第六步:將KEIL和PROTEUS聯(lián)合仿真、調(diào)試,查看是否實(shí)現(xiàn)所有功能。第七步:根據(jù)PROTEUS仿真圖焊接器件。第八步:實(shí)物調(diào)試。基于實(shí)際情況,在設(shè)計(jì)中,用發(fā)光二極管代替電磁鎖,二極管亮那么代表鎖開(kāi),二極管不亮那么代表鎖關(guān)。2.2系統(tǒng)結(jié)構(gòu)本設(shè)計(jì)系統(tǒng)主要由單片機(jī)芯片、矩陣鍵盤(pán)、LCD顯示模塊、掉電存儲(chǔ)模塊、報(bào)警機(jī)構(gòu)和開(kāi)鎖機(jī)構(gòu)組成。如圖2-1所示。單片機(jī)單片機(jī)時(shí)鐘電路復(fù)位電路矩陣鍵盤(pán)LCD顯示掉電存儲(chǔ)開(kāi)鎖機(jī)構(gòu)報(bào)警機(jī)構(gòu)圖2-1系統(tǒng)總體設(shè)計(jì)結(jié)構(gòu)圖 時(shí)鐘電路給單片機(jī)提供晶振頻率,復(fù)位電路不但使單片機(jī)上電復(fù)位,還能在使用過(guò)程中通過(guò)需要通過(guò)按鍵再次手動(dòng)復(fù)位,矩陣鍵盤(pán)提供按鍵的輸入,LCD模塊顯示信息,掉電存儲(chǔ)負(fù)責(zé)密碼的存儲(chǔ),開(kāi)鎖機(jī)構(gòu)和報(bào)警機(jī)構(gòu)分別負(fù)責(zé)開(kāi)鎖和報(bào)警功能。設(shè)計(jì)中,單片機(jī)選用AT89C51,LCD顯示模塊選用LCD1602液晶顯示器,串行存儲(chǔ)器選用電可擦除存儲(chǔ)器AT24C02,開(kāi)鎖機(jī)構(gòu)用發(fā)光二極管代替,報(bào)警機(jī)構(gòu)選用蜂鳴器。第3章硬件電路設(shè)計(jì)3.1單片機(jī)接口分配AT89C51單片機(jī)在一塊芯片上集成了CPU、RAM、ROM、定時(shí)器/計(jì)數(shù)器和多種I/O功能部件,具有一臺(tái)微型計(jì)算機(jī)的根本結(jié)構(gòu),按功能可以將其分成八個(gè)組成局部:微處理器〔CPU〕、數(shù)據(jù)存儲(chǔ)器〔RAM〕、程序存儲(chǔ)器〔ROM/EPROM〕、特殊功能存放器〔SFR〕、I/O口、串行口、定時(shí)器/計(jì)數(shù)器及中斷系統(tǒng)。 在本設(shè)計(jì)中,單片機(jī)的各個(gè)接口我是這樣分配的:P0口接一個(gè)上拉電阻后與LCD1602的8位雙向數(shù)據(jù)端D0~D7相接,P1口用作矩陣鍵盤(pán)接口,P2口的P2.0~P2.2和LCD1602的4~6引腳相接,P2.5和P2.6接串行存儲(chǔ)器AT24C02,P3口用作開(kāi)鎖電路和報(bào)警電路的接口。3.2單片機(jī)最小系統(tǒng)設(shè)計(jì)單片機(jī)最小系統(tǒng)就是指能使單片機(jī)工作的最少的器件構(gòu)成的系統(tǒng)。因?yàn)閱纹瑱C(jī)已經(jīng)包含了數(shù)據(jù)存儲(chǔ)器和程序存儲(chǔ)器,所以只要在其外部加上時(shí)鐘電路和復(fù)位電路就可以構(gòu)成單片機(jī)最小系統(tǒng)。時(shí)鐘電路單片機(jī)工作需要晶振給CPU提供頻率,時(shí)鐘電路就是給單片機(jī)提供晶振頻率的電路。圖3-1是時(shí)鐘電路的PROTEUS仿真圖。圖3-1時(shí)鐘電路單片機(jī)允許的振蕩晶體可在1.2~24MHz之間選擇,一般為11.0592MHz,電容C2,C3的取值對(duì)振蕩頻率輸出的穩(wěn)定性、大小及振蕩電路起振速度有一定的影響,可在20~100pF之間選擇,典型值位30pF。復(fù)位電路計(jì)算機(jī)每次開(kāi)始工作,CPU和系統(tǒng)中的其他部件都必須要有一個(gè)確定的初值,即復(fù)位狀態(tài)。圖3-2是單片機(jī)復(fù)位電路仿真圖。圖3-2復(fù)位電路 單片機(jī)RST引腳是高電平有效。單片機(jī)在上電瞬間C1充電,RST引腳端出現(xiàn)正脈沖,只要RST斷保持兩個(gè)機(jī)械周期〔大約10ms〕以上的高電平,單片機(jī)就能復(fù)位。在單片機(jī)工作后,如果還想再次復(fù)位,只需按下開(kāi)關(guān),單片機(jī)就能重新變成復(fù)位狀態(tài)。 當(dāng)晶體振蕩頻率為12MHz時(shí),RC的典型值為C=10μF,R=8.2KΩ。最小系統(tǒng)單片機(jī)加上時(shí)鐘電路和復(fù)位電路就構(gòu)成了能使其正常工作的最小系統(tǒng)。單片機(jī)最小系統(tǒng)是單片機(jī)正常工作的根底,任何一個(gè)單片機(jī)系統(tǒng)設(shè)計(jì)都是基于單片機(jī)最小系統(tǒng)的根底上來(lái)完成的,而在單片機(jī)系統(tǒng)實(shí)物設(shè)計(jì)中,最應(yīng)該首先解決的也應(yīng)該是單片機(jī)最小系統(tǒng)問(wèn)題,只有保證了單片機(jī)最小系統(tǒng)的正確性,才能保證接下來(lái)的其他模塊的正確設(shè)計(jì)。圖3-3是單片機(jī)最小系統(tǒng)的完整仿真圖。圖3-3單片機(jī)最小系統(tǒng)3.3矩陣鍵盤(pán)設(shè)計(jì)一組鍵或者一個(gè)鍵盤(pán),需要通過(guò)接口電路和CPU相連接,CPU可以采用查詢接口或者中斷的方式了解有沒(méi)有鍵被按下,并檢查是哪個(gè)鍵被按下。無(wú)論是查詢方式還是中斷方式都要用到單片機(jī)的I/O口。由于單片機(jī)I/O口較少的原因,當(dāng)系統(tǒng)中需要用到較多按鍵時(shí),為了能夠更合理更有效地利用單片機(jī)的I/O口,一般采用矩陣鍵盤(pán)的方式來(lái)實(shí)現(xiàn)多按鍵的功能。圖3-4是4x4矩陣鍵盤(pán)在PROTEUS中的電路原理仿真圖。圖3-44x4矩陣鍵盤(pán)矩陣鍵盤(pán)又叫做行列式鍵盤(pán)。行列式鍵盤(pán)的硬件結(jié)構(gòu)比擬簡(jiǎn)單,由行輸出口和列輸出口構(gòu)成行列式鍵盤(pán),按鍵設(shè)置在行、列交點(diǎn)上。圖3-4中,P1.0~P1.3是行輸出口,P1.4~P1.7是列輸出口。行輸出口和列輸出口不相交,只有當(dāng)鍵被按下時(shí)相應(yīng)的行和列才能相連。如此,只要檢測(cè)行和列是否相連就可以知道是否有鍵按下。由于按鍵設(shè)置在行、列線交點(diǎn)上,行、列分別連接到按鍵開(kāi)關(guān)的兩端,平時(shí)無(wú)鍵按下時(shí),行線處于高電平,假設(shè)列線為低電平,當(dāng)有鍵按下時(shí),按下的鍵就會(huì)將相應(yīng)的行和列連通,使得對(duì)應(yīng)的行線被列線拉低,也變?yōu)榈碗娖?。這就是識(shí)別矩陣鍵盤(pán)是否有鍵被按下的關(guān)鍵。當(dāng)確定有鍵被按下時(shí),通過(guò)逐行掃描,讀出I/O口的值可以知道哪一行的值被改變了,被改變了的行即是被按下的按鍵所在行。同時(shí),由于每個(gè)鍵都有它的行值和列值,行值和列值得組合就是這個(gè)按鍵的編碼,當(dāng)算法一定時(shí),每個(gè)按鍵的編碼是固定的,且各個(gè)按鍵的編碼互不相同,所有通過(guò)讀I/O的值還能具體知道是哪一個(gè)鍵被按下,這樣就實(shí)現(xiàn)了鍵盤(pán)的識(shí)別。3.4LCD顯示模塊設(shè)計(jì) 在單片機(jī)應(yīng)用系統(tǒng)中,常用的顯示設(shè)備有單個(gè)發(fā)光二極管、八段LED顯示器、液晶顯示器〔LCD〕、屏幕顯示器〔CRT〕等。在本次設(shè)計(jì)中,基于設(shè)計(jì)所要實(shí)現(xiàn)的功能和節(jié)約本錢(qián)等實(shí)際情況,我采用LCD1602作為本次設(shè)計(jì)的顯示器。LCD1602是一種字符型液晶顯示器,是一種專(zhuān)門(mén)用于顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣式液晶顯示器。LCD1602的顯示容量為16x2個(gè)字符〔可以顯示2行,每行顯示16個(gè)字符〕,芯片工作電壓為4.5~5.5V,工作電流為2.0mA〔5.0V〕,模塊最正確工作電壓是5.0V。LCD1602具有16個(gè)引腳,如表3-1所示。在LCD1602的有關(guān)設(shè)計(jì)中,主要是通過(guò)編寫(xiě)程序控制LCD1602的4、5、6引腳來(lái)實(shí)現(xiàn)數(shù)據(jù)或者指令的寫(xiě)入和執(zhí)行,再通過(guò)數(shù)據(jù)或者指令的寫(xiě)入和執(zhí)行來(lái)進(jìn)一步實(shí)現(xiàn)LCD1602的顯示功能。 表3-1是LCD1602的16個(gè)引腳和引腳對(duì)應(yīng)功能。表3-1LCD1602引腳說(shuō)明引腳號(hào)引腳名功能1VSS電源地2VCC電源〔+5V〕3VEE比照調(diào)整電壓4RS0:輸入指令;1:輸入數(shù)據(jù)5R/W0:向LCD寫(xiě)指令或者數(shù)據(jù);1:從LCD讀取信息6E使能信號(hào),1:讀取信息,1→0:執(zhí)行命令7DB0數(shù)據(jù)總線〔最低位〕8DB1數(shù)據(jù)總線9DB2數(shù)據(jù)總線10DB3數(shù)據(jù)總線11DB4數(shù)據(jù)總線12DB5數(shù)據(jù)總線13DB6數(shù)據(jù)總線14DB7數(shù)據(jù)總線〔最高位〕15ALCD背光電源正極16KLCD背光電源負(fù)極作為一個(gè)字符型液晶顯示器,LCD1602內(nèi)部自帶有一個(gè)字符發(fā)生存儲(chǔ)器,此字符發(fā)生存儲(chǔ)器就相當(dāng)于一個(gè)字符集。LCD1602的字符集中存有160個(gè)不同的字符,這些字符包括了英文大小寫(xiě)字母、阿拉伯?dāng)?shù)字、標(biāo)點(diǎn)符號(hào)等一些經(jīng)常用到的字符。字符集中的每一個(gè)字符都對(duì)應(yīng)有一個(gè)固定的ASCII碼值,通過(guò)顯示ASCII碼對(duì)應(yīng)的字符圖像就能夠?qū)崿F(xiàn)對(duì)應(yīng)字符的顯示。圖3-5是PROTEUS中顯示模塊的仿真圖。由于LCD要正常工作必須提供足夠的電流,因此在實(shí)際應(yīng)用為了保證顯示器能夠正常工作,應(yīng)在數(shù)據(jù)端口接一上拉電阻。圖3-5中RP1同時(shí)還是P0口的上拉電阻。圖3-5LCD模塊仿真圖3.5掉電存儲(chǔ)模塊 I2C總線I2C總線為同步串行數(shù)據(jù)傳輸總線,用于單片機(jī)的外圍擴(kuò)展。I2C總線上所有的外圍器件都有標(biāo)準(zhǔn)的器件地址,器件地址有7位組成,它和1位方向?yàn)闃?gòu)成了I2C總線器件的尋址字節(jié)。尋址字節(jié)格式如下:表3-2I2C尋址格式D7D6D5D4A2A1A0R/ D7~D4是I2C總線的器件地址,由廠家在器件出廠時(shí)給定,對(duì)于AT24C系列固定為1010。A2~A0根據(jù)電路中A2,A1,A0引腳接電源或者接地而不同,接地那么相應(yīng)位為0,接電源那么相應(yīng)位為1。R/位為I2C總線的數(shù)據(jù)方向位,決定I2C總線的數(shù)據(jù)傳送方向,高電平為接收,低電平為發(fā)送。圖3-6為I2C總線的數(shù)據(jù)傳送時(shí)序。1123456789ACKSCLSDAP起始信號(hào)停止信號(hào)圖3-6I2C總線數(shù)據(jù)傳送時(shí)序 起始信號(hào):時(shí)鐘線SCL為高電平,數(shù)據(jù)線SDA出現(xiàn)由高向低的負(fù)跳變時(shí),啟動(dòng)I2C總線。 停止信號(hào):時(shí)鐘線SCL為高電平,數(shù)據(jù)線SDA出現(xiàn)由低向高的正跳變時(shí),停止I2C總線。 應(yīng)答信號(hào)位ACK:I2C總線進(jìn)行數(shù)據(jù)傳送時(shí),每成功傳送一個(gè)字節(jié)的數(shù)據(jù)后,接收器件都必然產(chǎn)生一個(gè)應(yīng)答信號(hào),即在第9個(gè)時(shí)鐘周期時(shí)將SDA線拉低,表示其已經(jīng)成功接收到一個(gè)8個(gè)數(shù)據(jù)。圖3-6中的第9個(gè)時(shí)鐘脈沖對(duì)應(yīng)于應(yīng)答位。應(yīng)答位對(duì)應(yīng)的數(shù)據(jù)線SDA上是低電平時(shí)為應(yīng)答信號(hào),是高電平那么為非應(yīng)答信號(hào)。為非應(yīng)答信號(hào)時(shí),證明器件沒(méi)有成功接收到一個(gè)8位數(shù)據(jù)。 數(shù)據(jù)傳送位:圖3-6中的第1~8個(gè)時(shí)鐘脈沖為一個(gè)字節(jié)的8位數(shù)據(jù)傳送位。脈沖為高電平時(shí),串行傳送數(shù)據(jù);脈沖為低電平時(shí),不傳送數(shù)據(jù),允許總線上數(shù)據(jù)線SDA的電平發(fā)生變化。在I2C數(shù)據(jù)傳輸過(guò)程中,只有當(dāng)SCL為低電平時(shí)才允許SDA變化,當(dāng)SCL為高電平時(shí),不允許SDA電平改變。當(dāng)然,起始信號(hào)和停止信號(hào)是例外。因此,當(dāng)SCL為高電平時(shí),SDA的變化被看成是起始信號(hào)或者停止信號(hào)。3.5.2AT24C02簡(jiǎn)介 AT24C02是Atmel公司生產(chǎn)的AT24CXX系列串行E2PROM中的一種,是具有I2C總線接口功能的電可擦除串行存儲(chǔ)器。AT24C02內(nèi)部含有256個(gè)字節(jié),通過(guò)I2C總線接口進(jìn)行操作,有一個(gè)專(zhuān)門(mén)的寫(xiě)保護(hù)功能〔WP=1時(shí)即為寫(xiě)保護(hù)〕。 圖3-7是AT24C02的引腳排列圖。15261526AT24C013748A0A1A2VssVccWPSCLSDA A0~A2:器件地址輸入端。在本設(shè)計(jì)中,A0~A2都接地,故其值都為0。 Vcc:+1.8~6.0V工作電壓。 Vss:地或電源負(fù)極。 圖3-7AT24C02引腳 SCL:串行時(shí)鐘輸入端。數(shù)據(jù)發(fā)送或者接收的時(shí)鐘從此引腳輸入。 SDA:串行/數(shù)據(jù)地址線。用于傳送地址和發(fā)送或者接收數(shù)據(jù),是雙向傳送端口。 WP:寫(xiě)保護(hù)端。WP=1時(shí),只能讀出,不能寫(xiě)入;WP=0時(shí),允許正常的讀寫(xiě)操作。 圖3-8為PROTEUS中E2PROM的仿真圖。圖3-8AT24C02仿真圖 P2.5為串行時(shí)鐘輸入線接口,P2.6為數(shù)據(jù)線接口。A0,A1,A2接地,所以單片機(jī)在讀AT24C02時(shí),器件地址為:10100001B=0A1H;在寫(xiě)AT24C02時(shí),器件地址為:10100000B=0A0H。WP=0,允許單片機(jī)進(jìn)行讀寫(xiě)操作。3.6開(kāi)鎖機(jī)構(gòu) 在基于單片機(jī)的電子密碼鎖設(shè)計(jì)中,用戶需要輸入密碼,密碼正確那么發(fā)出開(kāi)鎖信號(hào)開(kāi)鎖。因?yàn)樵谠O(shè)計(jì)中是以發(fā)光二極管代替電磁鎖,二極管亮代表鎖開(kāi),因此可以設(shè)計(jì)一個(gè)簡(jiǎn)單的可以點(diǎn)亮二極管的電路系統(tǒng)代替電磁鎖開(kāi)鎖機(jī)構(gòu)。如圖3-9所示。圖3-9二極管電路 由于單片機(jī)I/O口默認(rèn)為高電平,故初始時(shí)二極管不亮,代表鎖是閉著的。當(dāng)用戶輸入密碼并驗(yàn)證正確時(shí),發(fā)出開(kāi)鎖信號(hào)〔使P3.6=0〕。3.7報(bào)警機(jī)構(gòu)在這次基于單片機(jī)的電子密碼鎖設(shè)計(jì)中,通過(guò)控制蜂鳴器的發(fā)音來(lái)實(shí)現(xiàn)系統(tǒng)的報(bào)警功能。 蜂鳴器是一種采用直流電壓供電的電子訊響器。圖3-10是用蜂鳴器模擬的報(bào)警機(jī)構(gòu)仿真圖。圖3-10報(bào)警機(jī)構(gòu)模擬仿真圖當(dāng)P3.7口有脈沖信號(hào)輸入時(shí),蜂鳴器SPEAKER即會(huì)發(fā)音。通過(guò)控制輸入脈沖的頻率還能控制蜂鳴器的發(fā)音頻率。 當(dāng)用戶輸入密碼錯(cuò)誤次數(shù)到達(dá)預(yù)設(shè)警告次數(shù)時(shí),系統(tǒng)調(diào)用報(bào)警子程序,使蜂鳴器發(fā)出報(bào)警音,同時(shí)禁止鍵盤(pán)輸入。3.8硬件綜合設(shè)計(jì) 根據(jù)電路原理,在PROTEUS中畫(huà)出各功能模塊的仿真圖,各個(gè)功能模塊驗(yàn)證正確后,將所有模塊集合到一個(gè)電路設(shè)計(jì)圖中,畫(huà)出具有所有功能的總體硬件仿真圖。 圖3-11即為本設(shè)計(jì)的硬件綜合設(shè)計(jì)圖。圖3-11基于單片機(jī)的電子密碼鎖設(shè)計(jì)仿真圖待程序編寫(xiě)好后,將KEIL和PROTEUS聯(lián)調(diào),觀察此電路設(shè)計(jì)圖可以知道各個(gè)功能模塊和器件的工作情況。屆時(shí),根據(jù)實(shí)際情況可以適當(dāng)修改電路圖或者程序,以到達(dá)設(shè)計(jì)的目的。第4章軟件設(shè)計(jì)4.1軟件總體設(shè)計(jì)根據(jù)電子密碼鎖的實(shí)際應(yīng)用要求和其應(yīng)該具有的功能,本次設(shè)計(jì)的主程序流程圖如圖4-1所示。初始化初始化顯示輸入密碼界面輸入密碼密碼正確?開(kāi)鎖掃描功能鍵有鍵輸入?是改密鍵?進(jìn)行改密操作顯示歡送回家界面是閉鎖鍵?進(jìn)行閉鎖操作YNYNNY開(kāi)啟定時(shí)中斷次數(shù)>5?調(diào)用報(bào)警子程序YN圖4-1主程序流程圖此次基于單片機(jī)的電子密碼鎖設(shè)計(jì)的軟件設(shè)計(jì)方面的主要問(wèn)題是如何實(shí)現(xiàn)鍵盤(pán)輸入、信息顯示、密碼的掉電存儲(chǔ)以及密碼的比擬和處理。本設(shè)計(jì)接下來(lái)將分步解決這幾個(gè)問(wèn)題。4.2鍵盤(pán)掃描子程序矩陣鍵盤(pán)掃描子程序應(yīng)該具有以下2個(gè)根本的功能:(1)能判斷是否有鍵按下;(2)能確定是哪個(gè)鍵被按下。其軟件管理主要分為以下三步來(lái)完成:判斷整個(gè)鍵盤(pán)是否有鍵按下。讓所有的行為0,然后讀列的數(shù)值。如果列的數(shù)值全部為1,說(shuō)明沒(méi)有鍵被按下,否那么說(shuō)明有鍵被按下。識(shí)別被按下的鍵的位置。采用一行一行的掃描方法,逐行輸出0,然后讀列的值。如果列的數(shù)值全部為1,說(shuō)明不是這一行的按鍵被按下,掃描下一行,如果列的數(shù)值不全為1,那么說(shuō)明被按下的按鍵時(shí)在這一行。查鍵值表,返回鍵值對(duì)應(yīng)信息,以便確定各按鍵應(yīng)該完成的功能。采用某種算法,將被按下的鍵所在的行和列的信息合并成為一個(gè)信息,該信息即為此鍵的鍵值。用相同的方法給每一個(gè)鍵確定鍵值。在給按鍵確定鍵值時(shí)必須采用同一種算法,并且計(jì)算出來(lái)的鍵值應(yīng)該是互不相同的。 本設(shè)計(jì)中各按鍵對(duì)應(yīng)鍵值如表3所示。表4-1按鍵鍵值表按鍵名稱(chēng)鍵值按鍵名稱(chēng)鍵值10x7e90x7d20xbe00xbb30xdeA0xdb40xeeB0xeb50x7dC0x7760xbdD0xb770xddE0xd780xedF0xe7鍵盤(pán)掃描子程序的流程圖如圖4-2所示:YYN確定被按下的鍵在第二行?YN確定被按下的鍵在第三行?YN確定被按下的鍵在第四行中確定被按下的鍵返回對(duì)應(yīng)的按鍵號(hào)在第一行?開(kāi)始掃描鍵盤(pán)有鍵按下?YN圖4-2鍵盤(pán)掃描程序流程圖從流程圖可以看出,此鍵盤(pán)識(shí)別程序是通過(guò)逐行掃描來(lái)確定是否有鍵按下,當(dāng)確定某一行有鍵按下時(shí),再在該行中確定被按下的是哪一個(gè)按鍵。 在本設(shè)計(jì)中,P1.0~P1.3為行輸出口,P1.4~P1.7為列輸出口。初始時(shí)將P1.0~P1.3值賦為0,P1.4~P1.7賦為1,CPU始終掃描P1端口,當(dāng)P1值不為0xf0時(shí),有按鍵被按下,否責(zé)沒(méi)有按鍵被按下。 在實(shí)際應(yīng)用中,為了防止因?yàn)榘存I的抖動(dòng)而使得一次按鍵按下被當(dāng)做2次或者2次以上處理,應(yīng)該進(jìn)行按鍵消抖程序設(shè)計(jì),只要方法是當(dāng)有鍵閉合時(shí),延時(shí)一段時(shí)間再確定是否還有鍵閉合,假設(shè)有,那么為鍵有效閉合,假設(shè)無(wú)那么為鍵無(wú)效閉合,返回重新掃描。 圖4-3為CPU掃描第一行鍵盤(pán)的程序流程圖。單行鍵盤(pán)掃描能夠準(zhǔn)確確定被按下鍵所在的位置。開(kāi)始開(kāi)始掃描端口YN有鍵閉合?延時(shí)有鍵閉合?查表確定按鍵YNI/O口初始化返回按鍵值結(jié)束圖4-3單行鍵盤(pán)掃描流程圖 在本設(shè)計(jì)中,數(shù)字鍵0~9對(duì)應(yīng)輸入數(shù)字0~9,功能鍵A鍵是確定鍵,B鍵是取消鍵,C鍵是改密碼鍵,D鍵位閉鎖鍵,E鍵和F鍵閑置不用。4.3顯示模塊子程序 由于設(shè)計(jì)中要求能夠顯示密碼輸入界面、密碼輸入信息、密碼正確后提示界面、密碼錯(cuò)誤后提示界面和修改密碼相關(guān)界面等信息,故要用到很多個(gè)顯示子程序來(lái)顯示不同的內(nèi)容。雖然顯示子程序很多,但是由于其顯示原理都一樣,所以我就不一一介紹各個(gè)子程序了,只要能夠熟練使用LCD1602各個(gè)指令,這些大同小異的子程序也就不在話下了。 下面為L(zhǎng)CD1602寫(xiě)命令子函數(shù)和寫(xiě)數(shù)據(jù)子函數(shù)。//************************************************//函數(shù):寫(xiě)命令函數(shù)//功能:調(diào)用該函數(shù)可能定義1602液晶顯示器的各種命令//************************************************voidwrite_1602com(ucharcom){while(lcdbusy());//lcdbusy()為檢測(cè)LCD忙標(biāo)志函數(shù),lcdbusy〔〕返回值 e=0; //為1,那么說(shuō)明LCD正在工作 rw=0; rs=0; //rs=0時(shí)為寫(xiě)命令 P0=com; //待寫(xiě)命令賦P0 delay(1); e=1; //e由1→0跳變時(shí)為執(zhí)行命令 delay(1); e=0;}//*************************************************//函數(shù):寫(xiě)數(shù)據(jù)函數(shù)//功能:調(diào)入該函數(shù)可以向1602液晶顯示器輸入數(shù)據(jù)//*************************************************voidwrite_1602dat(uchardat){ while(lcdbusy()); e=0; rw=0; rs=1; //rs=1時(shí)為寫(xiě)數(shù)據(jù) P0=dat; delay(1); e=1; delay(1); e=0;}以下是LCD1602從第一行第一列開(kāi)始顯示N〔0<N≤16〕個(gè)字符的程序流程圖。開(kāi)始開(kāi)始調(diào)用寫(xiě)數(shù)據(jù)函數(shù)YN顯示N個(gè)字符了嗎?LCD初始化結(jié)束圖4-4顯示字符程序流程圖 顯示模塊子程序主要指根據(jù)LCD1602的命令和引腳功能來(lái)編寫(xiě),程序邏輯相當(dāng)簡(jiǎn)單。4.4掉電存儲(chǔ)子程序 掉電存儲(chǔ)子程序就是將初始密碼寫(xiě)進(jìn)AT24C02,單片機(jī)每次復(fù)位后從AT24C02中讀取密碼用來(lái)和輸入的密碼進(jìn)行比擬,以判斷輸入的密碼的正確性。當(dāng)密碼修改成功后,將新密碼寫(xiě)入AT24C02,以便單片機(jī)下次復(fù)位后使用。 掉電存儲(chǔ)模塊子程序主要涉及AT24C02的寫(xiě)操作方式和讀操作方式。AT24C02有2種不同的寫(xiě)操作形式和3種不同的讀操作方式。 寫(xiě)操作方式兩種寫(xiě)操作方式為:字節(jié)寫(xiě)和頁(yè)寫(xiě)。(1)字節(jié)寫(xiě)。字節(jié)寫(xiě)模式下,主機(jī)發(fā)送〔R/位置為0〕起始命令和器件地址信息,主機(jī)在收到AT24C02的應(yīng)答信號(hào)后,發(fā)送1~8位字節(jié)地址,寫(xiě)入AT24C02的地址指針中。對(duì)于高于8位的地址,主機(jī)連續(xù)發(fā)送兩個(gè)8位字節(jié)地址寫(xiě)入AT24C02中,主機(jī)在收到AT24C02的另外一個(gè)應(yīng)答信號(hào)后再發(fā)送數(shù)據(jù)到被尋址的存儲(chǔ)單元,AT24C02再次應(yīng)答,并在主機(jī)發(fā)出停止信號(hào)后開(kāi)始內(nèi)部數(shù)據(jù)的擦寫(xiě)。AT24C02在內(nèi)部擦寫(xiě)過(guò)程中不響應(yīng)主機(jī)的任何請(qǐng)求,因此在兩次寫(xiě)操作之間應(yīng)該留有足夠的反響時(shí)間。 字節(jié)寫(xiě)的時(shí)序是這樣的: 地址只有8位:開(kāi)始→器件地址→響應(yīng)→8位字節(jié)地址→響應(yīng)→數(shù)據(jù)→響應(yīng)→停止 地址高于8位:開(kāi)始→器件地址→響應(yīng)→高8位字節(jié)地址→響應(yīng)→低8位字節(jié)地址→響應(yīng)→數(shù)據(jù)→響應(yīng)→停止 本次設(shè)計(jì)中采用的是字節(jié)寫(xiě)方式。圖4-5為字節(jié)寫(xiě)的程序流程圖。開(kāi)始開(kāi)始發(fā)送起始命令分別取高8位地址和低8位地址結(jié)束發(fā)送寫(xiě)器件地址發(fā)送應(yīng)答信號(hào)發(fā)高8位地址發(fā)低8位地址發(fā)送應(yīng)答信號(hào)發(fā)送應(yīng)答信號(hào)發(fā)送數(shù)據(jù)發(fā)送應(yīng)答信號(hào)發(fā)送停止命令圖4-5將字節(jié)寫(xiě)入AT24C02的程序流程圖〔2〕頁(yè)寫(xiě)。頁(yè)寫(xiě)和字節(jié)寫(xiě)所不同的是:字節(jié)寫(xiě)一次只能寫(xiě)入一個(gè)字節(jié)數(shù)據(jù),頁(yè)寫(xiě)一次可以寫(xiě)入8個(gè)或16個(gè)字節(jié)數(shù)據(jù)。頁(yè)寫(xiě)的時(shí)序是這樣的: 地址只有8位:開(kāi)始→器件地址→響應(yīng)→8位字節(jié)地址→響應(yīng)→數(shù)據(jù)1→響應(yīng)→……→數(shù)據(jù)N→響應(yīng)→停止。 地址高于8位:開(kāi)始→器件地址→響應(yīng)→高8位字節(jié)地址→響應(yīng)→低8位字節(jié)地址→響應(yīng)→數(shù)據(jù)1→響應(yīng)→……→數(shù)據(jù)N→響應(yīng)→停止。讀操作方式 三種不同的讀操作方式為:讀當(dāng)前地址內(nèi)容〔立即地址讀取〕、讀隨機(jī)地址內(nèi)容〔隨機(jī)地址讀取〕和讀順序地址內(nèi)容〔順序地址讀取〕。 (1)讀當(dāng)前地址內(nèi)容。AT24C02的地址計(jì)數(shù)器內(nèi)容為最后操作字節(jié)的地址加1,所有如果上次讀寫(xiě)操作的地址為N,采用讀當(dāng)前地址內(nèi)容方式讀地址應(yīng)該從N+1地址處開(kāi)始。AT24C02接收到器件地址信號(hào)并且I2C總線允許接收數(shù)據(jù)〔R/=1〕,那么首先發(fā)送一個(gè)應(yīng)答信號(hào)然后輸出數(shù)據(jù)。數(shù)據(jù)輸出完畢后,主機(jī)發(fā)送停止信號(hào),讀操作完畢。 (2)讀隨機(jī)地址內(nèi)容。這種讀操作方式允許主機(jī)讀出AT24C02的任意字節(jié)。主機(jī)置通過(guò)R/位為0,發(fā)送開(kāi)始信號(hào)、AT24C02地址和欲讀取的字節(jié)數(shù)據(jù)地址來(lái)執(zhí)行一次偽操作,在AT24C02應(yīng)答后,主機(jī)再一次發(fā)送開(kāi)始信號(hào)和AT24C02的地址,此時(shí)R/位置1,AT24C02響應(yīng)并應(yīng)答信號(hào),然后輸出字節(jié)數(shù)據(jù),最后主機(jī)以一個(gè)停止信號(hào)結(jié)束數(shù)據(jù)的讀取。 (3)讀順序地址內(nèi)容。讀順序地址內(nèi)容操作方式通過(guò)立即讀或隨機(jī)地址讀操作來(lái)啟動(dòng),主機(jī)在AT24C02發(fā)送完一個(gè)8位數(shù)據(jù)后產(chǎn)生一個(gè)應(yīng)答信號(hào),告知AT24C02主機(jī)要求更多數(shù)據(jù)。AT24C02收到主機(jī)的應(yīng)答信號(hào)后繼續(xù)發(fā)送數(shù)據(jù),直到主機(jī)不發(fā)送應(yīng)答信號(hào)響應(yīng)而發(fā)送停止信號(hào)后操作結(jié)束。 下面是三種不同的讀操作方式時(shí)序比照: 讀當(dāng)前地址內(nèi)容:開(kāi)始→讀器件地址→響應(yīng)→數(shù)據(jù)→無(wú)響應(yīng)→停止。 讀隨機(jī)地址內(nèi)容:開(kāi)始→寫(xiě)器件地址→響應(yīng)→要讀的字節(jié)地址→響應(yīng)→開(kāi)始→讀器件地址→響應(yīng)→數(shù)據(jù)→無(wú)響應(yīng)→停止。 讀順序地址內(nèi)容:開(kāi)始→寫(xiě)器件地址→響應(yīng)→要讀的字節(jié)地址→響應(yīng)→開(kāi)始→讀器件地址→響應(yīng)→數(shù)據(jù)1→響應(yīng)→……→數(shù)據(jù)N→無(wú)響應(yīng)→停止。 本次設(shè)計(jì)中采用的是讀隨機(jī)地址內(nèi)容操作方式。程序流程圖如圖4-6所示。開(kāi)始開(kāi)始發(fā)送起始命令分別取高8位地址和低8位地址結(jié)束發(fā)送寫(xiě)器件地址發(fā)送應(yīng)答信號(hào)發(fā)高8位地址發(fā)低8位地址發(fā)送應(yīng)答信號(hào)發(fā)送應(yīng)答信號(hào)發(fā)送非應(yīng)答信號(hào)發(fā)送停止命令發(fā)送起始命令發(fā)送讀器件地址發(fā)送應(yīng)答信號(hào)將讀出的數(shù)據(jù)送出圖4-6讀AT24C02相應(yīng)地址內(nèi)容的程序流程圖 掉電存儲(chǔ)功能就是通過(guò)調(diào)用向AT24C02寫(xiě)字節(jié)數(shù)據(jù)的程序和從AT24C02讀字節(jié)數(shù)據(jù)的程序來(lái)實(shí)現(xiàn)的。由于AT24C02在內(nèi)部擦寫(xiě)過(guò)程中不會(huì)應(yīng)答任何來(lái)自主機(jī)的請(qǐng)求,所以當(dāng)向AT24C02連續(xù)寫(xiě)多個(gè)字節(jié)數(shù)據(jù)時(shí)有可能不成功,這可以通過(guò)對(duì)同一字節(jié)數(shù)據(jù)寫(xiě)屢次的方法來(lái)實(shí)現(xiàn)。4.5定時(shí)器中斷子程序 為了防止戶主以外的“借用〞戶主的密碼,當(dāng)沒(méi)有任何按鍵被按下的狀態(tài)持續(xù)一段時(shí)間后〔比方20S內(nèi)〕,應(yīng)該馬上關(guān)閉顯示器屏幕,同時(shí)禁止按鍵的輸入。這樣做可以防止因?yàn)閼糁魍浲顺鱿到y(tǒng)而使他人有機(jī)可乘。圖4-7為實(shí)現(xiàn)此功能的程序流程圖。中斷效勞程序入口中斷效勞程序入口50毫秒數(shù)增加1YN50毫秒數(shù)有20了?重裝初值結(jié)束進(jìn)位為1秒,毫秒數(shù)清0秒數(shù)有20了?關(guān)閉屏幕鎖定鍵盤(pán)輸入YN產(chǎn)生定時(shí)中斷程序入口設(shè)置初值采用定時(shí)器0設(shè)置定時(shí)器工作方式開(kāi)中斷結(jié)束圖4-7定時(shí)關(guān)閉屏幕和鎖定鍵盤(pán)輸入程序流程圖 程序中,使定時(shí)器0每50毫秒產(chǎn)生一次中斷,因此中斷每產(chǎn)生20次為1秒,當(dāng)秒數(shù)為20時(shí)〔每次有鍵輸入時(shí)都執(zhí)行50毫秒數(shù)和秒數(shù)清0操作〕,關(guān)閉屏幕,并禁止鍵盤(pán)輸入。 當(dāng)定時(shí)/計(jì)數(shù)器工作在定時(shí)方式時(shí),定時(shí)時(shí)間的計(jì)算公式為:定時(shí)時(shí)間=〔216—計(jì)數(shù)初值〕×定時(shí)周期 晶振頻率為12MHz時(shí),定時(shí)/計(jì)數(shù)器的定時(shí)周期為1μs,所以定時(shí)50ms的定時(shí)/計(jì)數(shù)器初值為:計(jì)數(shù)初值=216—500004.6密碼輸入子程序 當(dāng)從鍵盤(pán)輸入密碼時(shí),應(yīng)當(dāng)將輸入的密碼存放,以便用做密碼的相關(guān)操作〔判斷,修改和保存等〕,同時(shí)每輸入一位密碼應(yīng)相應(yīng)地在顯示器上顯示一個(gè)“*〞號(hào)。圖4-8是密碼輸入子程序的流程圖。開(kāi)始開(kāi)始N有鍵輸入?掃描鍵盤(pán)Y是數(shù)字鍵?輸入的密碼長(zhǎng)度小于6?將輸入的數(shù)放入數(shù)組在顯示器上顯示“*〞是取消鍵?輸入的密長(zhǎng)度大于0?去除數(shù)組中的最后一位數(shù)去除顯示器上的最后一個(gè)“*〞是確認(rèn)鍵?結(jié)束YNNNNYYYNY圖4-8密碼輸入程序流程圖輸入密碼時(shí),當(dāng)輸入的密碼位數(shù)小于6位的時(shí)候,每按下一次數(shù)字鍵,就將此數(shù)字存入數(shù)組。當(dāng)輸入的密碼位數(shù)不小于6位時(shí),再次按下數(shù)字鍵,程序就不進(jìn)行任何處理,繼續(xù)掃描鍵盤(pán),此時(shí)只有按下確定鍵或者取消鍵程序才做出相應(yīng)反響。取消鍵的功能是退格。當(dāng)不小心輸錯(cuò)密碼時(shí),可以退格將輸錯(cuò)的位去除,退格一次密碼的位數(shù)減一位,同時(shí)顯示器上的“*〞個(gè)數(shù)也減1。當(dāng)輸入的密碼位數(shù)變?yōu)?時(shí),取消鍵不再起作用。4.7報(bào)警子程序 報(bào)警子程序的原理很簡(jiǎn)單,即當(dāng)輸入密碼錯(cuò)誤次數(shù)超過(guò)規(guī)定的最高允許次數(shù)時(shí),不斷給蜂鳴器脈沖,使其不斷發(fā)音。同時(shí),由于CPU一直在給蜂鳴器提供脈沖,故無(wú)暇處理諸如密碼掃描等事件,也就是說(shuō),在蜂鳴器報(bào)警的同時(shí)也屏蔽了鍵盤(pán)的輸入。 本次設(shè)計(jì)中,密碼輸入錯(cuò)誤次數(shù)不得高于3次。圖4-9為報(bào)警子程序流程圖。開(kāi)始開(kāi)始N錯(cuò)誤次數(shù)大于3?顯示器清屏Y關(guān)閉顯示器給蜂鳴器一個(gè)脈沖結(jié)束圖4-9報(bào)警子程序流程圖第5章聯(lián)合仿真和調(diào)試在PROTEUS中畫(huà)出仿真電路圖和在KEIL中編寫(xiě)出程序后,需要驗(yàn)證其正確性和可行性,最好的方法就是就它們聯(lián)合起來(lái)仿真和調(diào)試。 KEIL和PROTEUS都是單片機(jī)愛(ài)好者和單片機(jī)相關(guān)工作者經(jīng)常用到的具有相當(dāng)好的輔助功能的軟件工具。KEIL是一款具有強(qiáng)悍功能的51系列兼容單片機(jī)C語(yǔ)言軟件開(kāi)發(fā)系統(tǒng),為用戶提供豐富的庫(kù)函數(shù)和功能強(qiáng)大的集成開(kāi)發(fā)調(diào)試工具,其生成目標(biāo)代碼的效率非常之高,且多數(shù)語(yǔ)句生成的匯編代碼很緊湊,容易理解。PROTEUS是目前世界上唯一一款將電路仿真軟件、PCB設(shè)計(jì)軟件和虛擬模型仿真軟件三合一的設(shè)計(jì)平臺(tái)。PROTEUS不僅具有其它電子設(shè)計(jì)自動(dòng)化工具軟件的仿真功能,還能仿真單片機(jī)及外圍器件,是目前最好的仿真單片機(jī)及外圍器件的工具。 KEIL和PROTEUS都是單片機(jī)相關(guān)設(shè)計(jì)中經(jīng)常用到的軟件,KEIL和PROTEUS的聯(lián)合仿真和調(diào)試能夠相當(dāng)清晰地反映系統(tǒng)的各個(gè)功能模塊和器件的工作情況。通過(guò)KEIL和PROTEUS的聯(lián)合調(diào)試,單步執(zhí)行程序或者在程序中設(shè)置斷點(diǎn),可以有效地查看各語(yǔ)句的執(zhí)行情況和各變量的值,從而找到程序中的錯(cuò)誤。 KEIL和PROTEUS的聯(lián)合調(diào)試和仿真步驟如下:(1)在KEIL中建立工程,將編寫(xiě)好的程序添加到工程中。(2)在KEIL中為工程設(shè)置選項(xiàng)。為了實(shí)現(xiàn)和PROTEUS的聯(lián)合調(diào)試,除了一般工程選項(xiàng)的設(shè)置外,還要設(shè)置DUBUG項(xiàng)。具體方法為:?jiǎn)螕簟肮こ滩藛?為目標(biāo)‘目標(biāo)1’設(shè)置選項(xiàng)〞選項(xiàng),彈出窗口,點(diǎn)擊“Debug〞按鈕。在出現(xiàn)的對(duì)話框里在右欄上部的下拉菜單里選中“ProteusVSMMonitor一51Driver〞。并且還要點(diǎn)擊一下“Use〞前面說(shuō)明選中的小圓點(diǎn)。再點(diǎn)擊“Setting〞按鈕,設(shè)置通信接口,在“Host〞后面添上“127.0.0.1〞,如果使用的不是同一臺(tái)電腦,那么需要在這里添上另一臺(tái)電腦的IP地址(另一臺(tái)電腦也應(yīng)安裝Proteus)。在“Port〞后面添加“8000〞,然后點(diǎn)擊“OK〞按鈕。最后將工程編譯,進(jìn)入調(diào)試狀態(tài),并運(yùn)行。設(shè)置完之后,重新編譯、鏈接、生成可執(zhí)行文件。(3)PROTEUS設(shè)置。進(jìn)入Proteus的ISIS,鼠標(biāo)左鍵點(diǎn)擊菜單“Debug〞,選中“使用遠(yuǎn)程調(diào)試監(jiān)控〞。(4)將可執(zhí)行文件加到單片機(jī)中。翻開(kāi)PROTEUS仿真圖,雙擊單片機(jī),將KEIL產(chǎn)生的“*.HEX〞文件添加到單片機(jī)中。(5)KEIL與PROTEUS連接仿真調(diào)試。點(diǎn)擊PROTEUS的開(kāi)始仿真按鈕即可開(kāi)始KEIL與PROTEUS的聯(lián)合仿真和調(diào)試。 本次設(shè)計(jì)的聯(lián)合仿真結(jié)果如下列圖所示。圖5-1密碼正確后的仿真圖 密碼輸入正確后,點(diǎn)亮二極管,顯示器顯示歡送回家畫(huà)面。通過(guò)觀察鍵盤(pán)引腳的電平,還能知道CPU正在掃描鍵盤(pán)第四行,等待功能鍵的輸入。本設(shè)計(jì)中鍵盤(pán)第四行只用到了前兩個(gè)按鍵,后兩個(gè)按鍵沒(méi)有被使用。第一個(gè)按鍵為改密碼鍵,通過(guò)按鍵此鍵可以進(jìn)入修改密碼功能界面;第二個(gè)鍵位閉鎖鍵,通過(guò)按下此鍵可以將鎖閉合,在設(shè)計(jì)中的直接表現(xiàn)是發(fā)光二極管熄滅。第6章實(shí)物設(shè)計(jì)和制作聯(lián)合仿真調(diào)試通過(guò)后,本次設(shè)計(jì)業(yè)就進(jìn)入了最后一步,但也是最關(guān)鍵的一步——實(shí)物設(shè)計(jì)和制作。 由于電路板空間有限,所有在進(jìn)行實(shí)物設(shè)計(jì)之前應(yīng)該根據(jù)系統(tǒng)的仿真電路圖做好各功能模塊的整體布局,這樣既可以使得實(shí)物設(shè)計(jì)的順利進(jìn)行,也可以最大化的令做出來(lái)的實(shí)物看起來(lái)簡(jiǎn)潔而美觀。 在本次設(shè)計(jì)中,實(shí)物設(shè)計(jì)是按以下步驟完成的: (1)單片機(jī)最小系統(tǒng)的電路焊接。只有保證了單片機(jī)最小系統(tǒng)的正確性,才能在接下來(lái)的其他模塊設(shè)計(jì)和焊接出現(xiàn)錯(cuò)誤時(shí)能夠方便地檢查出原因,因此單片機(jī)最小系統(tǒng)是必須首先完成的。 (2)下載口電路的焊接。單片機(jī)最小系統(tǒng)電路焊接好后,需要檢查其正確性,這就需要往單片機(jī)中下載一個(gè)簡(jiǎn)單的程序,看其是否能正常工作和復(fù)位,這就需要焊接一個(gè)下載口電路,此下載口電路還可以當(dāng)做電源口使用,通過(guò)數(shù)據(jù)線連接電源即可給單片機(jī)供電。 圖6-1為單片機(jī)下載口電路接線圖。圖6-1下載口電路接線圖 其中MOSI接口接單片機(jī)的P1.5口,RST接單片機(jī)的復(fù)位端口,SCK接單片機(jī)的P1.7口,MISO接單片機(jī)的P1.6口。下載口的2端口接電源,4、6、8、10端口接地。在下載口接好后,應(yīng)用單片機(jī)程序燒寫(xiě)軟件通過(guò)下載口將測(cè)試程序下載進(jìn)入單片機(jī)測(cè)試最小系統(tǒng)是否焊接正確。一般使用的測(cè)試方法是在單片機(jī)端口接一個(gè)發(fā)光二極管,通過(guò)程序控制二極管發(fā)光,假設(shè)能點(diǎn)亮二極管那么最小系統(tǒng)焊接正確。在本次設(shè)計(jì)中使用的單片機(jī)程序燒寫(xiě)軟件為AVR_fighter。 (3)液晶顯示器及電路焊接。按照仿真電路原理圖和液晶顯示器接口使用說(shuō)明焊接好液晶顯示器,將顯示子程序下載入單片機(jī),假設(shè)顯示器能夠按照要求顯示字符那么焊接正確。 (4)鍵盤(pán)模塊焊接。按照鍵盤(pán)模塊仿真圖焊接按鍵,之后將測(cè)試程序?qū)雴纹瑱C(jī)中檢驗(yàn)按鍵是否正確焊接成功。本設(shè)計(jì)中檢驗(yàn)按鍵的程序功能是當(dāng)有按鍵按下時(shí),將所按下的鍵值在液晶顯示器中顯示出來(lái)。 (5)E2PROM存儲(chǔ)器的焊接。根據(jù)AT24C02的引腳介紹,將AT24C02接到單片機(jī)上。測(cè)試AT24C02是否焊接正確的程序功能是將一個(gè)數(shù)組中的數(shù)寫(xiě)入AT24C02,再將這一個(gè)數(shù)組中的數(shù)從AT24C02中讀出放入另一個(gè)數(shù)組中,比擬兩個(gè)數(shù)組中的數(shù)是否相同,假設(shè)相同那么AT24C02的電路焊接正確,掉電存儲(chǔ)功能模塊功能實(shí)現(xiàn)。 (6)將蜂鳴器和發(fā)光二極管焊接到單片機(jī)系統(tǒng)中,將本次設(shè)計(jì)的源程序下載進(jìn)入單片機(jī)中,看是否所有功能都實(shí)現(xiàn)了。假設(shè)能夠?qū)崿F(xiàn)所有功能那么本次設(shè)計(jì)也就宣告完成,假設(shè)不能實(shí)現(xiàn),那么根據(jù)出現(xiàn)的問(wèn)題檢查線路,找出原因,直至能夠?qū)崿F(xiàn)所有功能。 在實(shí)物制作過(guò)程中,應(yīng)該注意幾個(gè)問(wèn)題:第一,根據(jù)仿真圖焊接電路,但不能盡信仿真圖。仿真圖始終不能代替實(shí)物調(diào)試,在實(shí)物制作過(guò)程中應(yīng)根據(jù)實(shí)際情況調(diào)試電路;第二,調(diào)試和查找錯(cuò)誤過(guò)程中,如非必要應(yīng)盡量不要帶電操作,以免損壞器件;第三,電路布局應(yīng)盡量工整。工整簡(jiǎn)潔的電路布局不但看著美觀,而且能夠更方便地查找電路錯(cuò)誤。 本次設(shè)計(jì)的實(shí)物制作,由于經(jīng)驗(yàn)缺乏的原因,許多焊接點(diǎn)焊得不夠美觀,但是整體布局還是夠簡(jiǎn)潔工整的。這也是設(shè)計(jì)中雖然經(jīng)驗(yàn)缺乏,制作過(guò)程中出現(xiàn)了各種各樣的問(wèn)題,但是進(jìn)展卻很順利的原因,簡(jiǎn)潔工整的布局使得查找問(wèn)題變得更加容易,能夠方便的理清電路,找出錯(cuò)誤并加以改正??偨Y(jié)本次設(shè)計(jì)經(jīng)過(guò)近兩個(gè)月時(shí)間忙碌終于完成了,所有設(shè)計(jì)要求具備的功能都得到了實(shí)現(xiàn),具體如下:(1)加電后,單片機(jī)自動(dòng)復(fù)位,LCD顯示提示輸入密碼的信息;(2)輸入密碼時(shí),只逐位顯示“*〞,以防止密碼泄漏;(3)在按鍵輸入的過(guò)程中,如果不小心輸錯(cuò),可以去除所輸入的錯(cuò)誤內(nèi)容,然后繼續(xù)輸入;(4)當(dāng)密碼輸入完畢并按下確認(rèn)鍵后,單片機(jī)將輸入的密碼與設(shè)定的密碼比擬,假設(shè)密碼正確,那么翻開(kāi)密碼鎖;假設(shè)密碼不正確,那么無(wú)法翻開(kāi)密碼鎖;(5)在密碼輸入錯(cuò)誤次數(shù)到達(dá)預(yù)設(shè)值時(shí),啟動(dòng)報(bào)警程序報(bào)警;(6)可以在開(kāi)鎖后進(jìn)行密碼的修改,但需要兩次輸入確認(rèn);(7)修改的密碼存入AT24C02,不會(huì)因?yàn)榈綦姷脑蚨鴨适В?8)在長(zhǎng)時(shí)間沒(méi)有按鍵輸入時(shí),系統(tǒng)鎖定顯示器,并禁止按鍵的輸入;(9)設(shè)定一個(gè)備用密碼,防止常用密碼忘記時(shí)無(wú)法開(kāi)門(mén)。由于設(shè)計(jì)水平有限,此次設(shè)計(jì)還是存在一些小缺陷的,比方報(bào)警系統(tǒng)的報(bào)警音量不夠大,雖然加了一個(gè)三極管作為驅(qū)動(dòng),使得問(wèn)題得到了改善,但是問(wèn)題還是沒(méi)有得到完美的解決。另外,通過(guò)這幾個(gè)月對(duì)電子密碼鎖的研究和學(xué)習(xí),我認(rèn)為本次設(shè)計(jì)中使用的這種鍵盤(pán)輸入密碼的方式可以進(jìn)行改革。在越來(lái)越高科技化的今天,遙控控制顯的愈發(fā)重要,今后的電子密碼鎖應(yīng)該具有以紅外技術(shù)或無(wú)線電技術(shù)為輔助的密碼按鍵輸入遠(yuǎn)程交互技術(shù),這樣就能遠(yuǎn)程輸入密碼完成操作。也可以放棄傳統(tǒng)的按鍵輸入密碼模式,借助傳感器技術(shù)運(yùn)用聲控來(lái)實(shí)現(xiàn)密碼輸入,又或者使用人臉識(shí)別技術(shù),或者用戶指紋識(shí)別技術(shù)代替?zhèn)鹘y(tǒng)的按鍵輸入,這些都可以使開(kāi)鎖的時(shí)間更短更方便,同時(shí)是鎖更平安。致謝在老師的耐心指導(dǎo)和同學(xué)們的熱情幫助下,經(jīng)過(guò)近三個(gè)月的不懈努力,本設(shè)計(jì)終于根本完成。在做畢業(yè)設(shè)計(jì)的這段時(shí)間里,王老師給我提供了極大的幫助和指導(dǎo)。從設(shè)計(jì)方向的分析到開(kāi)題辯論報(bào)告的撰寫(xiě),從具體程序的設(shè)計(jì)到器件的選擇,王老師都給了我很多很有用的建議。另外,王老師親切和藹、能和學(xué)生們打成一片的工作態(tài)度和認(rèn)真負(fù)責(zé)的治學(xué)作風(fēng)也給了我很深的印象。在此,對(duì)王老師表達(dá)最真誠(chéng)的謝意和最崇高的敬意。在做設(shè)計(jì)的過(guò)程中,自動(dòng)化0803班的同學(xué)們也給我提供了很大的幫助,他們的關(guān)心和保護(hù)不但幫助我更好地完成設(shè)計(jì),更使我感受到了這個(gè)集體里家一樣的溫暖。非常感謝自動(dòng)化0803班的同學(xué)們。同時(shí),在即將離開(kāi)校園的此時(shí),衷心感謝每一位教導(dǎo)過(guò)我的老師和一直默默支持和鼓勵(lì)我的家人。最后,我要向百忙之中抽出時(shí)間對(duì)本文進(jìn)行審閱、評(píng)議和參與本人論文辯論的各位老師表示感謝。參考文獻(xiàn)[1]康華光,陳大欽.電子技術(shù)根底模擬局部[M].北京:高等教育出版社,2005.[2]彭容修.數(shù)字電子技術(shù)根底.武漢:武漢理工大學(xué)出版社,2007[3]譚浩強(qiáng).C程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2005[4]姜志海,黃玉清,劉連鑫.單片機(jī)原理及應(yīng)用.北京:電子工業(yè)出版社,2023[5]張苗,孫斌.住宅小區(qū)平安防范存在的問(wèn)題和對(duì)策.摘自《安防科技平安經(jīng)理人》,2003[6]郭宏亮.PC機(jī)與AT89C51單片機(jī)的串行通信接口設(shè)計(jì)[M].平原大學(xué)學(xué)報(bào),2007[7]張洪潤(rùn).單片機(jī)應(yīng)用技術(shù)教程.北京:清華大學(xué)出版社,1997[8]周航慈.單片機(jī)應(yīng)用程序設(shè)計(jì)技術(shù).北京:航空航天大學(xué)出版社,2001[9]劉和平.劉躍.單片機(jī)原理及應(yīng)用.重慶.重慶大學(xué)出版社,2004[10]陳明熒.89C51單片機(jī)課程設(shè)計(jì)實(shí)訓(xùn)教材.北京.清華大學(xué)出版社,2004[11]李朝青.單片機(jī)原理及接口技術(shù).北京.北京航空航天大學(xué)出版社,2002[12]李華.MCS-51系列單片機(jī)使用接口技術(shù).北京航空航天大學(xué)出版社,1993[13]楊欣.王玉鳳.51單片機(jī)應(yīng)用實(shí)例詳解.清華大學(xué)出版社,2023[14]王寬仁.可靠平安的智能密碼鎖.電子技術(shù)應(yīng)用,2001[15]侯寶玉.基于Proteus的51系列單片機(jī)設(shè)計(jì)與仿真[M].北京電子工業(yè)出版社,2001[16]Valvano,Jonathan.W,MicrocomputerSystems.TexasInstrumentsincBangalore,India[17]Mazor,S.Moore'slaw,microcomputer,andme.Solid-StateCircuitsMagazine,IEEE,2023[18]AdamDunkels.FullTCP/IPfor8-bitarchitectures[J].CombinationLockandLoad.PopularMechanics,2023 [19]TheIntelMicroprocessorsArchitecture,Programming,andInterfacing.高等教育出版社(影印版),2001 [20]StevenF.Barrett.DaneilJ.Pack.EmbeddedSystem[M].北京:電子工業(yè)出版社,2006附錄1設(shè)計(jì)實(shí)物圖附圖1實(shí)物正面圖附圖2實(shí)物反面圖附錄2程序源代碼程序源代碼:#include<reg51.h>#include<string.h>#include<intrins.h>#include<stdio.h>#defineucharunsignedchar#defineuintunsignedint#defineNOP3()_nop_();_nop_();_nop_()uchartime_1s=0,i=0;uchartime_50ms=0;sbitrs=P2^2;sbitrw=P2^1;sbite=P2^0;sbitSCL=P2^5;sbitSDA=P2^6;sbitP35=P3^5;sbitP36=P3^6;sbitP37=P3^7;uchardatakong[7]={'\0','\0','\0','\0','\0','\0',0};uchardatamima[7]={'1','2','3','4','5','6',0};uchardatamima0[7]={'\0','\0','\0','\0','\0','\0',0};uchardatamima1[7]={'\0','\0','\0','\0','\0','\0',0};uchardatamima2[7]={'\0','\0','\0','\0','\0','\0',0};uchardatamima3[7]={'\0','\0','\0','\0','\0','\0',0};uchardatatable1[7]={'1','9','9','0','1','0',0};ucharcodetable2[15]="EnterPassword:";ucharcodetable4[16]="PasswordError!";ucharcodetable5[14]="OldPassword:";ucharcodetable6[14]="NewPassword:";ucharcodetable7[12]="EnterAgain:";ucharcodetable8[12]="EnterError!";ucharcodetable9[15]="ModifySuccess!";ucharcodetable10[13]="Welcomeback!";//***********************************//相關(guān)函數(shù)的聲明//***********************************voiddelay1ms();voiddelay(ucharn);voidwrite_1602com(ucharcom);voidwrite_1602dat(uchardat);voidinitinal(void);bitlcdbusy();ucharkey_scan();voidenter_password(void); //功能:顯示輸入密碼畫(huà)面voidpassword_error(void);//功能:顯示輸入密碼錯(cuò)誤后的畫(huà)面voidok(void);//功能:顯示輸入密碼正確后的畫(huà)面voidnew_password(void);//功能:顯示輸入新密碼的畫(huà)面voidenter_again(void);//功能:顯示再次輸入新密碼的畫(huà)面voidenter_error(void);//功能:顯示兩次輸入的密碼不一樣后的畫(huà)面voidmodify_success(void);//功能:顯示更改成功后的畫(huà)面voidwelcome(void);//功能:顯示歡送畫(huà)面voidwtite_1602com(ucharcom);voidwrite_1602dat(uchardat);/*****************************************************函數(shù)功能:延時(shí)假設(shè)干毫秒入口參數(shù):n***************************************************/voiddelay(ucharn){ unsignedchari,x,y; for(i=0;i<n;i++){for(x=0;x<10;x++)for(y=0;y<33;y++);}}/*****************************************************函數(shù)功能:延時(shí)1ms***************************************************/voiddelay1(ucharn){unsignedchari,j; for(i=0;i<n;i++){for(j=0;j<10;j++)delay(10);} }/*****************************************************函數(shù)功能:定時(shí)器子函數(shù),調(diào)用該函數(shù)可以計(jì)時(shí)***************************************************/voidtime(){ TMOD=0x01; //定時(shí)器0,工作方式1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; //50ms中斷一次 EA=1;ET0=1;TR0=1;}/*****************************************************函數(shù)功能:定時(shí)函數(shù),在一段時(shí)間內(nèi)沒(méi)有鍵按下那么關(guān)閉顯示器***************************************************/voidtime_1()interrupt1{TH0=(65536-65536)/256;TL0=(65536-65536)%256;time_50ms++; if(time_50ms==20){time_1s++;time_50ms=0;} if(time_1s==20){write_1602com(0x01);write_1602com(0x0c); time_1s=0;while(1);}}//***********************************//功能:使蜂鳴器發(fā)音//***********************************voidwarn(){P37=1;NOP3();NOP3();NOP3(); P37=0;NOP3();NOP3();NOP3();}//***********************************//函數(shù)名:bitlcdbusy()//功能:檢測(cè)忙標(biāo)志//***********************************bitlcdbusy(){bitresult; rs=0;rw=1;e=1; delay(1); result=(bit)(P0&0x80);e=0; returnresult;}//************************************************//函數(shù)名:寫(xiě)命令函數(shù)//功能:調(diào)用該函數(shù)可能定義1602液晶顯示器的各種命令//************************************************voidwrite_1602com(ucharcom){ while(lcdbusy()); e=0; rw=0; rs=0; P0=com; delay(1); e=1; delay(1);e=0;}//*************************************************//函數(shù)名:寫(xiě)數(shù)據(jù)函數(shù)//功能:調(diào)入該函數(shù)可以向1602液晶顯示器輸入數(shù)據(jù)//*************************************************voidwrite_1602dat(uchardat){ while(lcdbusy());e=0;rw=0;rs=1; P0=dat;delay(1);e=1;delay(1);e=0;}//**************************************************//函數(shù)名:初始化函數(shù)//功能:對(duì)1602液晶顯示器進(jìn)行初始化//**************************************************voidinitinal(void){ rs=0;e=0; write_1602com(0x38);//數(shù)據(jù)總線為8位,顯示2行,0=5×7點(diǎn)陣/每字符 write_1602com(0x0f);//顯示功能開(kāi),有光標(biāo),光標(biāo)不閃爍 write_1602com(0x06);//顯示光標(biāo) write_1602com(0x01);//清屏 write_1602com(0x80);}//*********************************************//函數(shù)名:顯示函數(shù)//功能:顯示輸入密碼//*********************************************voidenter_password(void){ucharj; initinal();write_1602com(0x80); for(j=0;j<15;j++){write_1602dat(table2[j]);delay(10);} write_1602com(0xc0+0x0a);}//********************************************//函數(shù)名:顯示函數(shù)//功能:顯示輸入密碼錯(cuò)誤后的畫(huà)面//********************************************voidpassword_error(void){ucharj; write_1602com(0x0c);//顯示功能開(kāi),無(wú)光標(biāo) write_1602com(0x80);//顯示位置第一行第一列 write_1602com(0x01); for(j=0;j<15;j++){write_1602dat(table4[j]);delay(10);}}//******************************************//函數(shù)名:顯示函數(shù)//功能:顯示輸入舊密碼的畫(huà)面//******************************************voidold_password(void){ucharj; initinal();write_1602com(0x80); for(j=0;j<14;j++){write_1602dat(table5[j]);delay(10);} write_1602com(0xc0+0x0a);}//******************************************//函數(shù)名:顯示函數(shù)//功能:顯示輸入新密碼的畫(huà)面//******************************************voidnew_password(void){ucharj;initinal(); write_1602com(0x80); for(j=0;j<14;j++){write_1602dat(table6[j]);delay(10);} write_1602com(0xc0+0x0a);}//******************************************//函數(shù)名:顯示函數(shù)//功能:顯示再次輸入新密碼的畫(huà)面//******************************************voidenter_again(void){ucharj;initinal(); write_1602com(0x80); for(j=0;j<12;j++){write_1602dat(table7[j]);delay(10);} write_1602com(0xc0+0x0a);}//********************************************//函數(shù)名:顯示函數(shù)//功能:顯示兩次輸入的密碼不一樣后的畫(huà)面//********************************************voidenter_error(void){ucharj; write_1602com(0x0c);//顯示功能開(kāi),無(wú)光標(biāo) write_1602com(0x80);//顯示位置第一行第一列 write_1602com(0x01); for(j=0;j<12;j++){write_1602dat(table8[j]);delay(10);}}//******************************************//函數(shù)名:顯示函數(shù)//功能:顯示更改成功之后的畫(huà)面//******************************************voidmodify_success(void){ucharj;write_1602com(0x0c); write_1602com(0x80);write_1602com(0x01); for(j=0;j<15;j++){write_1602dat(table9[j]);delay(10);}}//******************************************//函數(shù)名:顯示函數(shù)//功能:顯示歡送畫(huà)面//******************************************voidwelcome(void){ ucharj; write_1602com(0x0c);//顯示功能開(kāi),無(wú)光標(biāo) write_1602com(0x80);//顯示位置第一行第4列 write_1602com(0x01); write_1602com(0x80); for(j=0;j<13;j++){write_1602dat(table10[j]);delay(10);}}//**************************************************//函數(shù)名:鍵盤(pán)識(shí)別函數(shù)//功能:通過(guò)掃描對(duì)鍵盤(pán)進(jìn)行識(shí)別//**************************************************ucharkey_num(){uinttemp,b;while(1){P1=0xfe;//開(kāi)始掃描第一行 temp=P1; temp=temp&0xf0; if(temp!=0xf0){delay(1);temp=P1;b=temp;temp=temp&0xf0; if(temp!=0xf0){ while(temp!=0xf0){temp=P1;temp=temp&0xf0;} switch(b){case0xee:return'4';break; case0xde:return'3';break; case0xbe:return'2';break; case0x7e:return'1';break;}}} P1=0xfd;//掃描第二行 temp=P1; temp=temp&0xf0; if(temp!=0xf0){delay(1);temp=P1;b=temp;temp=temp&0xf0; if(temp!=0xf0){ while(temp!=0xf0){temp=P1;temp=temp&0xf0;} switch(b){case0xed:return'8';break; case0xdd:return'7';break; case0xbd:return'6';break; case0x7d:r
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版機(jī)電設(shè)備安裝合同范本
- 2024版學(xué)校廢物管理承包合同3篇
- 2025年度電子元器件展參展商權(quán)益保障協(xié)議模板3篇
- 2025年度城市垃圾分類(lèi)處理承包合同3篇
- 2025年度房屋租賃管理及押金合同4篇
- 二零二四平安普惠企業(yè)融資借款合同3篇
- 2025版路燈設(shè)施智能監(jiān)控系統(tǒng)建設(shè)合同4篇
- 2025年度高新技術(shù)產(chǎn)業(yè)園區(qū)廠房租賃合同補(bǔ)充協(xié)議3篇
- 2024離婚訴訟費(fèi)用分擔(dān)及財(cái)產(chǎn)處理合同
- 2025年度旅游景區(qū)旅游安全風(fēng)險(xiǎn)評(píng)估與應(yīng)急預(yù)案合同4篇
- 安徽省合肥市2021-2022學(xué)年七年級(jí)上學(xué)期期末數(shù)學(xué)試題(含答案)3
- 教育專(zhuān)家報(bào)告合集:年度得到:沈祖蕓全球教育報(bào)告(2023-2024)
- 肝臟腫瘤護(hù)理查房
- 護(hù)士工作壓力管理護(hù)理工作中的壓力應(yīng)對(duì)策略
- 2023年日語(yǔ)考試:大學(xué)日語(yǔ)六級(jí)真題模擬匯編(共479題)
- 皮帶拆除安全技術(shù)措施
- ISO9001(2015版)質(zhì)量體系標(biāo)準(zhǔn)講解
- 《培訓(xùn)資料緊固》課件
- 黑龍江省政府采購(gòu)評(píng)標(biāo)專(zhuān)家考試題
- 成品煙道安裝施工方案
- 醫(yī)療免責(zé)協(xié)議書(shū)范本
評(píng)論
0/150
提交評(píng)論