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

下載本文檔

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

文檔簡介

1、基于51單片機(jī)的電子密碼鎖設(shè)計 摘要:本文設(shè)計了一種基于單片機(jī)的電子密碼鎖,由單片機(jī)系統(tǒng)、矩陣鍵盤、LED顯示和報警系統(tǒng)組成。系統(tǒng)能完成開鎖、超次鎖定、報警、修改用戶密碼基本的密碼鎖的功能。除上述基本的密碼鎖功能外,還具有掉電存儲、聲光提示等功能。本密碼鎖具有安全性高、成本低、功耗低、易操作、記住密碼即可開鎖等優(yōu)點。關(guān)鍵詞:STC89C52;電子密碼鎖;矩陣鍵盤1緒論1.1 課題背景 隨著人們生活水平的提高和安全意識的加強(qiáng),對安全的要求也就越來越高。鎖自古以來就是把守護(hù)門的鐵將軍,人們對它要求甚高,既要安全可靠的防盜,又要使用方便,這也是制鎖者長期以來研制的主題。隨著電子技術(shù)的發(fā)展,各類電子產(chǎn)

2、品應(yīng)運而生,電子密碼鎖就是其中之一。據(jù)有關(guān)資料介紹,電子密碼鎖的研究從20世紀(jì)30年代就開始了,在一些特殊場所早就有所應(yīng)用。這種鎖是通過鍵盤輸入一組密碼完成開鎖過程。研究這種鎖的初衷,就是為提高鎖的安全性。由于電子鎖的密鑰量(密碼量)極大,可以與機(jī)械鎖配合使用,并且可以避免因鑰匙被仿制而留下安全隱患。電子鎖只需記住一組密碼,無需攜帶金屬鑰匙,免除了人們攜帶金屬鑰匙的煩惱,而被越來越多的人所欣賞。電子鎖的種類繁多,例如數(shù)碼鎖,指紋鎖,磁卡鎖,IC卡鎖,生物鎖等。但較實用的還是按鍵式電子密碼鎖。1.2 課題設(shè)計目標(biāo)本設(shè)計采用STC89C52單片機(jī)為主控芯片,通過軟件程序組成電子密碼鎖系統(tǒng),能夠?qū)崿F(xiàn)

3、:(1) 密碼輸入錯誤,蜂鳴器報警。(2) 密碼為6位,可以隨意更改,(3) 采用矩陣按鍵輸入。(4) 通過LCD1602液晶顯示。(5) 有開鎖指示燈。(6)查閱有關(guān)文獻(xiàn)與資料,深入學(xué)習(xí)單片機(jī)硬件原理圖及軟件編程相關(guān)知識。2系統(tǒng)方案論證 系統(tǒng)將從主控部分和密碼輸入方式兩方面進(jìn)行論證。2.1 主控部分的選擇方案一:采用數(shù)字電路控制 用以74LS112雙JK觸發(fā)器構(gòu)成的數(shù)字邏輯電路作為密碼鎖的核心控制,共設(shè)了9個用戶輸入鍵,其中只有4個是有效的密碼按鍵,其它的都是干擾按鍵,若按下干擾鍵,鍵盤輸入電路自動清零,原先輸入的密碼無效,需要重新輸入;如果用戶輸入密碼的時間超過10秒(一般情況下,用戶不會

4、超過10秒,若用戶覺得不便,還可以修改)電路將報警20秒,若電路連續(xù)報警三次,電路將鎖定鍵盤2分鐘,防止他人的非法操作。采用數(shù)字電路設(shè)計的方案好處就是設(shè)計簡單但控制的準(zhǔn)確性和靈活性差。故不采用。 方案二:采用以單片機(jī)為核心的控制方案 選用單片機(jī)作為系統(tǒng)的核心部件,實現(xiàn)控制與處理的功能。單片機(jī)具有資源豐富、速度快、編程容易等優(yōu)點。利用單片機(jī)內(nèi)部的隨機(jī)存儲器(RAM)和只讀存儲器(ROM)及其引腳資源,外接液晶顯示(LCD),鍵盤輸入等實現(xiàn)數(shù)據(jù)的處理傳輸和顯示功能,基本上能實現(xiàn)設(shè)計指標(biāo),可以看出方案二控制靈活準(zhǔn)確性好且保密性強(qiáng)還具有擴(kuò)展功能,根據(jù)現(xiàn)實生活的需要綜合考慮,此次設(shè)計采用此方案。2.2

