電子密碼鎖課程設(shè)計論文_第1頁
已閱讀1頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  電子信息工程實驗教學(xué)中心</p><p>  《電子技術(shù)課程設(shè)計》設(shè)計報告</p><p><b>  完成日期:</b></p><p><b>  目錄</b></p><p><b>  目錄2</b></p><p>&l

2、t;b>  摘要- 1 -</b></p><p><b>  1緒論- 2 -</b></p><p>  1.1 課題背景- 2 -</p><p>  1.2 課題設(shè)計目標- 2 -</p><p>  2原理分析- 2 -</p><p>  3設(shè)計方案論證-

3、 3 -</p><p>  3.1 主控部分的選擇- 3 -</p><p>  3.2 密碼輸入方式- 3 -</p><p>  4 電路原理圖與仿真- 4 -</p><p>  4.1 主要芯片介紹- 4 -</p><p>  4.2電路原理圖- 11 -</p><p>

4、  4.3各部分原理圖- 11 -</p><p>  5綜合調(diào)試- 14 -</p><p>  5.1硬件調(diào)試- 14 -</p><p>  5.2軟件調(diào)試- 15 -</p><p>  5.3Proteus仿真- 16 -</p><p>  6總結(jié)- 18 -</p><p&

5、gt;  附錄:設(shè)計所用程序- 20 -</p><p>  參考文獻- 40 -</p><p><b>  摘要</b></p><p>  本系統(tǒng)由單片機系統(tǒng)、矩陣鍵盤、LED顯示和報警系統(tǒng)組成。系統(tǒng)能完成開鎖、超次鎖定、報警、修改用戶密碼基本的密碼鎖的功能。除上述基本的密碼鎖功能外,還具有掉電存儲、聲光提示等功能。本系統(tǒng)成本低廉,功

6、能實用。 </p><p>  關(guān)鍵詞: AT89C51 、AT24C02、 電子密碼鎖 </p><p><b>  1緒論 </b></p><p>  隨著人們生活水平的提高和安全意識的加強,對安全的要求也就越來越高。鎖自古以來就是把守護門的鐵將軍,人們對它要求甚高,既要安全可靠的防盜,又要使用方便,這也是制鎖者長期以來研制的主題。隨著電

7、子技術(shù)的發(fā)展,各類電子產(chǎn)品應(yīng)運而生,電子密碼鎖就是其中之一。</p><p><b>  1.1 課題背景</b></p><p>  由于電子鎖的密鑰量(密碼量)極大,可以與機械鎖配合使用,并且可以避免因鑰匙被仿制而留下安全隱患。電子鎖只需記住一組密碼,無需攜帶金屬鑰匙,免除了人們攜帶金屬鑰匙的煩惱,而被越來越多的人所欣賞。電子鎖的種類繁多,例如數(shù)碼鎖,指紋鎖,磁卡

8、鎖,IC卡鎖,生物鎖等。但較實用的還是按鍵式電子密碼鎖。</p><p>  1.2 課題設(shè)計目標</p><p>  本設(shè)計采用AT89C51單片機為主控芯片,通過軟件程序組成電子密碼鎖系統(tǒng),能夠?qū)崿F(xiàn):</p><p>  1. 正確輸入密碼前提下,開鎖提示;</p><p>  2. 錯誤輸入密碼情況下,蜂鳴器報警;</p>

9、<p>  3. 密碼可以根據(jù)用戶需要更改;</p><p>  4. 斷電存儲功能。</p><p>  5. 輸入密碼時顯示“*”。</p><p><b>  2原理分析 </b></p><p>  本設(shè)計主要由單片機、矩陣鍵盤、液晶顯示器和密碼存儲等部分組成。其中矩陣鍵盤用于輸入數(shù)字密碼和進行各種

10、功能的實現(xiàn)。由用戶通過連接單片機的矩陣鍵盤輸入密碼,后經(jīng)過單片機對用戶輸入的密碼與自己保存的密碼進行對比,從而判斷密碼是否正確,然后控制引腳的高低電平傳到開鎖電路或者報警電路控制開鎖還是報警,實際使用時只要將單片機的負載由繼電器換成電子密碼鎖的電磁鐵吸合線圈即可。系統(tǒng)整體框圖如圖3.1所示。</p><p>  圖2.1 系統(tǒng)結(jié)構(gòu)框圖</p><p><b>  各模塊功能如下:

11、</b></p><p>  1.矩陣鍵盤輸入模塊:分為密碼輸入按鍵與幾個功能按鍵,用于完成密碼鎖輸入功能。</p><p>  2.顯示模塊:用于完成對系統(tǒng)狀態(tài)顯示及操作提示功能。</p><p>  3.報警電路:用于完成輸錯密碼時候的警報功能。</p><p>  4.密碼存儲模塊:用于完成掉電存儲功能,使修改的密碼斷電后仍

12、能保存。</p><p>  5.電源模塊:用于對系統(tǒng)電路提供+5V的直流電壓。</p><p>  3設(shè)計方案論證(趙瑜、楊淥)</p><p>  系統(tǒng)從主控部分和密碼輸入方式兩方面進行論證。</p><p>  3.1 主控部分的選擇</p><p>  方案一:采用數(shù)字電路控制</p><p

13、>  用以74LS112雙JK觸發(fā)器構(gòu)成的數(shù)字邏輯電路作為密碼鎖的核心控制,將密碼保存在JK觸發(fā)器中,與輸入密碼通過比較器比較,判斷結(jié)果是否相符合。采用數(shù)字電路設(shè)計的方案好處就是設(shè)計簡單,但控制的準確性和靈活性差,故不采用。 </p><p>  方案二:采用以單片機為核心的控制方案</p><p>  選用單片機作為系統(tǒng)的核心部件,實現(xiàn)控制與處理的功能。單片機具有資源豐富、速度快、

