密碼鎖控制電路設(shè)計與實現(xiàn)研制方案【畢業(yè)論文】_第1頁
已閱讀1頁,還剩35頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  本科畢業(yè)設(shè)計</b></p><p><b> ?。?0 屆)</b></p><p>  密碼鎖控制電路設(shè)計與實現(xiàn)研制方案</p><p>  所在學(xué)院 </p><p>  專業(yè)班級 電子信息工

2、程 </p><p>  學(xué)生姓名 學(xué)號 </p><p>  指導(dǎo)教師 職稱 </p><p>  完成日期 年 月 </p><p><b>  摘 要</b>&l

3、t;/p><p>  隨著電子科學(xué)技術(shù)水平的不斷提高,電子產(chǎn)品已經(jīng)逐步深入到人們生活中。安全防盜問題已經(jīng)漸漸引起人們的重視,由于傳統(tǒng)的機械鎖構(gòu)造簡單,盜竊事件時有發(fā)生。為滿足人們對鎖的使用要求,增加其安全性,電子密碼鎖作為傳統(tǒng)機械鎖的代替者應(yīng)運而生。電子密碼鎖具有安全性高、生產(chǎn)成本低、工作消耗低、操作簡易等優(yōu)點。</p><p>  因此,為了克服傳統(tǒng)機械式的缺點以便于更好的做好防盜措施,將應(yīng)

4、用單片機為核心的電子密碼鎖來取代傳統(tǒng)的機械密碼鎖?;趩纹瑱C的電子密碼鎖將采用單片機AT89C51作為核心芯片,同時將存儲芯片AT24C02應(yīng)用于電子密碼鎖的密碼保護電路來防止掉電而發(fā)生的密碼丟失。同時單片機將結(jié)合外圍的各個輔助電路來實現(xiàn)電子密碼鎖的輸入、顯示、報警和開鎖等功能。通過C語言編寫程序繼而導(dǎo)入芯片來實現(xiàn)對電子密碼鎖的控制和應(yīng)用。這樣一款可以完成開鎖、按鍵提示、報警等功能的電子密碼鎖便可以被設(shè)計出來。</p>&

5、lt;p>  由于該密碼鎖具有價格低廉、操作簡易、功能強大等優(yōu)點,相信它將會對安全防盜領(lǐng)域作出巨大的貢獻。</p><p>  關(guān)鍵詞:單片機;AT89C51;密碼鎖</p><p><b>  Abstract</b></p><p>  As electronic science and technology unceasing de

6、velopment, electronic products have already gradually come into the people's life. Anti-theft security question has gradually attracted people's attention. As The simple structure of traditional mechanical lock,

7、broken event always occur. In order to satisfy the requirement of people and increase the safety of lock, the password of electronic combination lock have emerged which instead of the traditional mechanical lock. Electro

8、nic combination loc</p><p>  Therefore, in order to overcome the shortcomings of the traditional mechanical to do a good job in a better anti-theft measures, microcontroller-based electronic lock will replac

9、e the traditional mechanical. Microcontroller-based electronic lock will adopt the single-chip microcomputer AT89C51 as the core chip while AT24C02 will be used in the electronic lock password protection circuitry to pre

10、vent the password loss. At the same time the single chip will combine the external auxiliary circuits </p><p>  As the electronic lock is low cost, simple, powerful, etc, it will make a significant contribut

11、ion to the field of security precautions.</p><p>  Key Words: Microcontroller; AT89C51; Combination lock</p><p><b>  目 錄</b></p><p><b>  摘 要1</b></p>

12、;<p>  Abstract2</p><p><b>  1 引言1</b></p><p><b>  2 總體設(shè)計2</b></p><p><b>  3 硬件設(shè)計3</b></p><p>  3.1 單片機系統(tǒng)模塊3</p>

13、<p>  3.2 按鍵電路模塊4</p><p>  3.2.1 鍵盤分類4</p><p>  3.2.2 鍵盤電路的設(shè)計5</p><p>  3.3 顯示電路模塊6</p><p>  3.4 開鎖電路模塊7</p><p>  3.5 報警電路模塊8</p><p&g

14、t;  3.6 密碼保護電路模塊9</p><p>  3.7 指示燈電路模塊10</p><p><b>  4 軟件設(shè)計11</b></p><p>  4.1 總體程序流程圖11</p><p>  4.2 鍵盤掃描程序流程圖12</p><p>  4.3 按鍵功能程序流程圖1

15、3</p><p>  4.4 密碼設(shè)置程序流程圖14</p><p>  4.5 密碼比較判斷程序流程圖15</p><p>  5 制作和調(diào)試17</p><p><b>  6 結(jié)論18</b></p><p>  致 謝錯誤!未定義書簽。</p><p>

16、;<b>  參考文獻19</b></p><p>  附錄1 實驗原理圖20</p><p>  附錄2 主要C語言源程序21</p><p><b>  1 引言</b></p><p>  隨著電子科學(xué)技術(shù)的日益發(fā)展,安全防盜問題已經(jīng)不斷引起人們的廣泛重視。然而由于安全性能低、易損壞

17、、易丟失、易復(fù)制等問題已經(jīng)使傳統(tǒng)密碼鎖不能滿足人們的安全需求,隨著單片機的出現(xiàn),基于單片機的電子密碼鎖不斷被開發(fā)出來,很好地解決了傳統(tǒng)機械鎖的安全性能低、易損壞、易丟失、易復(fù)制等問題,使安全防盜問題得到了長足的改善,除此之外電子密碼鎖還具備了生產(chǎn)成本低、功率消耗低、易于操作等優(yōu)點,因此,電子密碼鎖一出現(xiàn)就得到了人們熱切的擁護和喜愛[1]。雖然許多電子密碼鎖已相繼問世,但該類密碼鎖只能針對特定的媒介有效,而且不能進行遠距離操控,只能應(yīng)用在