5、密碼輸入方式的選擇方案一:指紋輸入識別 指紋識別技術(shù)主要涉及四個功能:讀取指紋圖像、提取特征、保存數(shù)據(jù)和比對。通過指紋讀取設(shè)備讀取到人體指紋的圖像,然后要對原始圖像進(jìn)行初步的處理,使之更清晰,再通過指紋辨識軟件建立指紋的特征數(shù)據(jù)。軟件從指紋上找到被稱為"節(jié)點"(minutiae)的數(shù)據(jù)點,即指紋紋路的分叉、終止或打圈處的坐標(biāo)位置,這些點同時具有七種以上的唯一性特征。通常手指上平均具有70個節(jié)點,所以這種方法會產(chǎn)生大約490個數(shù)據(jù)。這些數(shù)據(jù),通常稱為模板。通過計算機(jī)模糊比較的方法,把兩個指紋的模板進(jìn)行比較,計算出它們的相似程度,最終得到兩個指紋的匹配結(jié)果,從而判斷輸入結(jié)果的正

6、確與否??紤]到本方案軟硬件太過復(fù)雜,而且成本也高,故不采用。方案二:矩陣鍵盤輸入識別 由各按鍵組成的矩陣鍵盤每條行線和列線都對應(yīng)一條I/O口線,鍵位設(shè)在行線和列線的交叉點,當(dāng)一個鍵按下就會有某一條行線與某一條列線接觸,只要確定接觸的是哪兩條線,即哪兩個I/O口線,就可以確定哪一個鍵被觸動。行線設(shè)計成上拉口線,初始時被置高電位,列線懸空,初始置低。通過不斷讀行線口線,或者中斷方式觸發(fā)鍵位掃描。當(dāng)發(fā)現(xiàn)有鍵按下,將列線逐一置低,其他列線置高,讀行線口線。當(dāng)某條列線置低時,某條行線也被拉低,則確定這兩條線的交點處的按鈕被按下。每個按鍵都可通過程序賦予功能,從而完成密碼識別。本方案簡單易行,故采用。3

7、硬件電路設(shè)計3.1 硬件系統(tǒng)總體電路設(shè)計 本設(shè)計主要由單片機(jī)、矩陣鍵盤、液晶顯示器和密碼存儲等部分組成。其中矩陣鍵盤用于輸入數(shù)字密碼和進(jìn)行各種功能的實現(xiàn)。由用戶通過連接單片機(jī)的矩陣鍵盤輸入密碼,后經(jīng)過單片機(jī)對用戶輸入的密碼與自己保存的密碼進(jìn)行對比,從而判斷密碼是否正確,然后控制引腳的高低電平傳到開鎖電路或者報警電路控制開鎖還是報警,實際使用時只要將單片機(jī)的負(fù)載由繼電器換成電子密碼鎖的電磁鐵吸合線圈即可。系統(tǒng)整體框圖如圖1所示。 中央控制芯片 AT89C52 電源電路 密碼保護(hù) 鍵盤輸入電路 顯示電路 報警電路 圖1 系統(tǒng)結(jié)構(gòu)框圖各模塊功能如下: 矩陣鍵盤輸入模塊:分為密碼輸入按鍵與功能按鍵,用

8、于完成密碼鎖輸入功能。 顯示模塊:用于完成對系統(tǒng)狀態(tài)顯示及操作提示功能。 報警電路:用于完成輸錯密碼時候的警報功能。 密碼存儲模塊:用于完成掉電存儲功能,使修改的密碼斷電后仍能保存。 電源模塊:用于對系統(tǒng)電路提供+5V的直流電壓。3.2 單片機(jī)最小系統(tǒng)模塊電路設(shè)計 由STC89C52,復(fù)位電路,時鐘產(chǎn)生電路組成。STC89C52是美國Atmel公司生產(chǎn)的低電壓,高性能CMOS8位單片機(jī),片內(nèi)含8k bytes的可反復(fù)擦寫的只讀程序存儲器(PEROM)和256bytes的隨機(jī)存取數(shù)據(jù)存儲器(RAM),STC89C52有40個引腳,32個外部雙向輸入/輸出(I/O)端口,同時內(nèi)含2個外中

9、斷口,3個16位可編程定時計數(shù)器,2個全雙工串行通信口,2個讀寫口線。主要功能特性: ·8k可反復(fù)擦寫(>1000次)Flash ROM,32個雙向I/O口,256x8bit內(nèi)部RAM,時鐘頻率0-24MHz,可編程UART串行通道。 ·3個16位可編程定時/計數(shù)器中斷,2個串行中斷,2個外部中斷源,共6個中斷源,2個讀寫中斷口線。引腳功能如下: ·P0口:P0口是一組8位漏極開路型雙向I/O口,也即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口用時,每位能吸收電流的方式驅(qū)動8個TTL邏輯門電路,對端口P0寫“1”時,可作為高阻抗輸入端用。在訪問外部數(shù)據(jù)存儲器或程序存儲器

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