14、編程容易等優(yōu)點。利用單片機內(nèi)部的隨機存儲器(RAM)和只讀存儲器(ROM)及其引腳資源,外接液晶顯示(LCD),鍵盤輸入等實現(xiàn)數(shù)據(jù)的處理傳輸和顯示功能,基本上能實現(xiàn)設(shè)計指標,因此綜合考慮,本系統(tǒng)采用方案二。</p><p>  3.2 密碼輸入方式</p><p>  方案一:指紋輸入識別</p><p>  指紋識別技術(shù)主要涉及四個功能:讀取指紋圖像、提取特征、保

15、存數(shù)據(jù)和比對。通過指紋讀取設(shè)備讀取到人體指紋的圖像,然后要對原始圖像進行初步的處理,使之更清晰,再通過指紋辨識軟件建立指紋的特征數(shù)據(jù)。軟件從指紋上找到被稱為"節(jié)點"(minutiae)的數(shù)據(jù)點,即指紋紋路的分叉、終止或打圈處的坐標位置,這些點同時具有七種以上的唯一性特征。通常手指上平均具有70個節(jié)點,所以這種方法會產(chǎn)生大約490個數(shù)據(jù)。這些數(shù)據(jù),通常稱為模板。通過計算機模糊比較的方法,把兩個指紋的模板進行比較,計算出

16、它們的相似程度,最終得到兩個指紋的匹配結(jié)果,從而判斷輸入結(jié)果的正確與否。考慮到本方案軟硬件太過復(fù)雜,而且成本也高,故不采用。</p><p>  方案二:矩陣鍵盤輸入識別</p><p>  由各按鍵組成的矩陣鍵盤每條行線和列線都對應(yīng)一條I/O口線,鍵位設(shè)在行線和列線的交叉點,當一個鍵按下就會有某一條行線與某一條列線接觸,只要確定接觸的是哪兩條線,即哪兩個I/O口線,就可以確定哪一個鍵被觸

17、動。行線設(shè)計成上拉口線,初始時被置高電位,列線懸空,初始置低。通過不斷讀行線口線,或者中斷方式觸發(fā)鍵位掃描。當發(fā)現(xiàn)有鍵按下,將列線逐一置低,其他列線置高,讀行線口線。當某條列線置低時,某條行線也被拉低,則確定這兩條線的交點處的按鈕被按下。每個按鍵都可通過程序賦予功能,從而完成密碼識別。本方案簡單易行,故采用。</p><p>  4 電路原理圖與仿真 </p><p>  系統(tǒng)主要芯片有A

18、T89C51,AT24C02及液晶LCD1602等。</p><p>  4.1 主要芯片介紹</p><p>  4.1.1 AT89C51 </p><p>  AT89C51是美國Atmel公司生產(chǎn)的低電壓,高性能CMOS8位單片機,片內(nèi)含8k bytes的可反復(fù)擦寫的只讀程序存儲器(PEROM)和256bytes的隨機存取數(shù)據(jù)存儲器(RAM),AT

19、89C51有40個引腳,32個外部雙向輸入/輸出(I/O)端口,同時內(nèi)含2個外中斷口,3個16位可編程定時計數(shù)器,2個全雙工串行通信口,2個讀寫口線。</p><p><b>  主要功能特性:</b></p><p>  ·兼容MCS51指令系統(tǒng)。</p><p>  ·8k可反復(fù)擦寫(>1000次)Flash RO

20、M,32個雙向I/O口,256x8bit內(nèi)部RAM,時鐘頻率0-24MHz,可編程UART串行通道。</p><p>  ·3個16位可編程定時/計數(shù)器中斷,2個串行中斷,2個外部中斷源,共6個中斷源,2個讀寫中斷口線。</p><p>  其引腳排列圖如下圖3.1:</p><p>  圖4.1 AT89C51的引腳排列</p><p

21、><b>  引腳功能如下:</b></p><p><b>  ·Vcc:電源電壓</b></p><p><b>  ·GND:地</b></p><p>  ·P0口:P0口是一組8位漏極開路型雙向I/O口,也即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口用時,每位能吸收

22、電流的方式驅(qū)動8個TTL邏輯門電路,對端口P0寫“1”時,可作為高阻抗輸入端用。在訪問外部數(shù)據(jù)存儲器或程序存儲器時,這組口線分時轉(zhuǎn)換地址(低8位)和數(shù)據(jù)總線復(fù)用,在訪問期間激活內(nèi)部上拉電阻。</p><p>  ·P1口:P1是一個帶內(nèi)部上拉電阻的8位雙向I/O口,P1的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。對端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時可作輸入口。作輸入口使

23、用時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(IIL)。</p><p>  ·P2口:P2是一個帶有內(nèi)部上拉電阻的8位雙向I/O口,P2的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。對端口P2寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時可作輸入口,作輸入口使用時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(IIL)。在訪問8位地址的外部數(shù)據(jù)存儲

24、器(如執(zhí)行MOVX@RI指令)時,P2口輸出P2鎖存器的內(nèi)容。</p><p>  Flash編程或校驗時,P2亦接收高位地址和一些控制信號。</p><p>  ·P3口:P3口是一組帶有內(nèi)部上拉電阻的8位雙向I/O口。P3口輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。對P3口寫入“1”時,它們被內(nèi)部上位電阻拉高并可作為輸入端口。此時,被外部拉低的P3口將用上拉電阻