18、安全要求高且比較私人的儲藏設(shè)備中。而且該類密碼鎖相應(yīng)的生產(chǎn)成本比較高,還容易出現(xiàn)遺失,在某種意義上不利于該類密碼鎖的發(fā)展。但是隨著人們生活水平的不斷提高,通過不斷的研究和完善,相信在不久的將來電子密碼鎖勢必將在安全防盜領(lǐng)域起著更大的作用 [2]。</p><p>  本文將通過把AT89C51單片機作為核心,以及結(jié)合周邊的顯示電路、密碼保護電路、報警電路、按鍵電路、開鎖電路等一系列輔助性的電路來實現(xiàn)電子密碼鎖的一

19、系列功能。例如通過將輸入密碼與原始密碼進行比較來判斷輸入密碼正確與否。如果密碼輸入正確,則密碼鎖自動打開。如果密碼錯誤,則允許操作者重新輸入密碼。如果密碼連續(xù)三次輸入錯誤,則密碼鎖啟動報警程序。本設(shè)計正是通過這樣一系列的電路,以及結(jié)合軟件程序來實現(xiàn)的。</p><p><b>  2 總體設(shè)計</b></p><p>  由于單片機I/O端的多樣性及其控制的準確性和單

20、片機設(shè)計編程的靈活性,因此從經(jīng)濟適用的角度出發(fā),本作品將應(yīng)用AT89C51單片機作為控制核心的單片機控制方案,通過AT89C51單片機的應(yīng)用不但能通過液晶顯示器實現(xiàn)良好的人機交互,并且能夠設(shè)置掉電保護系統(tǒng),保證了在意外斷電的情況下密碼仍然保留?;趩纹瑱C設(shè)計電子密碼鎖具備了較強的擴展功能。該密碼鎖不但能很好的完成密碼鎖的基本功能,而且還能夠?qū)崿F(xiàn)一定的擴展和升級[3]。本設(shè)計的系統(tǒng)框圖如圖2-1所示。</p><p&g

21、t;  圖2-1 系統(tǒng)總體框圖</p><p>  本設(shè)計實現(xiàn)的功能主要有:</p><p>  (1) 設(shè)置6位十進制碼密碼,密碼用0~9十個按鍵輸入,若密碼正確,則密碼鎖打開;</p><p>  (2) 密碼由用戶自己設(shè)定,用戶可自行修改密碼[4];</p><p>  (3) 報警、鎖定鍵盤功能。密碼輸入錯誤會發(fā)出警告音。若密碼輸入

22、錯誤次數(shù)超過3次,蜂鳴器報警并且鎖定鍵盤;</p><p>  (4) 通過發(fā)光二極管提示有效按鍵;</p><p>  (5) 90秒定時中斷,防止長時間無效操作;</p><p>  (6) 掉電保護功能。在電源斷開時儲存當前設(shè)定的密碼;</p><p><b>  (7) 復(fù)位功能;</b></p>

23、<p>  (8) 其他擴展功能。</p><p><b>  3 硬件設(shè)計</b></p><p>  本系統(tǒng)硬件主要有以下模塊組成:單片機系統(tǒng)模塊、按鍵電路模塊、開鎖電路模塊、顯示電路模塊、報警電路模塊、密碼保護電路模塊、復(fù)位電路模塊以及指示燈電路模塊等[5]。</p><p>  3.1 單片機系統(tǒng)模塊</p>&

24、lt;p>  本系統(tǒng)的單片機采用的是具備低電壓、高性能的AT89C51芯片,該芯片是一種包含128字節(jié)的隨機存取數(shù)據(jù)存儲器和4K字節(jié)閃存的可反復(fù)擦寫的只讀存儲器的單片機芯片。該芯片采用ATMEL公司的最先進技術(shù)生產(chǎn),并與標準MCS-51指令系統(tǒng)相兼容,而且芯片內(nèi)部合成了FLASH存儲單元和通用8位中央處理器。由于該芯片具有性能優(yōu)越、價格低廉等特點,在芯片控制領(lǐng)域占據(jù)著重要的一席之地。該芯片包括40個引腳,按功能可分為電源及時鐘引腳

25、,控制引腳和輸入/輸出引腳。其中電源及時鐘引腳包括電源引腳VCC、VSS、及時鐘引腳XTAL1、XTAL2;控制引腳則包括RST、ALE、/PSEN、/EA等,此類引腳提供控制信號、有些引腳具有復(fù)用功能;而輸入/輸出引腳則包括P0口、P1口和P3口[6]。其引腳圖如圖3-1所示。</p><p>  圖3-1 AT89C51引腳圖</p><p>  3.2 按鍵電路模塊</p&g

26、t;<p>  鍵盤是由一組規(guī)則排列的按鍵組成,一個按鍵實際上是一個開關(guān)元件,也就是說鍵盤是一組規(guī)則排列的開關(guān)。在單片機應(yīng)用中,操作者通過鍵盤向系統(tǒng)發(fā)送各種指令和數(shù)據(jù)從而實現(xiàn)人機交互對話。因此鍵盤模塊設(shè)計的好壞,直接關(guān)系到系統(tǒng)的可靠性和穩(wěn)定性[7]。</p><p>  3.2.1 鍵盤分類</p><p>  按鍵按照結(jié)構(gòu)原理可分為觸點開關(guān)按鍵和無觸點開關(guān)按鍵兩類。觸點開關(guān)