11、,某個引腳被外部信號拉低時會輸出一個電流(IIL)。在訪問8位地址的外部數(shù)據(jù)存儲器(如執(zhí)行MOVXRI指令)時,P2口輸出P2鎖存器的內(nèi)容。Flash編程或校驗時,P2亦接收高位地址和一些控制信號。 ·P3口:P3口是一組帶有內(nèi)部上拉電阻的8位雙向I/O口。P3口輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。對P3口寫入“1”時,它們被內(nèi)部上位電阻拉高并可作為輸入端口。此時,被外部拉低的P3口將用上拉電阻輸出電流(IIL)。P3口除了作為一般的I/O口線外,更重要的用途是它的第二功能。 ·RST:復(fù)位輸入 。當(dāng)振蕩器工作時,RST引腳出現(xiàn)兩個機(jī)器周期以上高電平將使

12、單片復(fù)位。 ·ALE/PROG:當(dāng)訪問外部程序存儲器或數(shù)據(jù)存儲器時,ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節(jié)。一般情況下,ALE仍以時鐘振蕩頻率的1/6輸出固定的脈沖信號,因此它可對外輸出時鐘或用于定時目的。要注意的是:每當(dāng)訪問外部數(shù)據(jù)存儲器時將跳過一個ALE脈沖。 ·EA/VPP:外部訪問允許。欲使CPU僅訪問外部程序存儲器(地址為0000HFFFFH),EA端必須保持低電平(接地)。需注意的是:如果加密位LB1被編程,復(fù)位時內(nèi)部會鎖存EA端狀態(tài)。如EA端為高電平(接Vcc端),CPU則執(zhí)行內(nèi)部程序存儲器中的指令。Flash存儲器編程時,該引腳加上+12V的

13、編程允許電源VPP,當(dāng)然這必須是該器件是使用12V編程電壓VPP。 ·XTAL1:振蕩器反相放大器的及內(nèi)部時鐘發(fā)生器的輸入端。 ·XTAL2:振蕩器反相放大器的輸出端。 引腳XTAL1 和XTAL2 分別是該放大器的輸入端和輸出端。這個放大器與作為反饋元件的片外石英晶體或陶瓷諧振器一起構(gòu)成自激振蕩器。當(dāng)單片機(jī)的復(fù)位引腳RST(全稱RESET)出現(xiàn)2個機(jī)器周期以上的高電平時,單片機(jī)就執(zhí)行復(fù)位操作。如果RST持續(xù)為高電平,單片機(jī)就處于循環(huán)復(fù)位狀態(tài)。根據(jù)應(yīng)用的要求,復(fù)位操作通常有兩種基本形式:上電復(fù)位和開關(guān)復(fù)位。其原理圖如圖2所示。圖2 最小系統(tǒng)電路原理圖3.3 電源輸入模塊電路

14、設(shè)計 密碼鎖主控制部分電源需要用5V直流電源供電,把頻率為50Hz、有效值為220V的單相交流電壓轉(zhuǎn)換為幅值穩(wěn)定的5V直流電壓。其主要原理是把單相電經(jīng)過電源變壓器、整流電路、濾波電路、穩(wěn)壓電路轉(zhuǎn)換成穩(wěn)定的直流電壓。由于輸入電壓為電網(wǎng)電壓,一般情況下所需直流電壓的數(shù)值和電網(wǎng)電壓的有效值相差較大,因而電源變壓器的作用顯現(xiàn)出來起到降壓作用。降壓后還是交流電壓,所以需要整流電路把交流電壓轉(zhuǎn)換成直流電壓。由于經(jīng)整流電路整流后的電壓含有較大的交流分量,會影響到負(fù)載電路的正常工作。需通過低通濾波電路濾波,使輸出電壓平滑。穩(wěn)壓電路的功能是使輸出直流電壓基本不受電網(wǎng)電壓波動和負(fù)載電阻變化的影響,從而獲得穩(wěn)定性足

15、夠高的直流壓。本電路使用充電器解決電源穩(wěn)壓問題。3.4 鍵盤輸入模塊電路設(shè)計 本設(shè)計就采用行列式鍵盤,同時也能減少鍵盤與單片機(jī)接口時所占用的I/O線的數(shù)目,在按鍵比較多的時候,通常采用這樣方法。每一條水平(行線)與垂直線(列線)的交叉處不相通,而是通過一個按鍵來連通,利用這種行列式矩陣結(jié)構(gòu)只需要N條行線和M條列線,即可組成具有N×M個按鍵的鍵盤。在這種行列式矩陣鍵盤非鍵盤編碼的單片機(jī)系統(tǒng)中,鍵盤處理程序首先執(zhí)行等待按鍵并確認(rèn)有無按鍵按下的程序段。 4×4矩陣鍵盤的工作原理: 在鍵盤中按鍵數(shù)量較多時,為了減少I/O口的占用,通常將按鍵排列成矩陣形式,如圖3所示。在矩陣式鍵盤中

16、,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。這樣,一個端口(如P1口)就可以構(gòu)成4*4=16個按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數(shù)比較多時,采用矩陣法來做鍵盤是合理的。掃描原理: 把每個鍵都分成水平和垂直的兩端接入,比如說掃描碼是從垂直的入,那就代表那一行所接收到的掃描碼是同一個bit,而讀入掃描碼的則是水平,掃描的動作是先輸入掃描碼,再去讀取輸入的值,經(jīng)過比對之后就可知道是哪個鍵被按下。 比如說掃描碼送入01111111,前面的0111是代