25、輸出電流(IIL)。P3口除了作為一般的I/O口線外,更重要的用途是它的第二功能,如下表3.1所示:</p><p>  表4.1 P3口的第二功能</p><p>  ·RST:復(fù)位輸入 。當振蕩器工作時,RST引腳出現(xiàn)兩個機器周期以上高電平將使單片復(fù)位。</p><p>  ·ALE/PROG:當訪問外部程序存儲器或數(shù)據(jù)存儲器時,ALE(地址

26、鎖存允許)輸出脈沖用于鎖存地址的低8位字節(jié)。一般情況下,ALE仍以時鐘振蕩頻率的1/6輸出固定的脈沖信號,因此它可對外輸出時鐘或用于定時目的。要注意的是:每當訪問外部數(shù)據(jù)存儲器時將跳過一個ALE脈沖。</p><p>  ·EA/VPP:外部訪問允許。欲使CPU僅訪問外部程序存儲器(地址為0000H-FFFFH),EA端必須保持低電平(接地)。需注意的是:如果加密位LB1被編程,復(fù)位時內(nèi)部會鎖存EA端狀

27、態(tài)。如EA端為高電平(接Vcc端),CPU則執(zhí)行內(nèi)部程序存儲器中的指令。Flash存儲器編程時,該引腳加上+12V的編程允許電源VPP,當然這必須是該器件是使用12V編程電壓VPP。</p><p>  ·XTAL1:振蕩器反相放大器的及內(nèi)部時鐘發(fā)生器的輸入端。</p><p>  ·XTAL2:振蕩器反相放大器的輸出端。</p><p>  4

28、.1.2 存儲芯片AT24C02 AT24C02是美國Atmel公司的低功耗CMOS型EEPROM,內(nèi)含256×8位存儲空間,具有工作電壓寬(2.5~5.5 V)、擦寫次數(shù)多(大于10000次)、寫入速度快(小于10 ms)、抗干擾能力強、數(shù)據(jù)不易丟失、體積小等特點。而且他是采用了IIC總線式進行數(shù)據(jù)讀寫的串行器件,占用很少的資源和I/O線,并且支持在線編程,進行數(shù)據(jù)實時的存取十分方便。AT24C02中帶有的片內(nèi)地址

29、寄存器。每寫入或讀出一個數(shù)據(jù)字節(jié)后,該地址寄存器自動加1,以實現(xiàn)對下一個存儲單元的讀寫。所有字節(jié)均以單一操作方式讀取。為降低總的寫入時間,一次操作可寫入多達8個字節(jié)的數(shù)據(jù)。I2C總線是一種用于IC器件之間連接的二線制總線。他通過SDA(串行數(shù)據(jù)線)及SCL(串行時鐘線)兩根線在 連到總線上的器件之間傳送信息,并根據(jù)地址識別每個器件。 AT24C02正是運用了I?C規(guī)程,使用主/從機雙向通信,主機(通常為單片機)和從機(AT24C02)

30、均可工作于接收器和發(fā)送器狀態(tài)。主機產(chǎn)生串行時鐘信號(通過SCL引腳)并發(fā)出控制字,控制總線的傳送方向,并產(chǎn)生開始和停止的條件。無</p><p>  圖4.2 AT24C02引腳圖</p><p>  4.1.3顯示電路(LCD1602)</p><p>  LCD1602:所謂的1602即是16字符*2行的字符型LCD顯示器,它由32個字符點陣塊組成,每個字符點陣

31、塊由5×7或5×10個點陣組成,可以顯示ASCII碼表中的所有可視的字符。它內(nèi)置了字符產(chǎn)生器ROM(CGROM)、字符產(chǎn)生器RAM(CGRAM)和顯示數(shù)據(jù)RAM(DDRAM)。CGROM中內(nèi)置了192個常用字符的字模,CGRAM包含8個字節(jié)的RAM,可存放用戶自定義的字符,DDRAM就是用來寄存待顯示的字符代碼。</p><p>  1602液晶顯示器以其微功耗、體積小、顯示內(nèi)容豐富、超薄輕巧

32、的諸多優(yōu)點,在袖珍式儀表和低功耗應(yīng)用系統(tǒng)中得到越來越廣泛的應(yīng)用</p><p>  4.1.3.1 1602引腳及其具體功能如下表:</p><p>  表1 1602引腳及功能</p><p>  4.1.3.2 LCD1602基本操作時序: </p><p>  讀狀態(tài):輸入:RS=L,RW=H,E=H

33、輸出:D0~D7=狀態(tài)字</p><p>  寫指令:輸入:RS=L,RW=L,D0~D7=指令碼,E=高脈沖 輸出:無</p><p>  讀數(shù)據(jù):輸入:RS=H,RW=H,E=H 輸出:D0~D7=數(shù)據(jù)</p><p>  寫數(shù)據(jù):輸入:RS=L,RW=H,E=H 輸出:

34、無</p><p><b>  1)讀操作時序圖</b></p><p>  圖4.3 讀操作時序圖</p><p><b>  2)寫操作時序圖</b></p><p>  圖4.4寫操作時序圖</p><p><b>  3)時序參數(shù)表</b><

35、;/p><p><b>  表2 時序參數(shù)表</b></p><p>  4.1.3.3 狀態(tài)字說明表</p><p><b>  表3 狀態(tài)字說明</b></p><p>  注意:對控制器每次進行讀寫操作之前,都必須進行讀寫檢測,確保STA7=0</p><p>  4.1

36、.3.6 數(shù)據(jù)控制</p><p>  控制器內(nèi)部設(shè)有一個數(shù)據(jù)地址指針,用戶可通過它們來訪問內(nèi)部的全部80字節(jié)RAM。</p><p><b>  數(shù)據(jù)指針設(shè)置如表4</b></p><p><b>  表4 數(shù)據(jù)指針設(shè)置</b></p><p><b>  其他設(shè)置如表5</b&g