27、包括導(dǎo)電橡膠式開關(guān)、機械式開關(guān)等,而無觸點開關(guān)按鍵則包括電氣式按鍵,磁感應(yīng)按鍵等。觸點開關(guān)按鍵相比較無觸點開關(guān)按鍵具有成本低的優(yōu)點,但是無觸點開關(guān)按鍵的使用期則較長。</p><p>  按鍵按照接口原理可分為編碼鍵盤與非編碼鍵盤兩類,兩則的主要區(qū)別是:編碼鍵盤本身帶有實現(xiàn)接口主要功能所需的硬件電路,不僅能自動檢測被按下的鍵并完成去抖動防串鍵等功能,而且能提供與被按鍵功能對應(yīng)的鍵碼送往CPU,而非編碼鍵盤只簡單的

28、提供按鍵開關(guān)的行列矩陣,有關(guān)鍵的識別,鍵碼的輸入與確定,以及去抖動等功能都由軟件完成。</p><p>  由于相比較全編碼鍵盤而言,非編碼鍵盤只簡單地提供行和列的矩陣,其它工作均由軟件完成,因此不需要較多的硬件,而且成本低。鑒于非編碼鍵盤經(jīng)濟實用的特點,因此被較多地應(yīng)用于單片機系統(tǒng)中。下面將重點介紹非編碼鍵盤接口。</p><p>  非編碼鍵盤又包括了獨立式鍵盤和矩陣式鍵盤。</

29、p><p><b>  1、獨立式鍵盤</b></p><p>  獨立式鍵盤的每個按鍵占用一根測試線,可以直接與單片機I/O線相接,結(jié)構(gòu)簡單。這些測試線相互獨立無編碼關(guān)系,因而鍵盤軟件不存在譯碼問題。一旦檢測到某測試線上有鍵閉合,可直接轉(zhuǎn)入到相應(yīng)的鍵功能處理程序進行處理。獨立式鍵盤各按鍵相互獨立,每個按鍵各接一根I/O口線,每根I/O口線上的按鍵都不會影響其它的I/O口

30、線。</p><p><b>  2、矩陣式鍵盤</b></p><p>  獨立式鍵盤雖然硬件、軟件結(jié)構(gòu)簡單,但在按鍵數(shù)量較多的情況下,占有較多的I/O端口,而矩陣式鍵盤在按鍵數(shù)量較多的情況下,卻可以有效減少I/O端口數(shù)量。矩陣式鍵盤結(jié)構(gòu)的特點是把檢測線分成兩組,一組為行線,另一組為列線,按鍵放在行線和列線的交叉點上。因此M×N矩陣鍵盤與主機連接只需要M+

31、N條線,顯然,當需要的按鍵數(shù)目大于8時,一般都采用矩陣式鍵盤。</p><p>  通過對獨立式鍵盤和矩陣式鍵盤的比較我們可以發(fā)現(xiàn),獨立式鍵盤硬件結(jié)構(gòu)簡單,軟件編程較簡單,但每個按鍵獨自占用一個I/O端口,在按鍵數(shù)量較多的情況下,將占有較多的I/O端口,因此獨立式鍵盤一般用于按鍵數(shù)量不多的場合。而矩陣式鍵盤能有效地減少I/O端口的占用量,但因為各按鍵不是單獨的占有I/O端口,從而給按鍵的判斷帶來難度,造成編程難度

32、加大。</p><p>  3.2.2 鍵盤電路的設(shè)計</p><p>  本設(shè)計將采用非編碼矩陣式鍵盤。該鍵盤包括16個按鍵,其中包括功能鍵和數(shù)字鍵。功能鍵則包括了“確定”鍵、“設(shè)置”鍵以及“清除”鍵。其中“確定”鍵用于密碼輸入后的確認,“設(shè)置”鍵則用于密碼的修改,“清除”鍵則用于密碼輸入錯誤后的清除。其中數(shù)字鍵包括數(shù)字0-9,通過數(shù)字鍵可以進行密碼的輸入和修改。鍵盤設(shè)計采用矩陣式鍵盤,

33、按鍵置于行列的交叉點上,行列分別連接到按鍵開關(guān)的兩端,行線所接的單片機4個I/O口作為輸出端,而列線所接的I/O口則作為輸入端。當按鍵沒有被按下時所有的輸出端都是高電平,代表無鍵按下。一旦有鍵按下,則輸入線就會被拉低,這樣通過讀入輸入線的狀態(tài)就可知是否有鍵按下。本設(shè)計采用16個按鍵排成4×4矩陣[8]。其電路原理圖如圖3-2所示,各鍵具體的功能定義如表3-1所示。</p><p>  表3-1 按鍵功

34、能表</p><p>  圖3-2 按鍵電路原理圖</p><p>  3.3 顯示電路模塊</p><p>  本文中應(yīng)用帶背光的字符型液晶顯示器LCD1602作為顯示部分,它的顯示容量為16*2個字符。其各引腳功能如表3-2所示。其顯示部分引腳接口如圖3-3所示。</p><p>  表3-2 引腳功能表</p><

35、;p>  圖3-3 密碼鎖顯示電路</p><p>  帶背光的液晶顯示器LCD1602采用16腳接口。其中VSS引腳和VDD引腳分別為接地端和正極電源端。LCD1602的數(shù)據(jù)口DB0-DB7為8位雙向數(shù)據(jù)線,連接到單片機的P0口上,進行數(shù)據(jù)的連接和傳輸。而LCD1602的RW、RS和使能端E則分別連接到P3口上。其中RW為讀寫信號線,處于低電平時進行寫操作,處于高電平時進行讀操作。RS為寄存器選擇,低電