17、表此時掃描第一行P1.0列,而后面的1111是讓讀取的4行接腳先設(shè)為VDD,若此時第一行的第三列按鍵被按下,那讀取的結(jié)果就會變成01111101(注意1111變成1101),其中LSB的第三個bit會由1變成0,這是因為這個按鍵被按下之后,會被垂直的掃描碼電位short,而把讀取的LSB的bit電位拉到0,此即為掃描原理。 由於這種按鍵是機(jī)械式的開關(guān),當(dāng)按鍵被按下時,鍵會震動一小段時間才穩(wěn)定,為了避免讓8051誤判為多次輸入同一按鍵,我們必須在偵測到有按鍵被按下,就Delay一小段時間,使鍵盤以達(dá)穩(wěn)定狀態(tài),再去判讀所按下的鍵,就可以讓鍵盤的輸入穩(wěn)定。鍵盤整體電路圖如圖3所示。 圖3 鍵盤整體模

18、框圖3.5 密碼存儲模塊電路設(shè)計 用EPROM芯片AT24C02存儲密碼。AT24C02是美國Atmel公司的低功耗CMOS型EPROM,內(nèi)含256×8位存儲空間,具有工作電壓寬(2.55.5 V)、擦寫次數(shù)多(大于10000次)、寫入速度快(小于10 ms)、抗干擾能力強(qiáng)、數(shù)據(jù)不易丟失、體積小等特點。而且他是采用了I2C總線式進(jìn)行數(shù)據(jù)讀寫的串行器件,占用很少的資源和I/O線,并且支持在線編程,進(jìn)行數(shù)據(jù)實時的存取十分方便。AT24C02中帶有的片內(nèi)地址寄存器。每寫入或讀出一個數(shù)據(jù)字節(jié)后,該地址寄存器自動加1,以實現(xiàn)對下一個存儲單元的讀寫。所有字節(jié)均以單一操作方式讀取。為降低總的寫入時

19、間,一次操作可寫入多達(dá)8個字節(jié)的數(shù)據(jù)。I2C總線是一種用于I2C器件之間連接的二線制總線。他通過SDA(串行數(shù)據(jù)線)及SCL(串行時鐘線)兩根線在 連到總線上的器件之間傳送信息,并根據(jù)地址識別每個器件。 AT24C02正是運用了I2C規(guī)程,使用主/從機(jī)雙向通信,主機(jī)(通常為單片機(jī))和從機(jī)(AT24C02)均可工作于接收器和發(fā)送器狀態(tài)。主機(jī)產(chǎn)生串行時鐘信號(通過SCL引腳)并發(fā)出控制字,控制總線的傳送方向,并產(chǎn)生開始和停止的條件。無論是主機(jī)還是從機(jī),接收到一個字節(jié)后必須發(fā)出一個確認(rèn)信號ACK。AT24C02的控制字由8位二進(jìn)制數(shù)構(gòu)成,在開始信號發(fā)出以后,主機(jī)便會發(fā)出控制字,以選擇從機(jī)并控制總線傳

20、送的方向。管腳功能如下: SCL 為串行時鐘:串行時鐘輸入管腳用于產(chǎn)生器件所有數(shù)據(jù)發(fā)送或接收的時鐘這是一個輸入管腳。SDL 為串行數(shù)據(jù)/地址:雙向串行數(shù)據(jù)/地址管腳用于器件所有數(shù)據(jù)的發(fā)送或接收SDL,是一個開漏輸出管腳可與其它開漏輸出或集電極開路輸出進(jìn)行線或。A0、A1、A2 為器件地址輸入端:當(dāng)使用24C02 時最大可級聯(lián)8個器件,如果只有一個24C02被總線尋址,這三個地址輸入腳A0、A1、A2可懸空或連接到Vss。WP為寫保護(hù):如果WP 管腳連接到Vcc 所有的內(nèi)容都被寫保護(hù)只能讀當(dāng)WP, 管腳連接到Vss 或懸空,允許器件進(jìn)行正常的讀/寫操作。管腳圖如圖4所示。圖4 AT24C02引腳

21、圖3.6 顯示模塊電路設(shè)計 為了提高密碼鎖的密碼顯示效果能力。本設(shè)計的顯示部分由液晶顯示器LCD1602取代普通的數(shù)碼管來完成。LCD1602中所謂的1602即是16字符*2行的字符型LCD顯示器,它由32個字符點陣塊組成,每個字符點陣塊由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就是用來寄存待顯示的字符代碼。 1602液晶顯示器以其微功耗