37、t;</p><p><b>  表5 其他設(shè)置</b></p><p>  LCD初始化顯示設(shè)置為:</p><p>  初始化過程(復(fù)位過程) 延時15ms 寫指令38H(不檢測忙信號) 延時5ms 寫指令38H(不檢測忙信號) 5延時5ms 寫指令38H(

38、不檢測忙信號) (以后每次寫指令、讀/寫數(shù)據(jù)操作之前均需檢測忙信號) 寫指令38H:顯示模式設(shè)置 寫指令08H:顯示關(guān)閉 寫指令01H:顯示清屏 寫指令06H:顯示光標移動設(shè)置 寫指令0CH:顯示開及光標設(shè)置。</p><p><b>  4.2電路原理圖</b></p><p>  本密

39、碼鎖系統(tǒng)硬件電路是由AT89C51單片機、存儲器AT24C02和LCD1602液晶顯示、鍵盤輸入以及輸出控制報警5個模塊組成的。其整體電路圖如下4.1所示:</p><p>  圖4.5 整體電路圖</p><p><b>  4.3各部分原理圖</b></p><p>  4.3.1單片機最小系統(tǒng)原理圖</p><p&g

40、t;  由AT89C51,復(fù)位電路,時鐘產(chǎn)生電路組成。其原理圖如下:</p><p>  圖4.6 最小系統(tǒng)電路原理圖</p><p>  4.3.2電源輸入部分</p><p>  密碼鎖主控制部分電源需要用5V直流電源供電,把頻率為50Hz、有效值為220V的單相交流電壓轉(zhuǎn)換為幅值穩(wěn)定的5V直流電壓。其主要原理是把單相電經(jīng)過電源變壓器、整流電路、濾波電路、穩(wěn)壓電

41、路轉(zhuǎn)換成穩(wěn)定的直流電壓。由于輸入電壓為電網(wǎng)電壓,一般情況下所需直流電壓的數(shù)值和電網(wǎng)電壓的有效值相差較大,因而電源變壓器的作用顯現(xiàn)出來起到降壓作用。降壓后還是交流電壓,所以需要整流電路把交流電壓轉(zhuǎn)換成直流電壓。由于經(jīng)整流電路整流后的電壓含有較大的交流分量,會影響到負載電路的正常工作。需通過低通濾波電路濾波,使輸出電壓平滑。穩(wěn)壓電路的功能是使輸出直流電壓基本不受電網(wǎng)電壓波動和負載電阻變化的影響,從而獲得穩(wěn)定性足夠高的直流壓。本電路使用充電器

42、解決電源穩(wěn)壓問題。</p><p>  4.3.4鍵盤輸入部分</p><p>  由于本設(shè)計所用到的按鍵數(shù)量較多而不適合用獨立按鍵式鍵盤。采用的是矩陣式按鍵鍵盤,它由行線和列線組成,也稱行列式鍵盤,按鍵位于行列的交叉點上,密碼鎖的密碼由鍵盤輸入完成,與獨立式按鍵鍵盤相比,要節(jié)省很多I/O口。本設(shè)計中使用的這個4*4鍵盤不但能完成密碼的輸入還能作特別功能鍵使用,比如清空顯示功能等。鍵盤的每

43、個按鍵功能在程序設(shè)計中設(shè)置 。其大體功能(看鍵盤按鍵上的標記)及與單片機引腳接法如圖4.3所示。</p><p>  圖4.7 鍵盤輸入原理圖</p><p>  4.3.5 密碼存儲部分</p><p>  用EPROM芯片AT24C02存儲密碼。AT24C02是美國Atmel公司的低功耗CMOS型E2PROM,內(nèi)含256×8位存儲空間,具有工作電壓寬(

44、2.5~5.5 V)、擦寫次數(shù)多(大于10000次)、寫入速度快(小于10 ms)、抗干擾能力強、數(shù)據(jù)不易丟失、體積小等特點。而且他是采用了I2C總線式進行數(shù)據(jù)讀寫的串行器件,占用很少的資源和I/O線,并且支持在線編程,進行數(shù)據(jù)實時的存取十分方便。AT24C02中帶有的片內(nèi)地址寄存器。每寫入或讀出一個數(shù)據(jù)字節(jié)后,該地址寄存器自動加1,以實現(xiàn)對下一個存儲單元的讀寫。所有字節(jié)均以單一操作方式讀取。為降低總的寫入時間,一次操作可寫入多達8個字

45、節(jié)的數(shù)據(jù)。I2C總線是一種用于IC器件之間連接的二線制總線。他通過SDA(串行數(shù)據(jù)線)及SCL(串行時鐘線)兩根線在連到總線上的器件之間傳送信息,并根據(jù)地址識別每個器件。AT24C02正是運用了I2C規(guī)程,使用主/從機雙向通信,主機(通常為單片機)和從機(AT24C02)均可工作于接收器和發(fā)送器狀態(tài)。主機產(chǎn)生串行時鐘信號(通過SCL引腳)并發(fā)出控制字,控制總線的傳送方向,并產(chǎn)生開始和停止的條件。無論是主機還是</p>&l

46、t;p>  圖4.8密碼存儲電路原理圖4.3.6 顯示部分 </p><p>  為了提高密碼鎖的密碼顯示效果能力。本設(shè)計的顯示部分由液晶顯示器LCD1602取代普通的數(shù)碼管來完成。顯示器一直處于初始狀態(tài),當需要對密碼鎖進行開鎖時,按下鍵盤上的開鎖按鍵后利用鍵盤上的數(shù)字鍵0-9輸入密碼,每按下一個數(shù)字鍵后在顯示器上顯示一個*,輸入多少位就顯示多少個*。當密碼輸入完成時,按下確認鍵,如果輸入的密碼正確的話,