36、平時選擇指令寄存器,高電平時選擇數(shù)據(jù)寄存器。E端則為使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。VL為液晶屏對比度調(diào)整端,接正電源時對比度最弱,接地時最高,使用時可通過一個10千歐的電位器進行調(diào)整[9]。</p><p>  3.4 開鎖電路模塊</p><p>  通過單片機送給開鎖執(zhí)行機構(gòu).電路驅(qū)動電磁鎖吸合,從而達到開鎖的目的。其原理如圖3-4所示。</p>

37、<p>  圖3-4 開鎖電路設(shè)計框圖</p><p>  在規(guī)定時間內(nèi)通過輸入有效的密碼,使AT89C51單片機輸出開鎖信號,從而驅(qū)動開鎖電路,達到開鎖的目的。其電路圖如圖3-5所示。</p><p>  圖3-5 密碼鎖開鎖機構(gòu)電路圖</p><p>  開鎖電路模塊由三級管Q2、Q3,發(fā)光二級管D1,二極管D2,電阻R15以及電容C5組成。其中

38、三極管Q2,電阻R15和發(fā)光二極管D1組成了開鎖電路模塊的驅(qū)動電路。在驅(qū)動電路中,發(fā)光二極管D1起到的是提示作用。而三極管Q3,二極管D2以及電容C5則組成了該模塊的開鎖電路。在開鎖電路中,二級D2和電容C5的作用是為了消除電磁鎖產(chǎn)生的電磁干擾以及反向高電壓。而對于電磁鎖的要求則是其需要擁有足夠的吸合力,避免由于吸合力不足所導(dǎo)致的無法開鎖的后果[10]。</p><p>  3.5 報警電路模塊</p>

39、;<p>  報警電路模塊是通過蜂嗚器發(fā)聲進行報警的,蜂鳴器通過PNP型3極管電流放大后連接到單片機的P21引腳,從而實現(xiàn)單片機對蜂鳴器的控制。每當有按鍵按下時,蜂鳴器發(fā)出一聲短促的“叮”聲提示按鍵有效,密碼輸入正確蜂鳴器不發(fā)出聲音,當連續(xù)3次密碼輸入錯誤時,則蜂鳴器會長時間發(fā)出連續(xù)的報警音,從而實現(xiàn)報警的功能[9]。其電路如圖3-6所示。</p><p>  圖3-6 密碼鎖報警電路圖</

40、p><p>  3.6 密碼保護電路模塊</p><p>  密碼保護電路的作用是在斷電的時候依舊能夠保留原有的密碼信息。本設(shè)計采用AT24C02作為密碼鎖保護電路的核心芯片,并通過I2C總線進行傳輸。AT24C02是由ATMEL公司開發(fā)的一個2KB的串行E2PROM,其內(nèi)部含有256個8位字節(jié)。該器件經(jīng)過優(yōu)化后,已經(jīng)可以在許多工業(yè)和商業(yè)應(yīng)用中進行低功耗和低電壓工作。AT24C02采用的是8腳

41、的雙列直插式封裝并且在斷電情況下對已儲存資料的記憶功能可達到40年以上。其電路圖如圖3-7所示。</p><p>  圖3-7 掉電存儲電路圖</p><p>  圖中地址輸入引腳A0、A1、A2的功能是器件地址選擇,此處三個地址輸入引腳統(tǒng)一接地;第四引腳和第五引腳則分別接低電平和高電平;WP引腳具有寫保護功能,當WP引腳接高電平時,所有的內(nèi)容都被寫保護只能進行讀操作。當WP引腳接低電平

42、時,則可以進行正常的讀寫操作;SDA引腳用于器件所有數(shù)據(jù)的發(fā)送或接收,而SCL引腳用于產(chǎn)生器件所有數(shù)據(jù)發(fā)送或接收的時鐘,本設(shè)計則應(yīng)用SDA和SCL引腳與單片機進行數(shù)據(jù)的傳輸;而R9、R10則為上拉電阻,用于減少器件的工作消耗。通過密碼保護電路的作用,系統(tǒng)可以將每次重新設(shè)定的密碼都儲存到AT24C02芯片中,以不至于發(fā)生斷電而導(dǎo)致密碼丟失 [11]。</p><p>  3.7 指示燈電路模塊</p>

43、<p>  本設(shè)計應(yīng)用發(fā)光二極管作為電路的指示燈。發(fā)光二極管的正極與單片機P33口相接,負極通過100歐的電阻接地。當電路輸入按鍵時,每按下一個按鍵發(fā)光二極管都會隨之發(fā)光,從而確保了按鍵的有效性。其電路連接圖如圖3-8所示。</p><p>  圖3-8 指示燈電路圖</p><p><b>  4 軟件設(shè)計</b></p><p&g

44、t;  電子密碼鎖的軟件系統(tǒng)主要包括主程序模塊、鍵盤掃描模塊、按鍵功能模塊、密碼設(shè)置模塊、密碼比較判斷模塊、掉電存儲服務(wù)模塊、LCD顯示模塊、延時模塊等。</p><p>  4.1 總體程序流程圖</p><p>  整個系統(tǒng)的主程序流程圖,見圖4-1所示。</p><p>  圖4-1 主程序流程圖</p><p>  首先接通電源,程

45、序開始進行初始化設(shè)置,同時調(diào)用顯示子程序并打開待機定時器,然后調(diào)用鍵盤掃描子程序進行鍵盤掃描。當沒有按鍵閉合時則返回;當有按鍵閉合時則關(guān)閉待機定時器并調(diào)用蜂鳴器子程序。如果閉合的按鍵是數(shù)字鍵則調(diào)用密碼判斷子程序,如果是設(shè)置鍵則調(diào)用密碼設(shè)置子程序,其他按鍵則無效。</p><p>  4.2 鍵盤掃描程序流程圖</p><p>  鍵盤掃描程序流程圖,見圖4-2所示。</p>