22、、體積小、顯示內(nèi)容豐富、超薄輕巧的諸多優(yōu)點,在袖珍式儀表和低功耗應(yīng)用系統(tǒng)中得到越來越廣泛的應(yīng)用本系統(tǒng)也將用到。1602引腳及其具體功能如表1所示。表1 1602引腳及功能編號符號引腳說明編號符號引腳說明1VSS電源地9D2Data I/O2VDD電源正極10D3Data I/O3VL液晶顯示偏壓信號11D4Data I/O4RS數(shù)據(jù)/命令選擇端(H/L)12D5Data I/O5R/W讀/寫選擇端(H/L)13D6Data I/O6E使能信號14D7Data I/O7D0Data I/O15BLA背光源正極8D1Data I/O16BLK背光源負(fù)極 1)讀操作時序圖如圖5所示。圖5 讀操作時序

23、圖 2)寫操作時序圖如圖6所示。圖6 寫操作時序圖 3)時序參數(shù)表如表2所示。表2 時序參數(shù)表時序參數(shù)符號極限值單位測試條件最小值典型值最大值E信號周期tc400-ns引腳EE脈沖寬度tpw ,tF150-nsE上升/下降沿時間tR-25ns地址建立時間tsp130-ns引腳E、RS、R/W地址保持時間tHD110-ns數(shù)據(jù)建立時間(讀操作)tD-100ns引腳DB0DB7數(shù)據(jù)保持時間(讀操作)tHD220-ns數(shù)據(jù)建立時間(寫操作)tsp240-ns數(shù)據(jù)保持時間(寫操作)tHD210-ns注意:對控制器每次進(jìn)行讀寫操作之前,都必須進(jìn)行讀寫檢測,確保STA7=0 顯示器一直處于初始狀態(tài),當(dāng)需要

24、對密碼鎖進(jìn)行開鎖時,按下鍵盤上的開鎖按鍵后利用鍵盤上的數(shù)字鍵09輸入密碼,每按下一個數(shù)字鍵后在顯示器上顯示一個*,輸入多少位就顯示多少個*。當(dāng)密碼輸入完成時,按下確認(rèn)鍵,如果輸入的密碼正確的話, LCD子顯示“RIGHT”,LCD顯示屏?xí)@示“ERROR”,P2.0輸出的是低電平,電子密碼鎖不能被打開。通過LCD顯示屏,可以清楚的判斷出鎖所處狀態(tài) 。其顯示部分引腳接口如圖7所示。圖7 顯示電路原理圖3.7 報警部分 報警部分由喇叭電路組成,當(dāng)有鍵按下時,每按一下,喇叭koi響一次,當(dāng)密碼輸入錯誤時,單片機(jī)的P2.1引腳為低電平,喇叭發(fā)出噪鳴聲報警。如圖8所示:圖8 報警電路原理圖3.8 開鎖機(jī)

25、構(gòu) 用戶通過LCD提示信息,用鍵盤輸入正確密碼,從而達(dá)到開鎖的目的。當(dāng)用戶輸入的密碼正確并且是在按下確定鍵的話,單片機(jī)便輸出開門信號,送到開鎖驅(qū)動 電路,然后驅(qū)動電磁鎖,達(dá)到開門的目的。電路驅(qū)動和開鎖兩級組成。由D5、R1、T10組成驅(qū)動電路,其中T10可以選擇普通的小功率三極管如9014、9018都可以滿足要求。D5作為開鎖的提示;由D6、C24、T11組成。其中D6、C24是為了消除電磁鎖可能產(chǎn)生的反向高電壓以及可能產(chǎn)生的電磁干擾。T11可選用中功率的三極管如8050,電磁鎖的選用要視情況而定,但是吸合力要足夠且由一定的余量。 4 軟件設(shè)計4.1 軟件設(shè)計原理 本設(shè)計主要由單片機(jī)、矩陣鍵盤

26、、液晶顯示器和密碼存儲等部分組成。其中矩陣鍵盤用于輸入數(shù)字密碼和進(jìn)行各種功能的實現(xiàn)。由用戶通過連接單片機(jī)的矩陣鍵盤輸入密碼,后經(jīng)過單片機(jī)對用戶輸入的密碼與自己保存的密碼進(jìn)行對比,從而判斷密碼是否正確,然后控制引腳的高低電平傳到開鎖電路或者報警電路控制開鎖還是報警,實際使用時只要將單片機(jī)的負(fù)載由繼電器換成電子密碼鎖的電磁鐵吸合線圈即可,當(dāng)然也可以用繼電器的常開觸點去控制電磁鐵吸合線圈。本系統(tǒng)共有兩部分構(gòu)成,即硬件部分與軟件部分。其中硬件部分由電源輸入部分、鍵盤輸入部分、密碼存儲部分、顯示部分、報警部分組成,軟件部分對應(yīng)的由主程序、初始化程序、LCD顯示程序、鍵盤掃描程序、啟動程序、關(guān)閉程序、鍵功