47、 LCD子顯示“RIGHT”,LCD顯示屏?xí)@示“ERROR”,P2.0輸出的是低電平,電子密碼鎖不能被打開。通過LCD顯示屏,可以清楚的判斷出鎖所處狀態(tài) 。其顯示部分引腳接口如圖4.5所示。</p><p>  圖4.9 顯示電路原理圖</p><p>  4.3.7 報警部分</p><p>  報警部分由喇叭電路組成,當有鍵按下時,每按一下,喇叭koi響一次,

48、當密碼輸入錯誤時,單片機的P2.1引腳為低電平,喇叭發(fā)出噪鳴聲報警。如圖4.6所示。</p><p>  圖4.10 報警電路原理圖</p><p><b>  5綜合調(diào)試 </b></p><p><b>  5.1硬件調(diào)試 </b></p><p>  單片機應(yīng)用系統(tǒng)的硬件調(diào)試和軟件調(diào)試是分不開

49、的.許多硬件故障只有通過軟、硬件聯(lián)調(diào)才能發(fā)現(xiàn),但一般是先排除系統(tǒng)中比較明顯的硬件故障后才和軟件一起聯(lián)調(diào)。常見的硬件故障: (1)邏輯錯誤 硬件的邏輯錯誤是由于設(shè)計錯誤和焊接過程中的工藝錯誤而造成的,包括錯線、開路、短路等,其中最常見的是短路故障。 (2)元器件錯誤 元器件錯誤的原因有器件損壞或性能不符合要求,電解電容、二極管的極性接反或集成塊裝反等。 (3)可靠性差 應(yīng)用系統(tǒng)可靠性差的原因很多,如內(nèi)部和

50、外部的干擾、電壓紋波系數(shù)過大、器件負載過重等均會造成系統(tǒng)的可靠性差。另外,走線和布置的不合理也會造成系統(tǒng)可靠性差。 (4)電源故障 </p><p>  電源故障包括:電壓值不符合設(shè)計要求、電源功率不足、負載能力差、紋波太重等。 硬件調(diào)試辦法 脫機調(diào)試是在加電前,先用萬用表等工具,按圖紙仔細核對線路是否正確,并對元器件的安裝、型號、規(guī)格等進行仔細檢查,特別焊接時有無走線之間相互短路等。 </p&

51、gt;<p><b>  5.2軟件調(diào)試 </b></p><p>  5.2.1軟件的設(shè)計與實現(xiàn)</p><p>  軟件的設(shè)計從設(shè)計原理和主程序流程圖兩方面進行說明。</p><p>  5.2.1.1 設(shè)計原理 本設(shè)計主要由單片機、矩陣鍵盤、液晶顯示器和密碼存儲等部分組成。其中矩陣鍵盤用于輸入數(shù)字密碼和進行各種功能的

52、實現(xiàn)。由用戶通過連接單片機的矩陣鍵盤輸入密碼,后經(jīng)過單片機對用戶輸入的密碼與自己保存的密碼進行對比,從而判斷密碼是否正確,然后控制引腳的高低電平傳到開鎖電路或者報警電路控制開鎖還是報警,實際使用時只要將單片機的負載由繼電器換成電子密碼鎖的電磁鐵吸合線圈即可,當然也可以用繼電器的常開觸點去控制電磁鐵吸合線圈。本系統(tǒng)共有兩部分構(gòu)成,即硬件部分與軟件部分。其中硬件部分由電源輸入部分、鍵盤輸入部分、密碼存儲部分、顯示部分、報警部分組成,軟件部分

53、對應(yīng)的由主程序、初始化程序、LCD顯示程序、鍵盤掃描程序、啟動程序、關(guān)閉程序、鍵功能程序、密碼設(shè)置程序、EEPROM讀寫程序和延時程序等組成。</p><p>  5.2.1.2 主程序流程圖</p><p>  主程序?qū)δK進行初始化,而后調(diào)用密碼輸入子程序、密碼比較子程序、判斷密碼是否輸入正確。主程序流程圖如圖5.2所示。</p><p>  圖5.1 系統(tǒng)主程

54、序流程圖</p><p>  程序在KEIL C51上調(diào)試,采用模塊程序設(shè)計技術(shù),則逐個模塊調(diào)好后再進行系統(tǒng)程序總調(diào)。對于模塊結(jié)構(gòu)程序.要一個個子程序分別調(diào)試。調(diào)試時,一定要符合入口條件和出口條件,調(diào)試可用單步運行和斷點運行方式,通過檢查用者系統(tǒng)的CPU現(xiàn)場情況、RAM的內(nèi)容和I/O口的狀態(tài),檢測程序執(zhí)行結(jié)果是否符合設(shè)計要求,有無循環(huán)錯誤、有無機器碼錯誤以及轉(zhuǎn)移地址的錯誤,同時,還可以發(fā)現(xiàn)系統(tǒng)中存在的硬件設(shè)計錯誤

55、和軟件算法錯誤。 各程序模塊通過后,則可以把相關(guān)功能塊連在一起進行總調(diào)。這個階段若有故障,可以考慮各子程序運行時是否破壞了現(xiàn)場,緩沖單元、工作寄存器是否發(fā)生沖突,標志位的建立和清除是否有誤,堆棧區(qū)是否有溢出,輸入設(shè)備的狀態(tài)是否正常等等,若用者系統(tǒng)是在開發(fā)機的監(jiān)控程序下運行時,還要考慮用者緩沖單元是否和監(jiān)控程序的工作單元發(fā)生沖突。 單步和斷點調(diào)試后,還應(yīng)進行連續(xù)調(diào)試,用以確定定時精度、CPU的實時響應(yīng)等問題。 當全部調(diào)