46、<p>  圖4-2 鍵盤掃描程序流程圖</p><p>  首先判斷是否有按鍵閉合,當有按鍵閉合時,再對該按鍵進行延時去抖動,然后通過掃描鍵盤找到閉合的按鍵以及計算出其鍵值,當閉合按鍵釋放時,鍵盤掃描程序完成。</p><p>  4.3 按鍵功能程序流程圖</p><p>  按鍵功能程序流程圖,見圖4-3所示。</p><p&g

47、t;  圖4-3 按鍵功能程序流程圖</p><p>  輸入的按鍵按順序分別與輸入、清除、設(shè)置、確認相對應(yīng)的按鍵進行比較,若是密碼輸入鍵則執(zhí)行密碼輸入程序;若是清除鍵則執(zhí)行清除程序;若是設(shè)置鍵則執(zhí)行密碼設(shè)置程序;若是確認鍵則執(zhí)行確認程序。</p><p>  4.4 密碼設(shè)置程序流程圖</p><p>  密碼設(shè)置程序流程圖,見圖4-4所示。</p>

48、<p>  圖4-4 密碼設(shè)置程序流程圖</p><p>  進入密碼設(shè)置子程序后,首先進行初始化并等待按鍵輸入,待按鍵輸入后再判斷輸入的按鍵是否是數(shù)字鍵。如果輸入的是數(shù)字鍵則判斷其是否已經(jīng)到達六位數(shù),不到六位數(shù)則記錄所輸入的數(shù)字鍵,超過六位則不予以記錄;如果輸入的是確定鍵則需要判斷其是否已經(jīng)輸入六位數(shù)密碼,若是六位數(shù)密碼則需要再判斷其是原始密碼還是新密碼,確定是原始密碼的話返回到子程序初始化后狀

49、態(tài)繼續(xù)等待按鍵,而確定是新密碼的話則需要判斷連續(xù)兩次輸入的新密碼是否一致,兩次輸入的新密碼相同則密碼設(shè)置成功;如何輸入的是設(shè)置鍵則重新調(diào)用設(shè)置子程序;如果輸入的是取消鍵則取消輸入內(nèi)容并返回。</p><p>  4.5 密碼比較判斷程序流程圖</p><p>  密碼比較判斷程序流程圖,見圖4-5所示。</p><p>  圖4-5 密碼比較判斷程序流程圖<

50、/p><p>  進入密碼比較判斷子程序后,先判斷所輸入的密碼是否到六位數(shù)。如果沒到六位數(shù)則需要記錄該按鍵并繼續(xù)等待其他按鍵,若接下來輸入的還是數(shù)字鍵則返回子程序初始化后狀態(tài),若是其他按鍵則清除并返回;如果輸入的密碼到達六位數(shù)則繼續(xù)等待其他按鍵,若是確定鍵則判斷密碼是否正確,密碼正確則開鎖成功,連續(xù)三次輸入密碼錯誤則啟動報警程序,若是取消鍵則清除并返回,其他按鍵則無效。</p><p><

51、;b>  5 制作和調(diào)試</b></p><p>  系統(tǒng)的調(diào)試主要包括硬件調(diào)試和軟件調(diào)試。系統(tǒng)的硬件主要是對系統(tǒng)的硬件進行檢查,看該系統(tǒng)的電路、元器件、邏輯、電源和系統(tǒng)穩(wěn)定性等是否存在問題。例如本設(shè)計中的報警電路因為錯誤的連接了頻率蜂鳴器而導(dǎo)致報警電路不能正常運行,而把頻率蜂鳴器更換為電壓蜂鳴器后,報警電路才正常運行。同時系統(tǒng)的硬件調(diào)試是不能獨立開軟件調(diào)試而單獨進行的。有時候只有通過軟、硬件共

52、同調(diào)試才能發(fā)現(xiàn)一些硬件問題,但前提是系統(tǒng)中已經(jīng)不存在比較明顯的硬件問題,然后才進行軟、硬件共同調(diào)試。</p><p>  而系統(tǒng)的軟件調(diào)試則需要首先對系統(tǒng)的各個小模塊進行軟件調(diào)試,當確定各個小模塊不存在問題,再對整個系統(tǒng)進行軟件調(diào)試。首先將寫好的程序?qū)懭胄酒?,再對各個小模塊進行調(diào)試,檢測各個小模塊的功能是否能夠?qū)崿F(xiàn)以及是否滿足要求,當確定各個小模塊不存在問題后,再進行總調(diào)試來確保各個小模塊能夠很好的共同運行,當系

53、統(tǒng)各功能能夠很好的實現(xiàn)時,調(diào)試完畢。</p><p><b>  6 結(jié)論</b></p><p>  本文著重介紹了電子密碼鎖的設(shè)計和實現(xiàn)。對如何實現(xiàn)密碼鎖的密碼設(shè)定、密碼修改、密碼儲存、報警、顯示等一系列功能進行了詳細介紹。本設(shè)計中采用的核心芯片是單片機AT89C51,設(shè)計通過將輸入的密碼與儲存在存儲器中的密碼進行對比,判斷密碼是否正確,如果密碼正確則可以直接開鎖

