基于單片機(jī)的電子密碼鎖設(shè)計(jì)_第1頁(yè)
基于單片機(jī)的電子密碼鎖設(shè)計(jì)_第2頁(yè)
基于單片機(jī)的電子密碼鎖設(shè)計(jì)_第3頁(yè)
基于單片機(jī)的電子密碼鎖設(shè)計(jì)_第4頁(yè)
基于單片機(jī)的電子密碼鎖設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

題目基于單片機(jī)的電子密碼鎖設(shè)計(jì)目錄摘要 1第一章緒論 21.1論文的背景和意義 21.2論文研究的內(nèi)容 21.3設(shè)計(jì)方案 2第二章芯片介紹 42.1主要特性 42.2AT89C51功能描述 42.3工作模式 6第三章硬件設(shè)計(jì) 73.1液晶顯示模塊 73.2鍵盤輸入模塊 73.3電路原理圖及說(shuō)明 10第四章軟件設(shè)計(jì) 114.1軟件環(huán)境介紹 114.1.1Keil工程文件 114.1.2源文件的建立 114.1.3工程文件的建立 114.1.4工程的詳細(xì)設(shè)置 124.1.5編譯與連接 124.2部分程序介紹 144.2.1系統(tǒng)主流程 144.2.2鍵盤的掃描 144.2.3LCD1602的讀寫 16第五章系統(tǒng)仿真調(diào)試 215.1軟件調(diào)試 215.2綜合調(diào)試 215.3試調(diào)顯示 22第六章總結(jié) 23參考文獻(xiàn)(References) 24致謝 25PAGEPAGE25基于單片機(jī)的電子密碼鎖設(shè)計(jì)摘要:隨著社會(huì)物質(zhì)財(cái)富的日益增長(zhǎng),單片機(jī)性能不斷完善,安全防盜已成為人們所關(guān)注的焦點(diǎn)。傳統(tǒng)的機(jī)械鎖由于其構(gòu)造的簡(jiǎn)單,安全性能低,無(wú)法滿足人們的需要。本次畢業(yè)設(shè)計(jì)采用美國(guó)Atmel公司的單片機(jī)AT89C51為主控芯片,設(shè)計(jì)一個(gè)電子密碼鎖系統(tǒng)。結(jié)合外圍的鍵盤輸入、顯示、報(bào)警、開鎖等電路,用C語(yǔ)言編寫主控芯片的控制程序,設(shè)計(jì)了一款可以多次更改密碼具有報(bào)警功能的電子密碼鎖。經(jīng)實(shí)驗(yàn)證明,該密碼鎖具有設(shè)計(jì)方法合理,簡(jiǎn)單易行,成本低,安全實(shí)用等特點(diǎn),符合家庭住宅、辦公室、倉(cāng)庫(kù)等用鎖要求,具有推廣價(jià)值。關(guān)鍵字:?jiǎn)纹瑱C(jī),密碼鎖,報(bào)警,安全,實(shí)用