56、試和修改完成后,將程序固化到AT89C51中。進行整機調(diào)試。各功能實現(xiàn)則調(diào)試完成。</p><p>  5.3 Proteus仿真 </p><p>  在硬件和軟件都能實現(xiàn)的條件下,利用Proteus進行仿真,通過不停的調(diào)試與改正,最后終于實現(xiàn)了密碼鎖的功能,Proteus仿真結(jié)果如圖6-1所示</p><p>  當連好各個模塊電路的導(dǎo)線后,導(dǎo)入芯片程序,運行

57、該密碼鎖仿真電路,通過按鍵可以進行密碼鎖的開鎖,修改密碼,錯誤密碼3次以上報警的操作,LCD顯示屏顯示相應(yīng)的操作現(xiàn)象,密碼正確可以開鎖,進而可以修改密碼,密碼錯誤三次以上由喇叭發(fā)出報警聲,如果系統(tǒng)出現(xiàn)錯誤還可以通過復(fù)位電路進行復(fù)位。</p><p>  總之,在原有的理論基礎(chǔ)上,通過Proteus能夠成功的進行密碼鎖基本操作的仿真,實現(xiàn)了相關(guān)的功能。</p><p>  圖5.2 Prot

58、eus仿真結(jié)果圖</p><p><b>  6總結(jié) </b></p><p>  以上為課程設(shè)計報告---基于單片機的電子密碼鎖設(shè)計,它經(jīng)過多次修改和整理,可以滿足設(shè)計的基本要求。本設(shè)計從經(jīng)濟實用的角度出發(fā),采用美國Atmel公司的單片機AT89C51與低功耗CMOS型E2PROM AT24C02作為主控芯片與數(shù)據(jù)存儲器單元,結(jié)合外圍的鍵盤輸入、顯示、報警等電路并用

59、匯編編寫主控芯片的控制程序,完成了一款可以多次更改密碼具有報警功能的電子密碼鎖設(shè)計。設(shè)計完全可行可以達到設(shè)計目地。使用單片機制作的電子密碼鎖具有軟硬件設(shè)計簡單,易于開發(fā),成本較低,安全可靠,操作方便等特點,可應(yīng)用于住宅、辦公室的保險箱及檔案柜等需要防盜的場所,有一定的實用性。該電路設(shè)計還具有按鍵有效提示,輸入錯誤提示,控制開鎖電平,控制報警電路,修改密碼等多種功能??稍谝馔庑姑艿那闆r下隨時修改密碼。保密性強,靈活性高,特別適用于家庭、辦

60、公室、學(xué)生宿舍及賓館等場所。</p><p>  通過對該課題的研究,加深對所學(xué)知識的理解,提高對課外知識的學(xué)習(xí)能力, 增強知識的應(yīng)用能力,提高解決實際問題的能力,培養(yǎng)自我創(chuàng)新意識。積累實踐經(jīng)驗,為以后的發(fā)展打下基礎(chǔ),也為以后我們自己在這方面的發(fā)展打下基礎(chǔ),并能夠在這方面培養(yǎng)自己的興趣。在設(shè)計中我們必須首先熟悉和掌握單片機的結(jié)構(gòu)及工作原理,單片機的接口技術(shù)及相關(guān)外圍芯片的外

61、特性,控制方法。以單片機核心的電路設(shè)計的基本方法和技術(shù)了解表關(guān)電路參數(shù)的計算方法。單片機不是完成某一個邏輯功能的芯片,而是把一個計算機系統(tǒng)集成到一個芯片上。概括的講:一塊芯片就成了一臺計算機。它的體積小、質(zhì)量輕、價格便宜、為學(xué)習(xí)、應(yīng)用和開發(fā)提供了便利條件。同時,學(xué)習(xí)使用單片機了解計算機原理與結(jié)構(gòu)的最佳選擇。 目前單片機滲透到我們生活的各個領(lǐng)域,幾乎很難找到哪個領(lǐng)域沒有單片機的蹤跡。</p><p>  課程設(shè)計設(shè)

62、計是培養(yǎng)學(xué)生綜合運用所學(xué)知識,發(fā)現(xiàn),提出,分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學(xué)生實際工作能力的具體訓(xùn)練和考察過程,隨著科學(xué)技術(shù)發(fā)展的日新日異,單片機已經(jīng)成為當今計算機應(yīng)用中空前活躍的領(lǐng)域, 在生活中可以說得是無處不在。因此作為二十一世紀的大學(xué)來說掌握單片機的開發(fā)技術(shù)是十分重要的。</p><p>  通過這次課程設(shè)計,無論從選題到定稿,從理論到實踐都使我們學(xué)到了很多東西,它不僅可以鞏固了以前所學(xué)過的

63、知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。同時也明白了理論與實踐相結(jié)合的重要性,只有理論知識是遠遠不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實際動手能力和獨立思考的能力。最后真誠感謝謝*老師在設(shè)計過程中的悉心指導(dǎo)。</p><p><b>  附錄:</b></p><p><b>  設(shè)計所用程

64、序:</b></p><p>  #include <REG51.h></p><p>  #include<intrins.h></p><p>  #define LCM_Data P0</p><p>  #define uchar unsigned char </p><p&g

65、t;  #define uint unsigned int</p><p>  #define w 6//定義密碼位數(shù)</p><p>  sbit lcd1602_rs=P2^5;</p><p>  sbit lcd1602_rw=P2^6;</p><p>  sbit lcd1602_en=P2^7;</p>

66、<p>  sbit Scl=P3^4;//24C02串行時鐘</p><p>  sbit Sda=P3^5;//24C02串行數(shù)據(jù)</p><p>  sbit ALAM = P2^1;//報警</p><p>  sbit KEY = P2^0;//開鎖</p><p>  sbit open_led=P