54、;如果密碼錯誤,則允許操作者重新輸入密碼;如果連續(xù)三次輸入錯誤,則開啟報警模式。如果要修改密碼,則需要在正確輸入密碼之后才能進行修改密碼操作。通過這樣一系列硬件和軟件的設(shè)計從而實現(xiàn)電子密碼鎖的功能。</p><p>  但由于本人的水平有限,此次設(shè)計的電子密碼鎖還存在一定的問題和局限性。例如本次設(shè)計的密碼鎖沒能實現(xiàn)多用戶的登入,紅外線的遠程控制以及一些高度的智能化。但由于該密碼鎖是基于單片機而設(shè)計的,具有很強的擴

55、展功能,只要經(jīng)過不斷的探索和研究,該電子密碼鎖將實現(xiàn)高度的智能化。</p><p><b>  參考文獻</b></p><p>  [1] 陳丹萍.基于AT89S51單片機的電子密碼鎖設(shè)計[J].大眾科技,2010,(6).</p><p>  [2] 成俊偉,陳波,梁書旺.基于AT89C51的紅外遙控電子密碼鎖的設(shè)計[J].科技信息,200

56、8,(29).</p><p>  [3] 王慧軍.基于AT89s51單片機控制的電子密碼鎖設(shè)計[J].裝備制造技術(shù),2010,(5).</p><p>  [4] 周功明.基于AT89C2051單片機的防盜自動報警電子密碼鎖系統(tǒng)的設(shè)計[J]. 綿陽師范學(xué)院學(xué)報,2007,26(5).</p><p>  [5] 吳小帆,許志華,吳玉翠.通用型電子密碼鎖[J].商情

57、,2010,(13).</p><p>  [6] AT89C51 Description [EB/OL],[2011-3-16].</p><p>  http://wenku.baidu.com/view/2a44894769eae009581bec4d.html.</p><p>  [7] 姚德法.單片機應(yīng)用中的鍵盤模塊設(shè)計[J].信息技術(shù)與信息化,2005

58、,(6).</p><p>  [8] 張海燕,蘇新紅.基于AT89C2051單片機電子密碼鎖的設(shè)計[J].內(nèi)江科技,2010,31(3).</p><p>  [9] 朱璇,唐曉茜,殷建軍.基于單片機的智能加密電子密碼鎖設(shè)計[J].輕工機械,2009,27(4).</p><p>  [10] 周文龍.基于單片機控制的電子密碼鎖設(shè)計[J].大眾商務(wù),2009,(3

59、).</p><p>  [11] 韓團軍.基于單片機的電子密碼鎖設(shè)計[J].國外電子測量技術(shù),2010,29(7).</p><p>  附錄1 實驗原理圖</p><p>  附錄2 主要C語言源程序</p><p>  #include<REG51.H></p><p>  #include<

60、;ABSACC.h></p><p>  #include<stdio.h></p><p>  #include<intrins.h></p><p>  #define uchar unsigned char </p><p>  #define uint unsigned int

61、 //*Port Definitions</p><p>  sbit p3_6=P2^1;</p><p>  sbit LcdRs=P3^2;</p><p>  sbit LcdRw=P3^1;</p><p>  sbit LcdEn=P3^0;</p><p>  sfr DBPort=0x

62、80; /*P0=0x80,P1=0x90,P2=0xA0,P3=0xB0數(shù)據(jù)端口*/</p><p>  sbit P2_0=P2^0;</p><p>  uint key_val=16;</p><p>  uint m=0,count=0,count2=0;</p><p>  uint pass=0,pass0=

