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

下載本文檔

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

文檔簡介

題目基于單片機的電子密碼鎖設(shè)計目錄摘要 1第一章緒論 21.1論文的背景和意義 21.2論文研究的內(nèi)容 21.3設(shè)計方案 2第二章芯片介紹 42.1主要特性 42.2AT89C51功能描述 42.3工作模式 6第三章硬件設(shè)計 73.1液晶顯示模塊 73.2鍵盤輸入模塊 73.3電路原理圖及說明 10第四章軟件設(shè)計 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基于單片機的電子密碼鎖設(shè)計摘要:隨著社會物質(zhì)財富的日益增長,單片機性能不斷完善,安全防盜已成為人們所關(guān)注的焦點。傳統(tǒng)的機械鎖由于其構(gòu)造的簡單,安全性能低,無法滿足人們的需要。本次畢業(yè)設(shè)計采用美國Atmel公司的單片機AT89C51為主控芯片,設(shè)計一個電子密碼鎖系統(tǒng)。結(jié)合外圍的鍵盤輸入、顯示、報警、開鎖等電路,用C語言編寫主控芯片的控制程序,設(shè)計了一款可以多次更改密碼具有報警功能的電子密碼鎖。經(jīng)實驗證明,該密碼鎖具有設(shè)計方法合理,簡單易行,成本低,安全實用等特點,符合家庭住宅、辦公室、倉庫等用鎖要求,具有推廣價值。關(guān)鍵字:單片機,密碼鎖,報警,安全,實用

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

溫馨提示

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

評論

0/150

提交評論