27、能程序、密碼設(shè)置程序、EEPROM讀寫程序和延時程序等組成。流程圖如圖9所示。開始初始化模式選擇識別按鍵密碼輸入手動清除密碼比較開門舊密碼輸入新密碼輸入存入緩存區(qū)再次輸入密碼重新輸入設(shè)置完畢返回NANBY圖9 主程序的流程圖4.2 LED顯示子程序 LED顯示流程圖如圖10所示。圖10 LED顯示流程圖4.3 鍵盤掃描及識別子程序 鍵盤采用查詢的方式,放在主程序中,當(dāng)沒有按鍵按下的時候,單片機(jī)循環(huán)主程序,一旦有按鍵按下,便轉(zhuǎn)向相應(yīng)的子程序處理,處理結(jié)束再返回。其程序流程如圖11所示。圖11 鍵盤掃描程序流程圖4.4 系統(tǒng)模塊密碼設(shè)置子程序 由于設(shè)計是分模塊化進(jìn)行,所以子程序是整體軟件系統(tǒng)的組成

28、部分,子程序不但可以使程序化整為零,使其復(fù)雜簡單化,同時也方便閱讀,修改等,每個功能模塊都有它自己的子程序,在本設(shè)計中是用LCD顯示數(shù)據(jù),所以就要用到顯示子程序。設(shè)計中用的是矩陣鍵盤,所以就用到鍵盤掃描子程序,例如還有顯示初始化子程序、LCD忙檢測子程序、關(guān)閉狀態(tài)顯示子程序、開鎖狀態(tài)顯示子程序、密碼輸入及修改狀態(tài)顯示子程序、密碼輸入錯誤后的提示子程序等。密碼修改子程序流程圖如下圖12所示。選擇模式舊密碼輸入新密碼輸入存入緩存再次輸入密碼比較密碼重新輸入返回YN是否大于3次鎖定NY圖12 設(shè)置密碼子程序5 系統(tǒng)制作及調(diào)試分析5.1焊接注意事項LCD的注意事項1. 采用焊接方法將金屬基P

29、IN安裝于LCD時,從玻璃末端到PCB的焊接位置的長度至少5mm,焊接溫度必須在260以下,且焊接時間必須在10秒以內(nèi),以免焊接過程中對裝置的損壞,確保焊接性能。在230,30秒條件下,90%的焊料須緊密附著于PIN上。2. 對LCD基板或基PIN焊接位置的調(diào)整必須在安裝前完成。嚴(yán)禁猛烈移動基PIN,否則會機(jī)械地破壞LCD屏與基PIN之間的連接點。焊接時平放LCD,盡量不讓LCD受力。3. 焊接LCD基板時,將其小心、平衡地插入PCB插槽,以避免損壞基PIN或LCD基板。4. 焊接時,LCD基板不應(yīng)長時間置于焊錫蒸汽中,清洗PCB時,必須避免污染LCD基板,否則可

30、能損壞顯示器表面的偏光片及封口膠。5. 顯示器表面的保護(hù)膜直到焊接完成才可揭掉,禁止手指及其它硬物接觸偏光片,禁止水和其他化學(xué)物質(zhì)沾污裝置,因為這些物質(zhì)會污染顯示器表面。單片機(jī)焊接注意事項:80s51單片機(jī)與其它單片機(jī),dsp,arm芯片相比較而言是脆弱的,如果焊接時不小心就很可能把芯片損壞!建議用比較好的恒溫可調(diào)的烙鐵,功率在30瓦左右,溫度控制在260到300度,建議采用點焊而不用拉焊,焊接時烙鐵放在每個引腳的時間不能太長(最好低于3秒)。上邊提到的方法還不能確保芯片完好,對芯片有危害的還有帶電烙鐵的靜電感應(yīng)!烙鐵質(zhì)量不是太好的,焊接時可以把烙鐵電源插頭拔掉。其他的電子器件焊接須

31、知:一般分四步驟進(jìn)行。準(zhǔn)備焊接:清潔被焊元件處的積塵及油污,再將被焊元器件周圍的元器件左右掰一掰,讓電烙鐵頭可以觸到被焊元器件的焊錫處,以免烙鐵頭伸向焊接處時燙壞其他元器件。焊接新的元器件時,應(yīng)對元器件的引線鍍錫。加熱焊接:將沾有少許焊錫和松香的電烙鐵頭接觸被焊元器件約幾秒鐘。若是要拆下印刷板上的元器件,則待烙鐵頭加熱后,用手或銀子輕輕拉動元器件,看是否可以取下。清理焊接面:若所焊部位焊錫過多,可將烙鐵頭上的焊錫甩掉(注意不要燙傷皮膚,也不要甩到印刷電路板上!),用光烙錫頭"沾"些焊錫出來。若焊點焊錫過少、不圓滑時,可以用電烙鐵頭"蘸"些焊錫對焊點進(jìn)行補