63、0,pass1=0,pass2=0,o=0,n=0;</p><p>  uint co[6]={0,0,0,0,0,0};</p><p>  uint cp[1]={0};</p><p>  uint cq[7]={0,0,0,0,0,0,0};</p><p>  uchar sk[16]={0,0,0,0,0,0,0,0,0,0,0

64、,0,0,0},pa=10;</p><p>  uchar password[16];</p><p>  void DelayMs(unsigned int n)</p><p>  {unsigned int i,j;</p><p>  for(i=0;i<n;i++)</p><p>  for(j=0

65、;j<120;j++);} /*按鍵掃描*/</p><p>  void Check_key(void)</p><p>  {unsigned int row,col,tmp1,tmp2;</p><p>  tmp1=0x10; /*tmp

66、1用來設(shè)置P1口的輸出,取反后使P1.1~P1.7中有一個為0 */ </p><p>  for(row=0;row<4;row++) /*行檢測*/ </p><p>  {P1=0x0f; /*先將p1.0~p1.3置高*/</p

67、><p>  P1=~tmp1 ; /*使p1.4~p1.7中有一個為0*/</p><p>  tmp1*=2 ; /*tmp1左移一位*/</p><p>  if((P1&0x0f)<0x0f) /*檢測p1.0~p1

68、.3中是否有一位為0,只要有說明此行有按鍵按下,進入列檢測*/</p><p>  {DelayMs(30);</p><p>  if((P1&0x0f)<0x0f) /*檢測p1.0~p1.3中是否有一位為0,只要有說明此行有按鍵按下,進入列檢測*/</p><p>  { tmp2=0x01;

69、 /*tmp2用來檢測哪一列為0*/</p><p>  for(col=0;col<4;col++) /*列檢測*/</p><p>  {if((P1&tmp2)==0x00) /*該列如果為低電平則可以判定為列*/</p><p>  {key_val=row*4+

70、col; /*獲取鍵值,識別按鍵*/</p><p>  while((P1&tmp2)==0x00);</p><p>  return; } /*退出循環(huán)*/</p><p>  tmp2*=2; } /*tmp2左移一位*/</

71、p><p>  while((P1&tmp2)==0x00);</p><p><b>  }}}}</b></p><p>  void rec_key(void) /*按鍵判斷*/</p><p>  {if(key_val!=16) /*當按鍵4

72、被按下時,標志位presskey4置位,從而去執(zhí)行判斷按鍵1,2程序*/</p><p><b>  {if(m>6)</b></p><p><b>  m=0;</b></p><p>  if(count2==1)</p><p>  {if(key_val==0)</p>

73、<p>  {//delay(1000);</p><p>  sk[0]=1; </p><p><b>  count++;</b></p><p><b>  pa=0;</b></p><p>  password[m]=0;</p

74、><p><b>  m++;</b></p><p>  DelayMs(10);</p><p><b>  p3_6=0;</b></p><p>  DelayMs(100);</p><p><b>  p3_6=1;</b></p>

75、<p>  key_val=16;}</p><p>  if(key_val==1)</p><p>  {//delay(1000);</p><p>  sk[1]=1; </p><p><b>  count++;</b></p><p&

76、gt;<b>  pa=1;</b></p><p>  password[m]=1;</p><p><b>  m++;</b></p><p>  DelayMs(10);p3_6=0;</p><p>  DelayMs(100);p3_6=1;</p><p>  

77、key_val=16;}</p><p>  if(key_val==2)</p><p>  {//delay(1000);</p><p>  sk[2]=1; </p><p><b>  count++;</b></p><p><b>

78、  pa=2;</b></p><p>  password[m]=2;</p><p><b>  m++;</b></p><p>  DelayMs(10);p3_6=0;</p><p>  DelayMs(100);p3_6=1;</p><p>  key_val=16;}

79、</p><p>  if(key_val==3)</p><p>  {//delay(1000);</p><p>  sk[3]=1; </p><p>  count++;pa=3;password[m]=3;</p><p><b>  m++;</b

80、></p><p>  DelayMs(10);p3_6=0;</p><p>  DelayMs(100);p3_6=1;</p><p>  key_val=16;</p><p><b>  }</b></p><p>  if(key_val==4)</p><p

81、>  {//delay(1000);</p><p>  sk[4]=1; </p><p><b>  count++;</b></p><p><b>  pa=4;</b></p><p>  password[m]=4;</p>

82、<p><b>  m++;</b></p><p>  DelayMs(10);p3_6=0;</p><p>  DelayMs(100);p3_6=1;</p><p>  key_val=16;}</p><p>  if(key_val==5)</p><p>  {//del

83、ay(1000);</p><p>  sk[5]=1; </p><p><b>  count++;</b></p><p><b>  pa=5;</b></p><p>  password[m]=5;</p><p><

84、;b>  m++;</b></p><p>  DelayMs(10);p3_6=0;</p><p>  DelayMs(100);p3_6=1;</p><p>  key_val=16;}</p><p>  if(key_val==6)</p><p>  {//delay(1000);<

85、;/p><p>  sk[1]=6; </p><p><b>  count++;</b></p><p><b>  pa=6;</b></p><p>  password[m]=6;</p><p><b>  m++;

86、</b></p><p>  DelayMs(10);p3_6=0;</p><p>  DelayMs(100);p3_6=1;</p><p>  key_val=16;}</p><p>  if(key_val==7)</p><p>  {//delay(1000);</p><

87、;p>  sk[7]=1; </p><p><b>  count++;</b></p><p><b>  pa=7;</b></p><p>  password[m]=7;</p><p><b>  m++;</b>&l

88、t;/p><p>  DelayMs(10);p3_6=0;</p><p>  DelayMs(100);p3_6=1;</p><p>  key_val=16;}</p><p>  if(key_val==8)</p><p>  {//delay(1000);</p><p>  sk[8

89、]=1; </p><p><b>  count++;</b></p><p><b>  pa=8;</b></p><p>  password[m]=8;</p><p><b>  m++;</b></p>&l

90、t;p>  DelayMs(10);p3_6=0;</p><p>  DelayMs(100);p3_6=1;</p><p>  key_val=16;}</p><p>  if(key_val==9)</p><p>  {//delay(1000);</p><p>  sk[9]=1; count++

91、;</p><p><b>  pa=9;</b></p><p>  password[m]=9;</p><p><b>  m++;</b></p><p>  DelayMs(10);p3_6=0;</p><p>  DelayMs(100);p3_6=1;<

92、/p><p>  key_val=16;}</p><p><b>  if(m>9)</b></p><p><b>  m=0;</b></p><p><b>  }}</b></p><p>  if(key_val==10)</p>

93、;<p>  {//delay(1000);</p><p>  sk[10]=1; count++;</p><p><b>  pa=10;</b></p><p>  password[m]=10;m++;</p><p>  DelayMs(10);p3_6=0;</p><p

94、>  DelayMs(100);p3_6=1;</p><p>  key_val=16;}</p><p>  if(key_val==11)</p><p>  {//delay(1000);</p><p>  sk[11]=1; count++;</p><p><b>  pa=11;<

95、/b></p><p>  password[m]=11;m++;</p><p>  DelayMs(10);p3_6=0;</p><p>  DelayMs(100);p3_6=1;</p><p>  key_val=16;}</p><p>  if(key_val==12)</p>&l