第一章緒論1.1論文的背景和意義在人們?nèi)粘5墓ぷ魃钪?住宅與各部門的安全防范、文件、檔案、財(cái)務(wù)報(bào)表與一些個(gè)人資料的保存大多以加鎖的辦法來(lái)加以保護(hù)。“安全”已經(jīng)成為現(xiàn)代居民最關(guān)心的問(wèn)題之一。若人們?cè)谏钪惺褂脗鹘y(tǒng)的機(jī)械式鑰匙開鎖,而常常需攜帶多把鑰匙,使用極其不方便,而且如果鑰匙丟失后安全性即大打折扣。隨著社會(huì)科學(xué)技術(shù)的不斷發(fā)展,人們對(duì)日常生活中的安防保險(xiǎn)的要求越來(lái)越高。以此,為了滿足人們對(duì)鎖的使用要求,增加其使用安全性,隨著單片機(jī)的問(wèn)世,用電子密碼代替鑰匙的密碼鎖應(yīng)運(yùn)而生。它的保密性好,安全系數(shù)高,使用靈活性好,制造成本低,功率消耗低,易操作等優(yōu)點(diǎn),因而受到廣大用戶的青睞。在生活中,在人們對(duì)安全的重視與科技的發(fā)展,許多電子智能鎖(指紋識(shí)別、IC卡辨認(rèn))已經(jīng)在國(guó)內(nèi)外相繼面世。但這些電子產(chǎn)品的特點(diǎn)是針對(duì)特定的指紋和有效卡,其只能適用于保密要求的箱、門、柜等。而且對(duì)于指紋識(shí)別器,若在公共場(chǎng)所使用其存在容易機(jī)械損壞,IC卡還存在容易丟失、損壞等不良特點(diǎn)。再加上其制造成本較高,在一定程度上限制了這類電子產(chǎn)品的普及與推廣。鑒于目前的科學(xué)技術(shù)水平與市場(chǎng)消費(fèi)的接收程度,可以看出電子密碼鎖是這類電子防盜產(chǎn)品的主流[1]。1.2論文研究的內(nèi)容使用ATMEL公司的AT89C51來(lái)實(shí)現(xiàn)基于單片機(jī)的電子密碼鎖的設(shè)計(jì),其主要具有如下功能:1、設(shè)置4位密碼,密碼由鍵盤輸入,若密碼正確,則鎖打開。2、密碼可以由用戶自己修改設(shè)定(只支持4位密碼),在初始密碼輸入成功后才能修改密碼。且在修改密碼之前必須再次輸入密碼,輸入新密碼時(shí)候需要二次確認(rèn),以防止進(jìn)行誤操作。3、報(bào)警與鎖定鍵盤功能。若密碼輸入錯(cuò)誤LCD1602會(huì)出現(xiàn)錯(cuò)誤提示,則蜂鳴器報(bào)警并且鎖定鍵盤。1.3設(shè)計(jì)方案總系統(tǒng)硬件結(jié)構(gòu)框圖如圖1.1:鍵盤輸入模塊鍵盤輸入模塊復(fù)位電路晶振電路AT89C51顯示模塊報(bào)警電路開鎖電路圖1.1系統(tǒng)硬件結(jié)構(gòu)框圖電子密碼鎖設(shè)計(jì)關(guān)鍵問(wèn)題是實(shí)現(xiàn)密碼的輸入、清除、更改、開鎖等功能:密碼輸入功能:插上電源后,LCD提示輸入密碼,輸入密碼時(shí)在LCD1602上顯示“*”每輸入一個(gè)數(shù)字,LCD上向右移一格,同時(shí)“*”加一個(gè)。值到輸入4個(gè)“*”為此,若一次性輸入大于4個(gè)密碼,則只保留前4位密碼,按“確定”生效。2、密碼更改功能:在確認(rèn)輸入正確密碼后,將輸入的值作為新的密碼。3、當(dāng)在密碼輸入成功后或者密碼修改成功后,LCD上有提示成功字符提示,同時(shí)蜂鳴器響兩聲作為提示。第二章芯片介紹2.1主要特性以AT89C51單片機(jī)為核心,其是由ATMEL公司推出的一種小型單片機(jī),1995年出現(xiàn)在中國(guó)的市場(chǎng)。它的主要特點(diǎn)為采用Flash存貯器技術(shù),降低其制造成本,它的軟件、硬件與MCS-51完全兼容,且其采用ATMEL高密度而非易失存儲(chǔ)器制造技術(shù)來(lái)制造,將多功能的8位CPU和閃爍存儲(chǔ)器一起組合在單個(gè)芯片中,在一定程度上,很快地被中國(guó)廣大用戶接受并使用。它的程序可擦寫特性,使其開發(fā)與試驗(yàn)比較容易,為許多嵌入式控制系統(tǒng)提供了一種運(yùn)用靈活性高且物美價(jià)廉的方案。AT89C51有個(gè)很寬的工作電源電壓,范圍在2.7~6V之間,若當(dāng)工作在3V時(shí),其電流相當(dāng)于在6V工作時(shí)的1/4。89C51工作頻率于12Hz時(shí),其動(dòng)態(tài)電流為5.5mA,且空閑態(tài)為1mA,掉電態(tài)僅為20nA。對(duì)于這樣小的功耗很適用于由電池供電的小型控制系統(tǒng)當(dāng)中。AT89C51具有以下幾個(gè)性能特點(diǎn):①AT89C51與MCS-51系列的單片機(jī)在指令系統(tǒng)和引腳上完全兼容;②片內(nèi)有4k字節(jié)在線可重復(fù)編程快擦寫程序存儲(chǔ)器;③全靜態(tài)工作,工作范圍:0Hz~24MHz;④128×8位內(nèi)部RAM;⑤32位雙向輸入輸出線;⑥兩個(gè)十六位定時(shí)器/計(jì)數(shù)器;⑦五個(gè)中斷源,兩級(jí)中斷優(yōu)先級(jí);⑧一個(gè)全雙工的異步串行口;⑨間歇和掉電兩種工作方式。2.2AT89C51功能描述AT89C51是一種低損耗、高性能、CMOS八位的微處理器,片內(nèi)有4k字節(jié)的在線可重復(fù)編程與快速擦除快速寫入程序的存儲(chǔ)器,能夠重復(fù)寫入或擦除1000次,數(shù)據(jù)可保存時(shí)間為10年。其與MCS-51系列的單片機(jī)在指令系統(tǒng)與引腳上完全可兼容,不僅可完全替代MCS-51系列單片機(jī),且能使其系統(tǒng)具有許多MCS-51系列產(chǎn)品所沒(méi)有的功能。AT89C51其可構(gòu)成真正的單片機(jī)的最小應(yīng)用系統(tǒng),縮小了系統(tǒng)體積,增加了系統(tǒng)的可靠性,降低了系統(tǒng)的制造成本。只要其程序長(zhǎng)度小于4K,四個(gè)I/O口可全部提供給用戶???V電壓上進(jìn)行編程,而且擦寫的時(shí)間僅需10ms,其僅為8751/87C51單片機(jī)擦除時(shí)間的百分之一,與8751/87C51單片機(jī)在12V電壓上擦寫相比,其不易損壞器件,沒(méi)有兩種電源的要求,改寫時(shí)可不拔下芯片,適用于許多嵌入式控制領(lǐng)域。其工作電壓范圍在(2.7V~6V)之間,全靜態(tài)工作,工作頻率在0Hz~24MHz之間,比8751/87C51等51單片機(jī)系列的6MHz~12MHz更具有靈活性,其系統(tǒng)能快能慢。AT89C51芯片提供了三級(jí)程序存儲(chǔ)器加密,提供了使用方便靈活而可靠的硬加密手段,可完全保證程序或系統(tǒng)不被仿制。P0口是三態(tài)雙向口,通稱數(shù)據(jù)總線口,因?yàn)橹挥性摽谀苤苯佑糜趯?duì)外部存儲(chǔ)器的讀/寫操作[9]。AT89C51引腳圖:圖2.1芯片引腳AT89C51單片機(jī)為40引腳芯片,如上圖2.1。地址總線和數(shù)據(jù)總線:P0、P1、P2、P3共四個(gè)八位口:(1)P0口是三態(tài)雙向口,通稱數(shù)據(jù)總線口,因?yàn)橹挥性摽谀苤苯佑糜趯?duì)外部存儲(chǔ)器的讀/寫操作。P0口也用以輸出外部存儲(chǔ)器的低8位地址。由于是分時(shí)輸出,故應(yīng)在外部加鎖存器將此地址數(shù)據(jù)鎖存,地址鎖存信號(hào)用ALE。(2)P1口是專門供用戶使用的I/O口,是準(zhǔn)雙向口。(3)P2口是從系統(tǒng)擴(kuò)展時(shí)作高8位地址線用。不擴(kuò)展外部存儲(chǔ)器時(shí),P2口也可以作為用戶I/O口線使用,P2口也是準(zhǔn)雙向口。(4)P3口是雙功能口,該口的每一位均可獨(dú)立地定義為第一I/O功能或第二I/O功能。作為第一功能使用時(shí)操作同P1口。P3口的第二功能如表2.1所示。表2.1P3口的第二功能口線第二功能RXD(串行輸入口)TXD(串行輸出口)INT0(外部中斷0)INT1(外部中斷1)T0(定時(shí)器0外部輸入)T1(定時(shí)器1外部輸入)WR(外部數(shù)據(jù)存儲(chǔ)器寫脈沖)RD(外部數(shù)據(jù)存儲(chǔ)器讀脈沖)控制口線RESET(復(fù)位控制)、PSEN(片外選取控制)、ALE/PROG(地址鎖存控制)、PSEN(選通信號(hào))、EA/VPP(片外存儲(chǔ)器選擇)、XTAL1/XTAL2(晶振)。RST:當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間。ALE/PROG:當(dāng)訪問(wèn)外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖;在平時(shí),ALE端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6。因此它可用作對(duì)外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過(guò)一個(gè)ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時(shí),ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無(wú)效。PSEN:外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取指期間,每個(gè)機(jī)器周期兩次/PSEN有效。但在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的/PSEN信號(hào)將不出現(xiàn)。EA/VPP:當(dāng)/EA保持低電平時(shí),則在此期間外部程序存儲(chǔ)器(0000H-FFFFH),不管是否有內(nèi)部程序存儲(chǔ)器。注意加密方式1時(shí),/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。XTAL2:來(lái)自反向振蕩器的輸出。2.3工作模式工作模式:AT89C51有間歇和掉電兩種工作模式。間歇模式是由軟件來(lái)設(shè)置的,當(dāng)外圍器件仍然處于工作狀態(tài)時(shí),CPU可根據(jù)工作情況適時(shí)地進(jìn)入睡眠狀態(tài),內(nèi)部RAM和所有特殊的寄存器值將保持不變。這種狀態(tài)可被任何一個(gè)中斷所終止或通過(guò)硬件復(fù)位。掉電模式是在VCC電壓低于電源下限,振蕩器停止振動(dòng),CPU停止執(zhí)行指令。該芯片內(nèi)RAM和特殊功能寄存器值保持不變,直到掉電模式被終止為止。只有VCC電壓恢復(fù)到正常工作范圍,而且在振蕩器穩(wěn)定振蕩后,通過(guò)硬件復(fù)位掉電模式可被終止。第三章硬件設(shè)計(jì)硬件模塊主要包括:鍵盤輸入模塊、液晶顯示模塊、AT24C02存儲(chǔ)模塊、電源模塊以及其他部分。電路框圖如第一章圖1.1所示,其中主要的模塊有LCD顯示模塊、鍵盤輸入模塊、AT24C02存儲(chǔ)模塊和蜂鳴器與繼電器模塊。下面就這些模塊做詳細(xì)的介紹。3.1液晶顯示模塊顯示部分是采用LCD1602。電路圖如圖3.1所示:圖3.1液晶顯示原理圖LCD1602的引腳功能:第1腳:為地電源。第2腳:VCC接5V正電源。第3腳:為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高,對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)20K的電位器調(diào)整對(duì)比度。第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。第5腳:RW為讀寫信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)RS和RW共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)RS為低電平RW為高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平RW為低電平時(shí)可以寫入數(shù)據(jù)。第6腳:E端為使能端,E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。第15~16腳:空腳。3.2鍵盤輸入模塊鍵盤是一組按鍵的集合,它是最常用的單片機(jī)輸入設(shè)備.鍵盤可以分為兩類:獨(dú)立連接式和矩陣式[4]。獨(dú)立連接式鍵盤是一種最簡(jiǎn)單的鍵盤電路,每個(gè)按鍵獨(dú)立地接入一根數(shù)據(jù)線。平時(shí)所有的數(shù)據(jù)輸入線都被連接成高電平,當(dāng)任何一個(gè)鍵按下時(shí),與之相連的數(shù)據(jù)輸入線將被拉成低電平。要判斷是否有鍵按下,只要用位處理指令即可。這種鍵盤的優(yōu)點(diǎn)是其結(jié)構(gòu)簡(jiǎn)單,使用方便,但隨著鍵數(shù)的增多而占用I/O口線也增加。矩陣式鍵盤,即通常所講的行列式鍵盤。本設(shè)計(jì)所用的鍵盤就是矩陣式鍵盤。它由行線和列線組成,按鍵位于行、列的交叉點(diǎn)上,行列分別連接到按鍵開關(guān)的兩端,行線通過(guò)上拉電阻接到高電平。無(wú)按鍵按動(dòng)作時(shí)列線處于高電平狀態(tài);有按鍵按下時(shí),交點(diǎn)的行線和列線相通,列線電平狀態(tài)將由與此列線相連的行線電平?jīng)Q定。行線電平如果低,則列線電平為低;行線電平如果為高,則列線電平也為高。這是識(shí)別矩陣式鍵盤按鍵是否被按下的關(guān)鍵所在。由于矩陣鍵盤中行、列線為多鍵公用,各按鍵均影響該鍵所在的行和列的電平,所以必須將行、列線信號(hào)配合起來(lái)作適當(dāng)?shù)奶幚?,才能確定閉合鍵所在的位置。矩陣式鍵盤節(jié)省了好多的I/O口,適用于按鍵數(shù)量比較多的場(chǎng)合。本設(shè)計(jì)的3*4鍵盤即采用矩陣式鍵盤,如圖3.2所示:圖3.2矩陣式鍵盤通過(guò)行列鍵盤掃描的方法可獲取鍵盤輸入的鍵值,從而得知按下的哪個(gè)鍵,具體過(guò)程如下:(1)查詢是否有鍵按下。單片機(jī)向行掃描口輸出全為“0”的掃描碼,然后從列檢測(cè)口檢測(cè)信號(hào),只要有一列信號(hào)不為“1”,則表示有鍵按下,且不為“1”的列即對(duì)應(yīng)為按下的按鍵所在的列。(2)查詢按下按鍵所在的行、列位置。前面已經(jīng)取得了按下鍵的列,接下來(lái)要確定按鍵所在的行,這需要進(jìn)行逐行掃描,單片機(jī)首先使第1行為“0”,其余各行為“1”,接著進(jìn)行行列檢測(cè),若為全“1”,表示不在第1行,否則即在第1行;然后使第2行為全“0”,其余各行為“1”,再進(jìn)行列檢測(cè),若為全“1”,表示不在第2行;這樣逐行檢測(cè),直到找到按鍵所在的行。當(dāng)各行都掃描以后仍沒(méi)有找到,則放棄掃描,認(rèn)為是鍵的錯(cuò)誤動(dòng)作。(3)對(duì)得到的行號(hào)和列號(hào)譯碼,得到鍵值。對(duì)于3*4的行列式鍵盤,因?yàn)榘存I的位置由行號(hào)和列號(hào)唯一確定,且行列各4位,所以用一個(gè)字節(jié)(8位)來(lái)對(duì)鍵值編碼是很合適的。本設(shè)計(jì)中,將字節(jié)的高3位(D6、D5、D4)表示列號(hào)(3、2、1),低4位(D3、D2、D1、D0)表示行號(hào)(4、3、2、1),比如11H(00010001)表示第1行第1列,21H(00100001)表示第1行第2列。在掃描鍵盤過(guò)程中,應(yīng)該注意以下問(wèn)題:(1)當(dāng)按下或松開按鍵時(shí),按鍵也許會(huì)產(chǎn)生機(jī)械抖動(dòng)。這種抖動(dòng)經(jīng)常發(fā)生在按下或松開瞬間,一般可持續(xù)幾到十幾秒,抖動(dòng)時(shí)間長(zhǎng)短隨按鍵結(jié)構(gòu)不同而有所不同。在掃描鍵盤按鍵過(guò)程中,必須想辦法來(lái)消除按鍵,否則會(huì)引起相應(yīng)的錯(cuò)誤。想要消除按鍵抖動(dòng),可以利用硬件電路來(lái)加以實(shí)現(xiàn),如,使用R-S觸發(fā)器來(lái)加以鎖定按鍵狀態(tài),以消除抖動(dòng)產(chǎn)生的影響。較為簡(jiǎn)單的方法就是用軟件延時(shí)方法來(lái)消除按鍵的抖動(dòng),如果一旦發(fā)現(xiàn)有按鍵按下,就延時(shí)20ms以后再測(cè)按鍵的狀態(tài)。這樣就避開按鍵發(fā)生抖動(dòng)的那一段時(shí)間,使CPU能可靠地讀按鍵狀態(tài)。在編制鍵盤按鍵掃描程序時(shí),只要有發(fā)現(xiàn)按鍵狀態(tài)發(fā)生變化,即無(wú)論是松開還是按下,則程序都延時(shí)20ms以后再進(jìn)行其他操作。(2)在鍵盤掃描中,應(yīng)加以防止按一次鍵具而產(chǎn)生有多個(gè)對(duì)應(yīng)鍵值輸入的情況。這種情況的發(fā)生是由于鍵掃描速度和鍵處理速度較快,當(dāng)某一個(gè)鍵按下還未松開時(shí)鍵掃描程序和鍵處理程序已執(zhí)行了多遍。這樣,由于程序執(zhí)行和按鍵動(dòng)作不同步而造成按一個(gè)鍵有多個(gè)鍵值輸入的錯(cuò)誤狀態(tài)。為了避免發(fā)生這種情況,則必須保證按一次鍵,讓CPU只對(duì)該次按鍵做一次處理。為此,在按鍵掃描程序中,不僅要檢測(cè)是否有鍵按下,在有鍵按下的情況,做一次處理,而且在鍵處理完畢后,還應(yīng)當(dāng)檢測(cè)按下的鍵是否松開,只有在當(dāng)按下的鍵松開以后,程序才往下進(jìn)行執(zhí)行。這樣一來(lái)每按下一個(gè)鍵,只做一個(gè)鍵處理,使二者達(dá)到同步,消除按一次鍵有多個(gè)鍵值輸入的錯(cuò)誤情況。根據(jù)要求,本設(shè)計(jì)的3*4鍵盤設(shè)定10個(gè)數(shù)字鍵(0-9)和3個(gè)功能鍵。圖3.2中第4列前三個(gè)暫時(shí)不用,可以作以后擴(kuò)充所用。因此根據(jù)上面提到的3*4鍵盤的鍵值編碼方法,各按鍵及其編碼對(duì)應(yīng)關(guān)系如表3.1。表3.1按鍵與編碼對(duì)應(yīng)關(guān)系表按鍵行號(hào)列號(hào)鍵值編碼11111H(00010001)21221H(00100001)31341H(01000001)42112H(00010010)52222H(00100010)62342H(01000010)73114H(00010100)83224H(00100100)93344H(01000100)04228H(00101000)#(確認(rèn))4348H(01001000)D(修改)4488H(10001000)3.6電路原理圖及說(shuō)明系統(tǒng)總電路原理圖如圖3.3所示:圖3.7總電路原理圖系統(tǒng)的總電路原理圖分為4部分:一、是單片機(jī)及鍵盤電路原理圖;二、報(bào)警電路;三、是LCD液晶顯示電路原理圖;四、開鎖電路。U1為單片機(jī)芯片AT89C51,它是整個(gè)電路的核心部件聯(lián)系著輸入和輸出。LCD1是LCD_1602液晶顯示。在單片機(jī)中P1口用于鍵盤操作,P1.0-P1.3與行線相連,P1.4-P1.6與列線相連。P0口和P3.4-P36口用做LCD液晶顯示。P2用于開鎖電路和報(bào)警電路。第四章軟件設(shè)計(jì)軟件設(shè)計(jì)主要包括以下部分:系統(tǒng)的主流程;鍵盤的掃描;LCD的讀寫。下面首先介紹軟件的運(yùn)行環(huán)境。4.1軟件環(huán)境介紹軟件設(shè)計(jì)部分采用在KEIL編譯器環(huán)境下進(jìn)行編程,KEILC-51軟件是眾多單片機(jī)開發(fā)的優(yōu)秀軟件之一,它集編輯,編譯,仿真于一體,支持匯編,PLM,C等多種程序設(shè)計(jì)語(yǔ)言。4.1.1Keil工程文件首先啟動(dòng)Keil軟件的集成開發(fā)環(huán)境,UVison啟動(dòng)后,程序窗口的左邊有一個(gè)工程管理窗口,該窗口有3個(gè)標(biāo)簽,分別是Files、Regs和Books,這三個(gè)標(biāo)簽頁(yè)分別顯示當(dāng)前項(xiàng)目的文件結(jié)構(gòu)、CPU的寄存器及部份特殊功能寄存器的值(調(diào)試時(shí)才出現(xiàn))和所選CPU的附加說(shuō)明文件,如果是第一次啟動(dòng)Keil,那么這三個(gè)標(biāo)簽頁(yè)全是空的。4.1.2源文件的建立使用菜單“File->New"或者點(diǎn)擊工具欄的新建文件按鈕,即可在項(xiàng)目窗口的右側(cè)打開一個(gè)新的文本編緝窗口,在該窗口中輸入源程序。保存文件,注息必須加上擴(kuò)展名(匯編語(yǔ)言源程序一般用asm或a51為擴(kuò)展名)。需要說(shuō)明的是,源文件就是一般的文本文件,不一定使用Keil軟件編寫,可以使用任意文本編緝器編寫,而且,Keil的編緝器對(duì)漢字的支持不好,建議使用U1traEdit之類的編緝軟件進(jìn)行源程序的輸入。4.1.3工程文件的建立在項(xiàng)目開發(fā)中,并不是僅有一個(gè)源程序就行了,還要為這個(gè)項(xiàng)目選擇CPU(Keil支持?jǐn)?shù)百種CPU,而這些CPU的特性并不完全相同),確定編譯、匯編、連接的參數(shù),指定調(diào)試的方式,有一些項(xiàng)目還會(huì)有多個(gè)文件組成等,為管理和使用方便,Keil使用工程(Project)這一概念,將這些參數(shù)設(shè)置和所需的所有文件都加在一個(gè)工程中,只能對(duì)工程而不能對(duì)單一的源程序進(jìn)行編譯(匯編)和連接等操作。點(diǎn)擊“Project->NewProject..."菜單,出現(xiàn)一個(gè)對(duì)話框,要求給將要建立的工程起一個(gè)名字,可以在編緝框中輸入一個(gè)名字(設(shè)為examl,不需要擴(kuò)展名。點(diǎn)擊“保存”按鈕,出現(xiàn)第二個(gè)對(duì)話框,這個(gè)對(duì)話框要求選擇目標(biāo)CPU(即你所用芯片的型號(hào)),Keil支持的CPU很多,我們選擇Atmel公司的89C51芯片。點(diǎn)擊ATMEL前ICI的“+”號(hào),展開該層,點(diǎn)擊其中的89C51,然后再點(diǎn)擊“確定”按鈕,回到主界面,此時(shí),在工程窗口的文件頁(yè)中,出現(xiàn)了“Target1”,前面有“+”號(hào),點(diǎn)擊“+”號(hào)展開,可以看到下一層的“SourceGroupl",這時(shí)的工程還是一個(gè)空的工程,里面什么文件也沒(méi)有,需要手動(dòng)把剛才編寫好的源程序加入,點(diǎn)擊“SourceGroupl”使其反白顯示,然后,點(diǎn)擊鼠標(biāo)右鍵,出現(xiàn)一個(gè)下拉菜單。選中其中的“AddfiletoGroup"SourceGroupl",在彈出的窗口中選擇已經(jīng)寫好的elc.c文件,將文件加入項(xiàng)目,注意,在文件加入項(xiàng)目后,該對(duì)話框并不消失,等待繼續(xù)加入其它文件,如果文件添加完畢只要點(diǎn)擊“Close"即可返回主界面,返回后,點(diǎn)擊“SourceGroup1"前的加號(hào),會(huì)發(fā)現(xiàn)elc.c文件己在其中。雙擊文件名,即打開該源程序。4.1.4工程的詳細(xì)設(shè)置工程建立好以后,還要對(duì)工程進(jìn)行進(jìn)一步的設(shè)置,以滿足要求。首先點(diǎn)擊左邊Project窗口的Target1,然后使用菜單“Project>Optionfortarget‘targetl’”即出現(xiàn)對(duì)工程設(shè)置的對(duì)話框,這個(gè)對(duì)話框大部份設(shè)置項(xiàng)取默認(rèn)值就行了。我們主要設(shè)置對(duì)話框中的輸出和調(diào)試頁(yè)面,輸出頁(yè)面中在產(chǎn)生HEX文件前面的方框中打勾,在調(diào)試頁(yè)面中選擇使用(use),在旁邊的下拉菜單中選擇proteusdebug,設(shè)置完成后按確認(rèn)返回主界面,工程文件建立、設(shè)置完畢。4.1.5編譯與連接在設(shè)置好工程后,即可進(jìn)行編譯、連接。選擇菜單Project->Buildtarget,對(duì)當(dāng)前工程進(jìn)行連接,如果當(dāng)前文件己修改,軟件會(huì)先對(duì)該文件進(jìn)行編譯,然后再連接以產(chǎn)生目標(biāo)代碼;如果選擇RebuildAlltargetfiles將會(huì)對(duì)當(dāng)前工程中的所有文件重新進(jìn)行編譯然后再連接,確保最終生產(chǎn)的目標(biāo)代碼是最新的,而Translate…項(xiàng)則僅對(duì)該文件進(jìn)行編譯,不進(jìn)行連接。以上操作也可以通過(guò)工具欄按鈕直接進(jìn)行。編譯過(guò)程中的信息將出現(xiàn)在輸出窗口中的Build頁(yè)中,如果源程序中有語(yǔ)法錯(cuò)誤,會(huì)有錯(cuò)誤報(bào)告出現(xiàn),雙擊該行,可以定位到出錯(cuò)的位置,對(duì)源程序反復(fù)修改之后,最終會(huì)得到如圖4.2所示的結(jié)果,提示獲得了名為elc.hex的文件,該文件即可被編程器讀入并寫到芯片中,同時(shí)還產(chǎn)生了一些其它相關(guān)的文件,可被用于Keil的仿真與調(diào)試,這時(shí)可以進(jìn)入下一步調(diào)試的工作。編譯連接程序界面如圖4.1所示。圖4.1編譯、連接并產(chǎn)生HEX文件之后的結(jié)果圖4.2編譯連接程序界面4.2部分程序介紹4.2.1系統(tǒng)主流程程序流程圖如圖4.3所示:圖4.3程序流程圖系統(tǒng)主程序如下,需要說(shuō)明的是:鍵盤上除了0-9這10個(gè)按鍵,還有A、B、C、D、*、#六個(gè)鍵。#鍵表示確認(rèn)輸入;*鍵表示取消當(dāng)前操作;D鍵表示修改密碼;其它鍵無(wú)實(shí)定義。主程序:voidmain(){ ucharCode=0;//密碼個(gè)數(shù)初始化uchari; LED=0; P2=0X00; EA=1; lcd_init(); //初始化1602 write_str(1,4,"Welcome!",100); while(1) { dat=key_output(); if(dat==10)//按下輸入鍵 { LED=0; TR0=0; write_str(1,2,"Input:",1); write_str(2,2,"",1); for(i=0;i<4;i++) num[i]=0; while(key_output()!=-1); } if(dat>=0&&dat<=9)//按下數(shù)字鍵 { if((biaozhi!=3)&&(lag1==INPUT)&&(lag2!=ENSURE)) { write_str(2,Code+7,"*",1); num[Code++]=dat; delay_ms(20); if(Code==4) Code=0; while(key_output()!=-1); } if(biaozhi==3) { if((lag1==INPUT)&&(lag2!=ENSURE)) { mima[Code++]=dat; write_cmd(0xc7+Code); write_dat(dat+'1'); delay_ms(20); if(Code==4) { Code=0; delay_ms(100); write_str(1,2,"Success!",1); write_str(2,2,"",1); biaozhi=0; while(key_output()!=-1); } while(key_output()!=-1); } while(key_output()!=-1); } } if((biaozhi!=3)&&(dat==11))//按下確定鍵 { lag2=ENSURE; control(); dis_play(); while(key_output()!=-1); } }}4.2.2鍵盤的掃描鍵盤原理采用的是行列式掃描方法,其設(shè)計(jì)原理如第三章圖3.2所示。單片機(jī)中“0”表示導(dǎo)通,“1”則表示不導(dǎo)通。首先將第1行為“0”,其余各行為“1”,接著下來(lái)進(jìn)行行列檢測(cè),若為全“1”,則表示不在第1行,否則即在第1行;然后將第2行為全“0”,其余各行為“1”,再進(jìn)行列檢測(cè),若為全“1”,表示不在第2行;這樣依次逐行檢測(cè),直找到按鍵所在的行。以此類推[10]。當(dāng)按下或松開按鍵之時(shí),按鍵可能會(huì)產(chǎn)生機(jī)械抖動(dòng),其可用延時(shí)的方法來(lái)消除按鍵的抖動(dòng),若發(fā)現(xiàn)有鍵按下,就延時(shí)20ms后再測(cè)按鍵的狀態(tài)。這就避開按鍵發(fā)生抖動(dòng)的那一段時(shí)間,使其CPU能夠可靠地讀按鍵的狀態(tài)。在編制鍵盤掃描程序時(shí),只要發(fā)現(xiàn)其按鍵狀態(tài)有變化,無(wú)論是按下還是松開,程序都延時(shí)10ms后再進(jìn)行其他操作。Delay5Ms()是延時(shí)5ms的函數(shù)。相關(guān)程序如下://==============將按鍵值編碼為數(shù)值=========================#include"Scan_Key.h"#include<intrins.h>/******************************//***123***//***456***//***789***//***輸入0確定***//******************************/ucharcodeKeyCodeTable[]={ 0x11,0x21,0x41,0x12,0x22,0x42,0x14,0x24,0x44,0x28,0x18,0x48};ucharkey_output(){ucharsCode,kCode,i,k; KEY_IN=0xf0; if((KEY_IN&0xf0)!=0xf0) { delay_ms(4); if((KEY_IN&0xf0)!=0xf0) { sCode=0xfe; for(k=0;k<4;k++) { KEY_IN=sCode; if((KEY_IN&0xf0)!=0xf0) { kCode=~KEY_IN; for(i=0;i<12;i++) { if(kCode==KeyCodeTable[i]) { returni; } } } else sCode=_crol_(sCode,1); } } } return-1; }4.2.3LCD1602的讀寫1.指令說(shuō)明:讀寫的操作、屏幕和光標(biāo)的操作都是通過(guò)指令編程來(lái)實(shí)現(xiàn)的。(說(shuō)明:“1”為高電平、“0”為低電平)。1)顯示模式設(shè)置:指令碼功能00111000設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口如程序中的write_1602com(0x38);2)顯示開/關(guān)及光標(biāo)設(shè)置:指令碼功能00001DCBD=1開顯示;D=0關(guān)顯示C=1顯示光標(biāo);C=0不顯示光標(biāo)B=1光標(biāo)閃爍;B=0光標(biāo)不顯示如程序中的write_1602com(0x0c);//開顯示不顯示光標(biāo)000001NSN=1當(dāng)讀或?qū)懸粋€(gè)字符后地址指針加一;且光標(biāo)加一N=0當(dāng)讀或?qū)懸粋€(gè)字符后地址指針減一;且光標(biāo)減一S=1當(dāng)寫一個(gè)字符,整屏顯示左移(N=1)或右移(N=0),S=0當(dāng)寫一個(gè)字符,整屏顯示不移動(dòng)如程序中的write_1602com(0x06);//整屏不移動(dòng),光標(biāo)自動(dòng)右移3)數(shù)據(jù)指針設(shè)置:指令碼功能80H+地址碼(0-27H,40H-67H)設(shè)置數(shù)據(jù)地址指針如程序中的#defineyi0x80//LCD第一行的初始位置#defineer0x80+0x40//LCD第二行初始位置4)寫指令:輸入輸出RS=0,RW=0,D0~D7=指令碼,E=1無(wú)如程序中的lcd1602_rs=0;//數(shù)據(jù)/指令選擇置為指令lcd1602_rw=0;//讀寫選擇置為寫5)讀數(shù)據(jù):輸入輸出RS=1,RW=1,E=1D0~D7=數(shù)據(jù)6)寫數(shù)據(jù):輸入輸出RS=1,RW=0,E=1,D0~D7=數(shù)據(jù)無(wú)如程序中的lcd1602_rs=1;//數(shù)據(jù)/指令選擇置為數(shù)據(jù)lcd1602_rw=0;//讀寫選擇置為寫7)顯示清屏與回車:指令碼功能01H顯示清屏:1.數(shù)據(jù)指針清零2.所有顯示清零如程序中的write_1602com(0x01);//清顯示02H顯示回車:1.數(shù)據(jù)指針清零2.程序部分://延時(shí)函數(shù)voiddelay_ms(uintx){ uinti,j; for(i=x;i>0;i--) for(j=110;j>0;j--);}//寫指令voidwrite_cmd(ucharcmd){ RW=0; E=0; RS=0; LCD1602_DATA=cmd; delay_ms(1); E=1; delay_ms(5); E=0; RS=1; RW=1;}//寫數(shù)據(jù)voidwrite_dat(uchardat){ RW=0; E=0; RS=1; LCD1602_DATA=dat; delay_ms(1); E=1; delay_ms(5); E=0; RS=0; RW=1;}//寫字符串voidwrite_str(ucharhang,ucharlie,uchar*P,uchartime){ ucharadd; add=(hang==1)?lie:(lie+0x40); write_cmd(0x80+add); while(*P!='\0') { write_dat(*P); P++; delay_ms(time);}}//初始化voidlcd_init(void){write_cmd(0x38);//設(shè)置液晶工作模式,意思:16*2行顯示,5*7點(diǎn)陣,8位數(shù)據(jù)write_cmd(0x0c);//開顯示不顯示光標(biāo)write_cmd(0x06);//整屏不移動(dòng),光標(biāo)自動(dòng)右移write_cmd(0x01);//清顯示}第五章系統(tǒng)仿真調(diào)試5.1軟件調(diào)試軟件調(diào)試主要包括是用KEILC51和PROTEUS進(jìn)行聯(lián)調(diào)。首先電腦上打開ISIS7Professional,新建設(shè)計(jì),繪制仿真圖,在debug選項(xiàng)下選擇useremotedebugmonitor,然后打開KEIL,在工具欄project選項(xiàng)中選擇optionfortarget‘target’,然后在調(diào)試選項(xiàng)卡下選擇使用proteusdebug,最后編譯程序,產(chǎn)生hex文件,在ISISPROFESSIONAL中雙擊單片機(jī),在彈出的窗口中的programfile中選擇剛剛產(chǎn)生的HEX文件,點(diǎn)擊ok后,在電腦上就可以進(jìn)行軟件仿真了。仿真圖如圖5.1所示:圖5.1proteus上的仿真5.2綜合調(diào)試在完成上述工作后,可以將其程序下載至單片機(jī)內(nèi),接通電源,觀察LCD顯示是否都能正常。將0-9個(gè)數(shù)字鍵以及確認(rèn)鍵和取消鍵逐次檢測(cè),并確定每個(gè)按鍵都能正常的工作,若隨機(jī)輸入4位數(shù)字,LCD上依次顯示“*”,按下“確認(rèn)鍵”LCD顯示error->->并報(bào)警;若輸入正確密碼,LCD上依次顯示“*”,按下“確認(rèn)鍵”,LCD上顯示right->->,流水燈工作;LCD上顯示open,蜂鳴器鳴叫兩聲;若在開鎖狀態(tài)下,再次輸入正確的密碼后并按下確認(rèn)鍵,此時(shí)可聽(tīng)到兩聲提示,在輸入新的六位密碼并按下D(修改)鍵,再次重復(fù)輸入一次新密碼并按D,可聽(tīng)到兩聲提示音,則表示修改密碼成功,如果這兩次輸入的新密碼不一致,則說(shuō)明修改密碼失敗;若密碼輸入錯(cuò)誤累計(jì)超過(guò)3次,則蜂鳴器一直報(bào)警并鎖定鍵盤。上述完成綜合調(diào)試。5.3試調(diào)顯示圖5.2初始化圖5.3密碼輸入圖5.4密碼錯(cuò)誤圖5.5密碼正確圖5.6重設(shè)密碼錯(cuò)誤圖5.7再次輸入圖5.8重設(shè)成功第六章總結(jié)以上為本畢業(yè)設(shè)計(jì)的基于單片機(jī)電子密碼鎖設(shè)計(jì)電路,經(jīng)過(guò)多次修改和整理,其可以滿足人們的基本要求,但由于設(shè)計(jì)水平有限。另外在設(shè)計(jì)方案是始終在通電的前提條件下運(yùn)行的,倘若遇到斷電問(wèn)題上則密碼鎖也將很難打開,但可以通過(guò)增加備用電源來(lái)實(shí)現(xiàn),同樣由于知識(shí)有限,只做到這一步。如果有好的意見(jiàn),希望各位老師給以支持與提供。通過(guò)此次畢業(yè)設(shè)計(jì),使我明白了:原來(lái)之前學(xué)習(xí)的那點(diǎn)書本知識(shí)是非常欠缺的!要學(xué)習(xí)的東西還很多,通過(guò)這次畢業(yè)設(shè)計(jì),明白學(xué)習(xí)是一個(gè)長(zhǎng)期積累的過(guò)程,在以后的工作和生活中都應(yīng)該不斷的繼續(xù)學(xué)習(xí),努力提高自己的知識(shí)和提高實(shí)踐綜合素質(zhì)。在這次畢業(yè)設(shè)計(jì)中,同學(xué)之間互相幫助,有不懂的地方,大家在一起商量,發(fā)現(xiàn)我們所學(xué)的知識(shí)實(shí)在是有限,還好我們能夠充分利用網(wǎng)絡(luò)的優(yōu)勢(shì)去查閱資料。在整個(gè)設(shè)計(jì)過(guò)程中學(xué)到了許多東西

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論