32、焊。檢查焊點:看焊點是否圓潤、光亮、牢固,是否有與周圍元器件連焊的現(xiàn)象。電子密碼鎖的硬件聯(lián)接原理圖按下列順序依次焊接: (1)焊接單片機(jī)的晶振電路、復(fù)位電路等單片機(jī)的最小系統(tǒng)的外圍電路。 (2)焊接LCD的相應(yīng)管腳并把LCD的管腳單片機(jī)相連接。 (3)焊接鍵盤的按鍵電路。 (4)焊接電子密碼鎖的密碼輸入錯誤的報警電路。 (5)焊接密碼鎖的開鎖機(jī)構(gòu)電路。 (6)焊接其他接口及輔助電路。 (7)焊接接地及高電平。5.2軟件調(diào)試 在硬件支持的環(huán)境下,用proteus設(shè)計好的電路,Keil編好的程序編譯成芯片可識別的文件,利用PC機(jī)寫進(jìn)proteus程序圖芯片內(nèi)進(jìn)行仿真測試,并對其出現(xiàn)的錯誤進(jìn)行修改,

33、由圖13圖14可看出最終調(diào)試成功。 圖13 keil編譯程序成功圖4.7 仿真成功密碼正確5.3 硬件調(diào)試 電源、晶振電路和復(fù)位電路都無異常。 Lcd焊接時的問題:(1)接通電源后lcd無反應(yīng),各個引腳均屬正常。推斷可能是初始化程序出現(xiàn)問題。(2)接通電源開門燈和報警電路就會工作,分析原因是單片機(jī)剛開始各個管腳輸出高電平。6 心得體會課程設(shè)計是培養(yǎng)學(xué)生綜合運用所學(xué)知識,發(fā)現(xiàn),提出,分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學(xué)生實際工作能力的具體訓(xùn)練和考察過程.隨著科學(xué)技術(shù)發(fā)展的日新日異,單片機(jī)已經(jīng)成為當(dāng)今計算機(jī)應(yīng)用中空前活躍的領(lǐng)域, 在生活中可以說得是無處不在。因此作為二十一世

34、紀(jì)的大學(xué)來說掌握單片機(jī)的開發(fā)技術(shù)是十分重要的?;仡櫰鸫舜螁纹瑱C(jī)課程設(shè)計,至今我仍感慨頗多,的確,從選題到定稿,從理論到實踐,在整整兩星期的日子里,可以說得是苦多于甜,但是可以學(xué)到很多很多的的東西,同時不僅可以鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實際動手能力和獨立思考的能力。在設(shè)計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之

35、處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固,對單片機(jī)匯編語言掌握得不好,通過這次課程設(shè)計之后,一定把以前所學(xué)過的知識重新溫故。這次課程設(shè)計終于順利完成了,在設(shè)計中遇到了很多編程問題,在同學(xué)的幫助下,終于游逆而解。非常感謝!參考文獻(xiàn)01 何宏主編. 單片機(jī)原理與接口技術(shù). 北京:國防工業(yè)出版社. 2006.0702 楊西明, 朱騏主編 . 單片機(jī)編程與應(yīng)用入門. 北京:機(jī)械工業(yè)出版社 .2004.06 03 先鋒工作室編著. 單片機(jī)程序設(shè)計實例. 北京: 清華大學(xué)出版社 .2003.0104 謝宜仁主編 . 單片機(jī)實用技術(shù)問答. 北京:

36、 人民郵電出版社 . 2003.0205 房小翠,王金鳳編著. 單片機(jī)實用系統(tǒng)設(shè)計技術(shù). 北京: 國防工業(yè)出版社 . 1999.0606 各種網(wǎng)絡(luò)教程及其他07 王寬仁. 可靠安全的智能密碼鎖. 電子技術(shù)應(yīng)用 , 200118 董繼成. 能防止多次試探密碼的單片機(jī)密碼鎖.國外電子元器件 , 2004, 3 09趙益丹,徐曉林,周振峰編著.電子密碼鎖的系統(tǒng)原理、設(shè)計程序及流程圖.嘉興學(xué)院學(xué)報,2003,1510 張培仁. 基于 C語言編程 MCS- 51單片機(jī)原理與應(yīng)用. 北京: 清華大學(xué)出版社 , 2002.1211 李朝清. PC機(jī)及單片機(jī)數(shù)據(jù)通信技術(shù). 北京:北京航空航

37、天大學(xué)出版社 , 1999.12 劉文濤.MCS-51單片機(jī)培訓(xùn)教程(C51)版.電子工業(yè)出版社,2005.8 附錄 電子密碼鎖整體設(shè)計圖附錄 電子密碼鎖程序源代碼#include <REG51.h>#include<intrins.h>#define LCM_Data P0#define uchar unsigned char #define uint unsigned int#define w 6sbit lcd1602_rs=P26;sbit lcd1602_en=P27;sbit Scl=P34;sbit Sda=P35;sbit ALAM = P21;sbit