96、t;p>  {//delay(1000);</p><p>  sk[12]=1; </p><p><b>  count++;</b></p><p><b>  pa=12;</b></p><p>  password[m]=12;m++;</p><p>

97、  DelayMs(10);p3_6=0;</p><p>  DelayMs(100);p3_6=1;</p><p>  key_val=16;}</p><p>  if(key_val==13)</p><p>  {//delay(1000);</p><p>  sk[13]=1; count++;<

98、/p><p><b>  pa=13;</b></p><p>  password[m]=13;m++;</p><p>  DelayMs(10);p3_6=0;</p><p>  DelayMs(100);p3_6=1;</p><p>  key_val=16;</p><

99、;p><b>  }</b></p><p>  if(key_val==14)</p><p>  {//delay(1000);</p><p>  sk[14]=1; count++;</p><p><b>  pa=14;</b></p><p>  pass

100、word[m]=14;m++;</p><p>  DelayMs(10);p3_6=0;</p><p>  DelayMs(100);p3_6=1;</p><p>  key_val=16;}</p><p>  if(key_val==15)</p><p>  {//delay(1000);</p>

101、;<p>  sk[15]=1; count++;</p><p><b>  pa=15;</b></p><p>  password[m]=15;m++;</p><p>  DelayMs(10);p3_6=0;</p><p>  DelayMs(100);p3_6=1;</p>&

102、lt;p>  key_val=16;}</p><p><b>  if(m>10)</b></p><p>  m=0;} /*內(nèi)部等待函數(shù)*/</p><p>  unsigned char LCD_Wait(void)</p><p>  { LcdEn=0

103、;LcdRs=0;</p><p>  LcdRw=1;_nop_();</p><p>  LcdEn=1;_nop_();</p><p>  LcdEn=0;_nop_();</p><p>  while(DBPort&0x80)</p><p>  if(DBPort&0x80==0x80)&

104、lt;/p><p>  return DBPort;}</p><p>  /*向LCD寫入命令或者數(shù)據(jù)*/</p><p>  #define LCD_COMMAND 0 /*Command*/</p><p>  #define LCD_DATA 1 /*Data*/</p><p>  

105、#define LCD_CLEAR_SCREEN 0x01 /*清屏*/</p><p>  #define LCD_HOMING 0x02 /*光標返回原點*/</p><p>  void LCD_Write(bit style,unsigned char input)</p><p>  {LCD_Wait();</p&g

106、t;<p><b>  LcdEn=0;</b></p><p>  LcdRs=style;</p><p>  LcdRw=0; _nop_();</p><p>  DBPort=input; _nop_();</p><p>  LcdEn=1; _nop_();&l

107、t;/p><p>  LcdEn=0; _nop_();</p><p>  } /*設(shè)置顯示模式*/</p><p>  #define LCD_SHOW 0x04 //顯示開</p><p>  #define LCD_HIDE 0x00

108、//顯示關(guān)</p><p>  #define LCD_CURSOR 0x02 //顯示光標</p><p>  #define LCD_NO_CURSOR 0x00 //無光標</p><p>  #define LCD_FLASH 0x01 //光標閃動</p><p

109、>  #define LCD_NO_FLASH 0x00 //光標不閃動</p><p>  void LCD_SetDisplay(unsigned char DisplayMode)</p><p>  {LCD_Write(LCD_COMMAND,0x08|DisplayMode);}</p><p>  /*設(shè)置輸入模式*/<

110、/p><p>  #define LCD_AC_UP 0x02</p><p>  #define LCD_AC_DOWN 0x00 /*default*/</p><p>  #define LCD_MOVE 0x01 /*畫面可平移*/</p><p>  #define LCD

111、_NO_MOVE 0x00 /*default */ </p><p>  void LCD_SetInput(unsigned char InputMode)</p><p>  {LCD_Write(LCD_COMMAND,0x04|InputMode);}</p><p>  /*移動光標或屏幕*/</p><p&

112、gt;  /*#define LCD_CURSOR 0x02 </p><p>  #define LCD_SCREEN 0x08 </p><p>  #define LCD_LEFT 0x00 </p><p>  #define LCD_RIGHT 0x04 &l

113、t;/p><p>  void LCD_Move(unsigned char object,unsigned char direction)</p><p>  {if(object==LCD_CURSOR)</p><p>  LCD_Write(LCD_COMMAND,0x10|direction);</p><p>  if(object=

114、=LCD_SCREEN)</p><p>  LCD_Write(LCD_COMMAND,0x18|direction);</p><p><b>  }*/</b></p><p>  void LCD_Initial()</p><p><b>  {LcdEn=0;</b></p>

115、<p>  LCD_Write(LCD_COMMAND,0x38); //*8位數(shù)據(jù)端口2行顯示5*7點陣</p><p>  LCD_Write(LCD_COMMAND,0x38); </p><p>  LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR ); /*開啟顯示,無光標*/</p><p>  LCD

116、_Write(LCD_COMMAND,LCD_CLEAR_SCREEN ); /*清屏*/</p><p>  LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); /*AC遞增,畫面不動*/</p><p><b>  }</b></p><p>  void GotoXY(unsigned char x,

117、unsigned char y)</p><p><b>  {if(y==0)</b></p><p>  LCD_Write(LCD_COMMAND,0x80|x); </p><p><b>  if(y==1)</b></p><p>  LCD_Write(LCD_COMMAND,0x80

118、|(x-0x40)); </p><p><b>  }</b></p><p>  void Print(unsigned char*str)</p><p>  {while(*str!='\0')</p><p>  {LCD_Write(LCD_DATA,*str);</p><

119、;p><b>  str++;</b></p><p><b>  }</b></p><p>  void LCD_LoadChar(unsigned char user[8],unsigned char place)</p><p>  unsigned char i;</p><p> 

120、 LCD_Write(LCD_COMMAND,0x40|(place*8));</p><p>  for(i=0;i<8;i++)</p><p>  LCD_Write(LCD_DATA,user[i]);</p><p>  } //密碼設(shè)置</p><p>  void main(void)</p>

121、<p>  {int count1=0,count4=0,count6=0,count7=0,count8=0,</p><p><b>  P2_0=1;</b></p><p>  LCD_Initial();</p><p><b>  while(1)</b></p><p>  

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論