67、2^2;//開鎖指示燈</p><p>  bit operation=0;//操作標志位</p><p>  bit pass=0;//密碼正確標志</p><p>  bit ReInputEn=0;//重置輸入充許標志</p><p>  bit s3_keydown=0;//3秒按鍵標志位</p&

68、gt;<p>  bit key_disable=0;//鎖定鍵盤標志</p><p>  unsigned char countt0,second;//t0中斷計數(shù)器,秒計數(shù)器</p><p>  void Delay5Ms(void);</p><p>  unsigned char code a[]={0xFE,0xFD,0xFB,0xF

69、7}; //控盤掃描控制表</p><p>  unsigned char code start_line[]= {"password: "};</p><p>  unsigned char code name[] = {"Coded Management"};//顯示名稱</

70、p><p>  unsigned char code Error[] = {" error "}; //輸入錯誤</p><p>  unsigned char code Locktrue[]= {" true "};//輸入正確</p><

71、p>  unsigned char code SetNew[] = {"SetNewWordEnable"};</p><p>  unsigned char code Input[] = {"input: "};//INPUT</p><p>  unsigned char code Rese

72、tOK[] = {"ResetPasswordOK "};</p><p>  unsigned char code initword[]= {"Init password..."};</p><p>  unsigned char code Er_try[]= {"error,try again!"};</p>

73、;<p>  unsigned char code again[]= {"input again "};</p><p>  unsigned char InputData[6];//輸入密碼暫存區(qū)</p><p>  unsigned char CurrentPassword[6]={1,3,1,4,2,0};

74、 //當前密碼值</p><p>  unsigned char TempPassword[6];</p><p>  unsigned char N=0;//密碼輸入位數(shù)記數(shù)</p><p>  unsigned char ErrorCont;//錯誤次數(shù)計數(shù)</p><p>  unsigned

75、char CorrectCont;//正確輸入計數(shù)</p><p>  unsigned char ReInputCont; //重新輸入計數(shù)</p><p>  unsigned char code initpassword[6]={1,2,3,4,5,6};</p><p>  //=====================5ms延時========

76、======================</p><p>  void Delay5Ms(void)</p><p><b>  {</b></p><p>  unsigned int TempCyc = 5552;</p><p>  while(TempCyc--);</p><p>&

77、lt;b>  }</b></p><p>  //===================400ms延時==============================</p><p>  void Delay400Ms(void)</p><p><b>  {</b></p><p>  unsigned

78、 char TempCycA = 5;</p><p>  unsigned int TempCycB;</p><p>  while(TempCycA--)</p><p><b>  {</b></p><p>  TempCycB=7269;</p><p>  while(TempCyc

79、B--);</p><p><b>  }</b></p><p><b>  }</b></p><p>  //=============================================================================================</p>

80、<p>  //================================24C02========================================================</p><p>  //========================================================================================

81、=====</p><p>  void mDelay(uint t) //延時</p><p><b>  { </b></p><p><b>  uchar i;</b></p><p>  while(t--)</p><p><b>  {</b&g

82、t;</p><p>  for(i=0;i<125;i++)</p><p><b>  {;}</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void Nop(void) //

83、空操作</p><p><b>  {</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><

84、;b>  _nop_();</b></p><p><b>  }</b></p><p><b>  /*起始條件*/</b></p><p>  void Start(void)</p><p><b>  {</b></p><p&g

85、t;<b>  Sda=1;</b></p><p><b>  Scl=1;</b></p><p><b>  Nop();</b></p><p><b>  Sda=0;</b></p><p><b>  Nop();</b>

86、;</p><p><b>  }</b></p><p><b>  /*停止條件*/</b></p><p>  void Stop(void)</p><p><b>  {</b></p><p><b>  Sda=0;</b&

87、gt;</p><p><b>  Scl=1;</b></p><p><b>  Nop();</b></p><p><b>  Sda=1;</b></p><p><b>  Nop();</b></p><p><

88、b>  }</b></p><p><b>  /*應(yīng)答位*/</b></p><p>  void Ack(void)</p><p><b>  {</b></p><p><b>  Sda=0;</b></p><p><

89、b>  Nop();</b></p><p><b>  Scl=1;</b></p><p><b>  Nop();</b></p><p><b>  Scl=0;</b></p><p><b>  }</b></p>

90、<p><b>  /*反向應(yīng)答位*/</b></p><p>  void NoAck(void)</p><p><b>  {</b></p><p><b>  Sda=1;</b></p><p><b>  Nop();</b>&

91、lt;/p><p><b>  Scl=1;</b></p><p><b>  Nop();</b></p><p><b>  Scl=0;</b></p><p><b>  }</b></p><p>  /*發(fā)送數(shù)據(jù)子程序,D

92、ata為要求發(fā)送的數(shù)據(jù)*/</p><p>  void Send(uchar Data)</p><p><b>  {</b></p><p>  uchar BitCounter=8;</p><p>  uchar temp;</p><p><b>  do</b>

93、</p><p><b>  {</b></p><p>  temp=Data;</p><p><b>  Scl=0;</b></p><p><b>  Nop();</b></p><p>  if((temp&0x80)==0x80)

94、</p><p><b>  Sda=1;</b></p><p><b>  else </b></p><p><b>  Sda=0;</b></p><p><b>  Scl=1;</b></p><p>  temp=D

95、ata<<1;</p><p>  Data=temp;</p><p>  BitCounter--;</p><p><b>  }</b></p><p>  while(BitCounter);</p><p><b>  Scl=0;</b></p

96、><p><b>  }</b></p><p>  /*讀一字節(jié)的數(shù)據(jù),并返回該字節(jié)值*/</p><p>  uchar Read(void)</p><p><b>  {</b></p><p>  uchar temp=0;</p><p>  

97、uchar temp1=0;</p><p>  uchar BitCounter=8;</p><p><b>  Sda=1;</b></p><p><b>  do{</b></p><p><b>  Scl=0;</b></p><p>&l

98、t;b>  Nop();</b></p><p><b>  Scl=1;</b></p><p><b>  Nop();</b></p><p><b>  if(Sda)</b></p><p>  temp=temp|0x01;</p>

99、<p><b>  else</b></p><p>  temp=temp&0xfe;</p><p>  if(BitCounter-1)</p><p><b>  {</b></p><p>  temp1=temp<<1;</p><p&g

100、t;  temp=temp1;</p><p><b>  }</b></p><p>  BitCounter--;</p><p><b>  }</b></p><p>  while(BitCounter);</p><p>  return(temp);</p

101、><p><b>  }</b></p><p>  void WrToROM(uchar Data[],uchar Address,uchar Num)</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p