38、 KEY = P36;sbit YY = P24; sbit open_led=P22;bit operation=0;bit pass=0;bit ReInputEn=0;bit s3_keydown=0;bit key_disable=0;unsigned char countt0,second;void Delay5Ms(void);unsigned char code a=0xFE,0xFD,0xFB,0xF7; unsigned char code start_line= "password: "unsigned char code name = "Co

39、ded Management" unsigned char code Correct = " correct " unsigned char code Error = " error "unsigned char code codepass= " pass " unsigned char code LockOpen= " true "unsigned char code SetNew = "SetNewWordEnable"unsigned char code Input = &quo

40、t;input: " unsigned char code ResetOK = "ResetPasswordOK "unsigned char code initword= "Init password."unsigned char code Er_try= "error,try again!"unsigned char code again= "input again "unsigned char InputData6;unsigned char CurrentPassword6=1,3,1,4,2,0

41、; unsigned char TempPassword6;unsigned char N=0;unsigned char ErrorCont;unsigned char CorrectCont;unsigned char ReInputCont; unsigned char num,flag=0;unsigned char code initpassword6=1,2,3,4,5,6;void Delay5Ms(void)unsigned int TempCyc = 5552;while(TempCyc-);void Delay400Ms(void) unsigned char TempCy

42、cA = 5; unsigned int TempCycB; while(TempCycA-) TempCycB=7269; while(TempCycB-); /=void mDelay(uint t) uchar i; while(t-) for(i=0;i<125;i+) ; void Nop(void) _nop_(); _nop_(); _nop_(); _nop_();void Start(void) Sda=1; Scl=1; Nop(); Sda=0; Nop();void Stop(void) Sda=0; Scl=1; Nop(); Sda=1; Nop();void

43、 Ack(void)Sda=0;Nop();Scl=1;Nop();Scl=0;void NoAck(void) Sda=1; Nop(); Scl=1; Nop(); Scl=0;void Send(uchar Data) uchar BitCounter=8; uchar temp; do temp=Data; Scl=0; Nop(); if(temp&0x80)=0x80) Sda=1; else Sda=0; Scl=1; temp=Data<<1; Data=temp; BitCounter-; while(BitCounter); Scl=0;uchar Re

44、ad(void) uchar temp=0;uchar temp1=0;uchar BitCounter=8;Sda=1;doScl=0;Nop();Scl=1;Nop();if(Sda)temp=temp|0x01;elsetemp=temp&0xfe;if(BitCounter-1)temp1=temp<<1;temp=temp1;BitCounter-;while(BitCounter);return(temp);void WrToROM(uchar Data,uchar Address,uchar Num) uchar i; uchar *PData; PData=

45、Data; for(i=0;i<Num;i+) Start(); Send(0xa0); Ack(); Send(Address+i); Ack(); Send(*(PData+i); Ack(); Stop(); mDelay(20); void RdFromROM(uchar Data,uchar Address,uchar Num) uchar i; uchar *PData; PData=Data; for(i=0;i<Num;i+) Start(); Send(0xa0); Ack(); Send(Address+i); Ack(); Start(); Send(0xa1

46、); Ack(); *(PData+i)=Read(); Scl=0; NoAck(); Stop(); #define yi 0x80 #define er 0x80+0x40 void delay(uint xms)uint x,y;for(x=xms;x>0;x-) for(y=110;y>0;y-);write_1602com(uchar com)lcd1602_rs=0;P0=com;delay(1);lcd1602_en=1;delay(1);lcd1602_en=0;write_1602dat(uchar dat)lcd1602_rs=1;P0=dat;delay(1

47、);lcd1602_en=1; delay(1);lcd1602_en=0; void lcd_init(void)write_1602com(0x38);write_1602com(0x0c);write_1602com(0x06);write_1602com(0x01);/=unsigned char coding(unsigned char m) unsigned char k;switch(m)case (0x18): k=1;break;case (0x28): k=2;break;case (0x48): k=3;break;case (0x88): k='A'br

48、eak;case (0x14): k=4;break;case (0x24): k=5;break;case (0x44): k=6;break;case (0x84): k='B'break;case (0x12): k=7;break;case (0x22): k=8;break;case (0x42): k=9;break;case (0x82): k='C'break;case (0x11): k='*'break;case (0x21): k=0;break;case (0x41): k='#'break;case (0

49、x81): k='D'break;return(k);/=unsigned char keynum(void) unsigned char row,col,i; P1=0xf0; if(P1&0xf0)!=0xf0) Delay5Ms(); Delay5Ms(); if(P1&0xf0)!=0xf0) row=P10xf0; i=0;P1=ai; while(i<4) if(P1&0xf0)!=0xf0) col=(P1&0xff); break; else i+; P1=ai; else return 0;while(P1&0xf0)!=0xf0);return (row|col); else return 0; /=void OneAlam(void)AL

溫馨提示

  • 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

提交評論