102、>  uchar *PData;</p><p>  PData=Data;</p><p>  for(i=0;i<Num;i++)</p><p><b>  {</b></p><p><b>  Start();</b></p><p>  Send(0x

103、a0);</p><p><b>  Ack();</b></p><p>  Send(Address+i);</p><p><b>  Ack();</b></p><p>  Send(*(PData+i));</p><p><b>  Ack();<

104、;/b></p><p><b>  Stop();</b></p><p>  mDelay(20);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void RdFromROM(uchar

105、Data[],uchar Address,uchar Num)</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  uchar *PData;</p><p>  PData=Data;</p><p>  for

106、(i=0;i<Num;i++)</p><p><b>  {</b></p><p><b>  Start();</b></p><p>  Send(0xa0);</p><p><b>  Ack();</b></p><p>  Send

107、(Address+i);</p><p><b>  Ack();</b></p><p><b>  Start();</b></p><p>  Send(0xa1);</p><p><b>  Ack();</b></p><p>  *(PDa

108、ta+i)=Read();</p><p><b>  Scl=0;</b></p><p><b>  NoAck();</b></p><p><b>  Stop();</b></p><p><b>  }</b></p><p

109、><b>  }</b></p><p>  //==================================================================================================</p><p>  //=======================================LCD1602

110、====================================================</p><p>  //==================================================================================================</p><p>  #define yi 0x80 //LCD第

111、一行的初始位置,因為LCD1602字符地址首位D7恒定為1(100000000=80)</p><p>  #define er 0x80+0x40 //LCD第二行初始位置(因為第二行第一個字符位置地址是0x40)</p><p>  //----------------延時函數(shù),后面經(jīng)常調(diào)用----------------------</p><p>  voi

112、d delay(uint xms)//延時函數(shù),有參函數(shù)</p><p><b>  {</b></p><p><b>  uint x,y;</b></p><p>  for(x=xms;x>0;x--)</p><p>  for(y=110;y>0;y--);</p>

113、;<p><b>  }</b></p><p>  //--------------------------寫指令---------------------------</p><p>  void write_1602com(uchar com)//****液晶寫入指令函數(shù)****</p><p><b>  {&l

114、t;/b></p><p>  lcd1602_rs=0;//數(shù)據(jù)/指令選擇置為指令</p><p>  lcd1602_rw=0; //讀寫選擇置為寫</p><p>  P0=com;//送入數(shù)據(jù)</p><p><b>  delay(1);</b></p><p>  lcd1602

115、_en=1;//拉高使能端,為制造有效的下降沿做準備</p><p><b>  delay(1);</b></p><p>  lcd1602_en=0;//en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令</p><p><b>  }</b></p><p>  //------------------

116、-------寫數(shù)據(jù)-----------------------------</p><p>  void write_1602dat(uchar dat)//***液晶寫入數(shù)據(jù)函數(shù)****</p><p><b>  {</b></p><p>  lcd1602_rs=1;//數(shù)據(jù)/指令選擇置為數(shù)據(jù)</p><p>

117、;  lcd1602_rw=0; //讀寫選擇置為寫</p><p>  P0=dat;//送入數(shù)據(jù)</p><p><b>  delay(1);</b></p><p>  lcd1602_en=1; //en置高電平,為制造下降沿做準備</p><p><b>  delay(1);</b>&

118、lt;/p><p>  lcd1602_en=0; //en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令</p><p><b>  }</b></p><p>  //-------------------------初始化-------------------------</p><p>  void lcd_init(void)

119、</p><p><b>  {</b></p><p>  write_1602com(0x38);//設(shè)置液晶工作模式,意思:16*2行顯示,5*7點陣,8位數(shù)據(jù)</p><p>  write_1602com(0x0c);//開顯示不顯示光標</p><p>  write_1602com(0x06);//整屏不移

120、動,光標自動右移</p><p>  write_1602com(0x01);//清顯示</p><p><b>  }</b></p><p>  //========================================================================================</p&g

121、t;<p>  //=========================================================================================</p><p>  //==============將按鍵值編碼為數(shù)值=========================</p><p>  unsigned char codi

122、ng(unsigned char m) </p><p><b>  {</b></p><p>  unsigned char k;</p><p><b>  switch(m)</b></p><p><b>  {</b></p><p>  

123、case (0x18): k=1;break;</p><p>  case (0x28): k=2;break;</p><p>  case (0x48): k=3;break;</p><p>  case (0x88): k='A';break;</p><p>  case (0x14): k=4;break;<

124、;/p><p>  case (0x24): k=5;break;</p><p>  case (0x44): k=6;break;</p><p>  case (0x84): k='B';break;</p><p>  case (0x12): k=7;break;</p><p>  case (

125、0x22): k=8;break;</p><p>  case (0x42): k=9;break;</p><p>  case (0x82): k='C';break;</p><p>  case (0x11): k='*';break;</p><p>  case (0x21): k=0;break

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論