版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 《單片機技術(shù)》課程設(shè)計說明書</p><p><b> 密碼鎖</b></p><p> 院 、 部: </p><p> 學(xué)生姓名: </p><p> 指導(dǎo)教師: 職稱: </p><p&
2、gt; 專 業(yè): </p><p> 班 級: </p><p> 完成時間: </p><p><b> 摘 要</b></p><p> 隨著現(xiàn)代科技的發(fā)展,鎖變得更加的多樣化,實
3、用性和安全性最為重要的,于是電子密碼鎖毋庸置疑的成為了最受歡迎的鎖類。電子密碼鎖具有眾多的優(yōu)點,保密性強、不需要鑰匙、修改密碼方便等。</p><p> 該課程設(shè)計是一個基于51單片機的液晶顯示電子密碼鎖的設(shè)計。單片機技術(shù)是智能化檢測與控制領(lǐng)域應(yīng)用非常普及并且擁有很大潛力的技術(shù)。本設(shè)計硬件方面采用美國Atmel公司的AT89S52單片機作為系統(tǒng)處理核心, AT24C02作為數(shù)據(jù)存儲器,用于斷電保護,液晶顯示器則
4、是采用LCD12684,作為系統(tǒng)輸出設(shè)備,顯示系統(tǒng)提示信息,4*4矩陣鍵盤作為輸入設(shè)備,再加以蜂鳴器、電源等電路構(gòu)成整個系統(tǒng)硬件;軟件方面則采用C語言編寫。</p><p> 關(guān)鍵詞:密碼鎖;at89s52;at24c02;lcd12684</p><p><b> ABSTRACT</b></p><p> With the devel
5、opment of modern technology, diversification of the lock becomes more, practicality and safety is the most important, so the electronic password lock undoubtedly become the most popular lock. Electronic cipher lock has n
6、umerous advantages, strong confidentiality, do not need to modify the password key, convenient etc.</p><p> The curriculum design is a design of electronic password lock based on MCU 51 LCD display. SCM tec
7、hnology is the application of intelligent detection and control field is very popular and have great potential technique. The design of hardware with USA Atmel company AT89S52 microcontroller as the core processing syste
8、m, AT24C02 is used as the data memory, for power-off protection, liquid crystal display is the use of LCD12684, as the system output device, display system information, 4*4 matrix ke</p><p> Key words: pass
9、word-lock; at89s52; at24c02; lcd12684</p><p><b> 目 錄</b></p><p> 1 設(shè)計課題任務(wù)、功能要求說明及總體方案介紹1</p><p> 1.1 設(shè)計課題任務(wù)1</p><p> 1.2 功能要求說明1</p><p&
10、gt; 1.3 設(shè)計課題總體方案介紹及工作原理說明1</p><p> 2 設(shè)計課題的硬件系統(tǒng)設(shè)計3</p><p> 2.1 設(shè)計課題硬件系統(tǒng)各模塊功能簡要介紹3</p><p> 2.2 設(shè)計課題電路原理圖、PCB圖、元器件布局圖4</p><p> 2.3 設(shè)計課題元器件清單4</p><
11、;p> 3 設(shè)計課題軟件系統(tǒng)的設(shè)計5</p><p> 3.1 設(shè)計課題使用單片機資源的情況5</p><p> 3.2 設(shè)計課題軟件系統(tǒng)各模塊功能簡要介紹5</p><p> 3.3 設(shè)計課題軟件系統(tǒng)程序流程框圖6</p><p> 4 設(shè)計結(jié)論、仿真結(jié)果、誤差分析、教學(xué)建議等等8</p>
12、<p> 4.1 設(shè)計課題的設(shè)計結(jié)論及使用說明8</p><p> 4.2 設(shè)計課題的仿真結(jié)果9</p><p> 4.3 設(shè)計課題的誤差分析14</p><p> 4.4 設(shè)計體會14</p><p><b> 參考文獻:15</b></p><p><
13、b> 致 謝16</b></p><p><b> 附 錄17</b></p><p><b> 附錄 A17</b></p><p><b> 附錄 B18</b></p><p><b> 附錄 C19</b&
14、gt;</p><p><b> 附錄 D21</b></p><p><b> 附錄 E22</b></p><p> 1 設(shè)計課題任務(wù)、功能要求說明及總體方案介紹</p><p> 1.1 設(shè)計課題任務(wù)</p><p> 設(shè)計并制作一個液晶電子密碼鎖
15、,具有密碼修改,超級密碼,報警等功能。</p><p> 1.2 功能要求說明</p><p> ?。?)密碼鎖上電或按鍵復(fù)位后能自動顯示系統(tǒng)提示符“P.”;</p><p> ?。?)可以存儲原始密碼,超級密碼和修改后的密碼;</p><p> ?。?)顯示提示信息;</p><p> ?。?)密碼輸入時處于保密
16、顯示狀態(tài);</p><p> 1.3 設(shè)計課題總體方案介紹及工作原理說明</p><p> 1.3.1 設(shè)計課題總體方案介紹</p><p> 本課程設(shè)計采用AT89S52作為系統(tǒng)處理核心,4*4鍵盤輸入密碼,AT24C02用于存儲密碼,進行掉電保護,蜂鳴器用于報警功能,LCD12684用于顯示系統(tǒng)提示信息,5V電源供電。硬件系統(tǒng)框圖如圖1所示。</
17、p><p> 圖1 硬件系統(tǒng)結(jié)構(gòu)框圖</p><p> 1.3.2 工作原理說明</p><p> 用4*4鍵盤輸入密碼,單片機調(diào)用AT24C02中存儲的原始密碼對輸入密碼進行比較,通過顯示屏輸出相應(yīng)的系統(tǒng)提示信息,通過提示信息,可修改密碼,并存儲新密碼,用于下次開鎖??蛇M行手動復(fù)位,回到初始界面。</p><p> 2 設(shè)計課題的硬
18、件系統(tǒng)設(shè)計</p><p> 2.1 設(shè)計課題硬件系統(tǒng)各模塊功能簡要介紹</p><p> 本課程設(shè)計硬件系統(tǒng)采用AT89S52為核心,再加以LCD12684液晶顯示電路,蜂鳴器電路,AT24C02密碼存儲電路,4*4鍵盤輸入電路,手動復(fù)位電路,晶振電路,電源電路,下載口電路等模塊。</p><p> 2.1.1 單片機AT89S52模塊</p>
19、;<p> AT89S52是一款低功耗、高性能CMOS8位微控制器,具有8K可編程 Flash存儲器。使用 Atmel 公司高密度非易失性存儲器技術(shù)制造,與工業(yè) 80C51 產(chǎn)品指令和引腳完全兼容。價格低廉,不過在性能方面上完全可以勝任本設(shè)計課題中硬件系統(tǒng)中的處理核心。結(jié)合各個方面,所以決定采用AT89S52單片機作為核心處理模塊。</p><p> 2.1.2 LCD12684液晶顯示模塊&
20、lt;/p><p> LCD12684帶有中文字庫,是一種具有4位/8位并行、2線或3線串行多種接口方式,可以顯示出8*4行16*16點陣的漢字,綜合各方面,所以采用了LCD12684為本設(shè)計課題的液晶顯示模塊。AT89S52的P0口接LCD12684的八位數(shù)據(jù)線,用于顯示提示信息。P3.1 接寄存器選擇端RS,當(dāng)RS=1時,DB0—DB7為顯示數(shù)據(jù);當(dāng)RS=0時,DB0—DB7為顯示指令數(shù)據(jù)。 P3.6接讀寫控制
21、端R/W,當(dāng)R/W=1的時候,寫操作;當(dāng)R/W=0的時候,讀操作。P3.7接使能端E,寫入操作時,使能端下降沿有效。</p><p> 2.1.3 蜂鳴器模塊</p><p> 用P3.0口控制一個無源蜂鳴器,作為提示音,當(dāng)密碼錯誤時會發(fā)出聲音,進行提示。由于單片機輸出的電流過小,無法驅(qū)動蜂鳴器工作,所以使用了三極管進行放大電流,使蜂鳴器可以正常工作。本設(shè)計課題通過控制單片機的P3.
22、0口進而控制蜂鳴器的工作狀態(tài)。</p><p> 2.1.4 AT24C02密碼存儲模塊</p><p> AT24C02是美國Atmel公司生產(chǎn)的低功耗CMOS型E2PROM,內(nèi)部含含256*8位存儲空間,具有抗干擾能力強,不易丟失數(shù)據(jù),體積小,成本低等優(yōu)點。AT24C02有一個16字節(jié)頁寫緩沖器,該器件通過I2C總線接口進行操作,還有一個專門的寫保護功能。本設(shè)計課題主要用到AT2
23、4C02的寫保護功能。其中其串行時鐘SCL端接P2.4;串行數(shù)據(jù)/地址SDA端接P2.3口,完成數(shù)據(jù)和指令的傳送,相比較并行傳輸,更加節(jié)省I/O口資源。</p><p> 2.1.5 4*4鍵盤輸入電路</p><p> 本設(shè)計課題采用4*4行列式鍵盤,共有鍵位16個,4根行線連接P1口低四位,另外4根列線連接P1口高四位,在一開始的時候,給4根行線賦高電平,當(dāng)有按鍵按下時,則某行和
24、某列相通,高電平變低,可知該行有按鍵被按下,然后進行列掃描,同理可識別出按鍵所在列。最后則可知按下的鍵位。、</p><p> 2.1.6 手動復(fù)位模塊</p><p> 為確保系統(tǒng)中電路穩(wěn)定可靠工作,復(fù)位電路是必不可少的一部分。本設(shè)計課題采用AVR復(fù)位電路,當(dāng)按下復(fù)位按鈕的時候, VCC的高電平就會直接加到RET端。由于人的動作再快也會使按鈕保持接通一段時間,所以完全能夠滿足復(fù)位的
25、時間要求。</p><p> 2.1.7 晶振模塊</p><p> 單片機本身就是一個復(fù)雜的同步時序電路,為了保證能夠?qū)崿F(xiàn)同步工作方式,必須提供時鐘信號,以使其系統(tǒng)在時鐘信號的控制下按時序協(xié)調(diào)工作。晶振電路是不可缺少的一部分,AT89S52芯片中的高增益反向放大器輸入端為引腳XTAL1,輸出端引腳為XTAL2。通過這兩個引腳在芯片外并接石英晶體振蕩器和兩只負(fù)載電容。保證單片機能夠進
26、行正常工作。</p><p> 2.1.8 電源模塊</p><p> 本設(shè)計直接采用5V電源進行外部供電,這可使整個系統(tǒng)處于正常工作狀態(tài)。</p><p> 2.1.9 下載口模塊</p><p> 通過下載口模塊,可以將用KEIL軟件產(chǎn)生的Hex文件下載入單片機AT89S52中,使其進行正常工作。</p><
27、;p> 2.2 設(shè)計課題電路原理圖、PCB圖、元器件布局圖</p><p> 詳見附錄A、B、C、</p><p> 2.3 設(shè)計課題元器件清單</p><p><b> 詳見附錄D</b></p><p> 3 設(shè)計課題軟件系統(tǒng)的設(shè)計</p><p> 3.1 設(shè)計課題
28、使用單片機資源的情況</p><p> P0口接LCD12684的八位數(shù)據(jù)線,用于顯示提示信息;P3.1 接寄存器選擇端RS;P3.6接讀寫控制端R/W;P3.7接使能端E;P3.0口控制一個無源蜂鳴器,用于提示;P1口接4*4矩陣鍵盤,用于輸入數(shù)據(jù);P2.3、P2.4分別接AT24C02的SDA、SCL端;RET接手動復(fù)位模塊RET端;XTAL1、XTAL2分別接晶振模塊的XTAL1和XTAL2端。</
29、p><p> 3.2 設(shè)計課題軟件系統(tǒng)各模塊功能簡要介紹</p><p> 主函數(shù):主體的布局,并調(diào)用相應(yīng)的子函數(shù),使其構(gòu)成一個完整的系統(tǒng);</p><p> 延遲子函數(shù):用于去抖,顯示間隔,使系統(tǒng)更加的有條理;</p><p> 顯示子函數(shù):用于顯示系統(tǒng)提示的信息;</p><p> 密碼鎖子函數(shù):用于密碼的
30、邏輯關(guān)系,使整個程序擁有密碼鎖的功能,可以存儲密碼和調(diào)用密碼,主要控制AT24C02的工作;</p><p> 按鍵掃描子函數(shù):用于輸入鍵值,實現(xiàn)與用戶的交互;</p><p> 蜂鳴器子函數(shù):實現(xiàn)蜂鳴器的報警功能。</p><p> 3.3 設(shè)計課題軟件系統(tǒng)程序流程框圖</p><p><b> 圖2 主程序流程圖<
31、;/b></p><p> 圖3 密碼處理函數(shù)流程圖</p><p> 圖4 按鍵掃描流程圖</p><p> 4 設(shè)計結(jié)論、仿真結(jié)果、誤差分析、教學(xué)建議等等</p><p> 4.1 設(shè)計課題的設(shè)計結(jié)論及使用說明</p><p> 本設(shè)計課題使用AT89S52單片機作為主控芯片, LCD12684
32、作為其液晶顯示器, 用AT24C02串行傳輸存儲器來存儲密碼,4*4矩陣鍵盤,蜂鳴器,以及其他外圍電路,用C語言編寫其控制程序,最終成功設(shè)計出一款密碼鎖,可以進行隨時改密,并存儲新的密碼可以用于下次開啟,當(dāng)忘記密碼時配有專有的超級密碼,可以解決忘記密碼所帶來的麻煩,同時擁有豐富聲光提示信息。此密碼鎖具有很高的使用價值,可在日常生活中發(fā)揮巨大的作用。利用單片機控制,矩陣鍵盤輸入密碼,液晶顯示器顯示中文提示字符,蜂鳴器發(fā)聲,密碼鎖運行的效果
33、非常的良好,設(shè)計課題取得了圓滿的成功。</p><p> 密碼鎖的初始密碼為88888888,超級密碼為99999999,可以修改密碼;當(dāng)輸錯三次密碼時,密碼鎖將會報警,并鎖死,按下返回鍵和復(fù)位鍵可以回到初始界面。加入了AT24C02模塊,擁有掉電保護功能,就算停電,也不用擔(dān)心密碼的遺失。</p><p> 4.2 設(shè)計課題的仿真結(jié)果</p><p><
34、b> 圖5 初始頁面</b></p><p><b> 圖6 菜單頁面</b></p><p><b> 圖7 進入界面</b></p><p><b> 圖8 密碼輸入界面</b></p><p> 圖9 密碼輸入正確提示</p>&
35、lt;p> 圖10 密碼輸入錯誤界面</p><p> 圖11 超級密碼功能界面</p><p> 圖12 超級密碼輸入界面</p><p> 圖13 重新輸入密碼選擇界面</p><p> 圖14 安全退出選擇界面</p><p> 4.3 設(shè)計課題的誤差分析</p><p&g
36、t; LCD12684顯示有亂碼,跟延遲沒有設(shè)置合理有一定的關(guān)系,通過多次試驗,無改變,不過不影響正常的使用,此誤差可以忽略。</p><p> 4.4 設(shè)計體會 </p><p> 本設(shè)計課題最終成功運行,不過存在一些小誤差,LCD12684顯示有瑕疵,至今無力解決,頗感無奈。通過設(shè)計,對多方面的知識都有很大的增加,對以后設(shè)計有很大的作用,積累了大量的經(jīng)驗,收獲頗豐。對于幾個芯片
37、的理解和運用更加的自如。再設(shè)計中感到很大的壓力。同時對單片機的功能更加期待,其強大的功能還有待后續(xù)發(fā)掘,其潛力無窮。</p><p><b> 參考文獻</b></p><p> [1] 劉迎春.《MCS-51單片機原理及應(yīng)用教程》[M] .北京:清華大學(xué)出版社,2005</p><p> Liu Yingchun. MCS-51 tut
38、orial Microcomputer Principle and application [M]. Beijing: Tsinghua University press, 2005</p><p> [2] 沙占友.《單片機外圍電路設(shè)計》[M] . 北京:電子工業(yè)出版社,2003</p><p> Sha Zhanyou. Peripheral circuit design [M].
39、 Beijing: Publishing House of electronics industry, 2003</p><p> [3] 李念強.《單片機原理機及應(yīng)用》[M] .北京:機械工業(yè)出版社,2013</p><p> Li Nianqiang. Principle of single chip machine and application of [M]. Beijing:
40、 Mechanical Industry Press, 2013</p><p><b> 致 謝</b></p><p> 本次設(shè)計課題圓滿結(jié)束,在此要先感謝我的指導(dǎo)老師王韌老師,他嚴(yán)謹(jǐn)求實的作風(fēng)給我很大的鼓舞。設(shè)計過程中,從前期的功能設(shè)計,電路設(shè)計,軟件上每一條語句的調(diào)試,期間遇到許許多多的難點,眾多意想不到的問題。克服這些困難,最終獲得成果,知識融入到設(shè)計
41、的每個角落里。當(dāng)最終完成整個設(shè)計,自是欣喜不已。最后還要感謝幫助過我的眾多同學(xué)。</p><p><b> 附 錄</b></p><p><b> 附錄 A </b></p><p> 圖15 密碼鎖原理圖(Altium Designer繪制)</p><p><b> 附
42、錄 B</b></p><p> 圖16 密碼鎖原理圖(AUTO CAD繪制)</p><p><b> 附錄 C</b></p><p> 圖17 PCB底層圖</p><p> 圖18 PCB頂層圖</p><p> 圖19 元器件布局圖</p><
43、;p><b> 附錄 D</b></p><p><b> 表1 元器件清單</b></p><p><b> 附錄 E</b></p><p><b> 程序代碼:</b></p><p> /********************
44、*******************************</p><p> ************標(biāo)題:液晶顯示電子密碼鎖 ***************</p><p> ************日期:2013-12-24************************</p><p> ************作者:徐恩彬*************
45、***************</p><p> *功能:可以實現(xiàn)密碼的修改,密碼的存儲,掉電后密碼不丟失,擁有超級密碼, </p><p> 根據(jù)液晶的提示便可進行操作。 </p><p> 初始密碼為88888888;</p><p> 超級密碼為99999999;</p><p> 修改密碼要輸入初始密
46、碼或超級密碼才能修改密碼</p><p> ***************************************************/</p><p> /**主函數(shù)**********/</p><p> #include <reg52.h></p><p> #include <intrins.h&
47、gt;</p><p> #include "LCD12864.h"//液晶顯示模塊頭文件</p><p> #include "delay.h"//延時模塊頭文件</p><p> #include "keyscan.h"//鍵掃描模塊頭文件</p><p> #i
48、nclude "mimasuo.h"//頻率測試模塊頭文件</p><p> #include"beep.h"//報警模塊頭文件</p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p>
49、 void main()</p><p><b> {</b></p><p> uchar v,flag_2;</p><p><b> lcdset();</b></p><p> delay(1000); //液晶顯示初始化</p><p&g
50、t; display(1,2,"湖南工學(xué)院 P.");</p><p> display(2,2,"密碼鎖 D鍵進入");</p><p> display(3,2,"通信1103徐恩彬"); </p><p> display(4,1,"學(xué)號11401340334"
51、); //開機界面</p><p> beepoff();</p><p> do{v=keyscan();</p><p> }while(v!=0x28); </p><p> writecommand(0x01); //清屏,DDRAM的地址歸零</p><p> wh
52、ile(v==0x28||v==0x88)</p><p><b> {</b></p><p> display(1,2,"密碼鎖菜單 D");</p><p> display(2,1,"輸入密碼");</p><p> display(3,1,"重新設(shè)置
53、密碼");</p><p> display(4,1,"超級密碼"); </p><p> do{v=keyscan();</p><p> }while(v!=0x28);</p><p> writecommand(0x01); //清屏,DDRAM的地址歸零
54、</p><p> if(v==0x28)</p><p><b> {</b></p><p> display(2,1,"進入系統(tǒng)嗎?");</p><p> display(4,1,"確認(rèn)E 退出D/F ");</p><
55、p> do{v=keyscan();}</p><p> while((v!=0x48)&&(v!=0x28)&&(v!=0x88));</p><p> writecommand(0x01); //清屏,DDRAM的地址歸零</p><p> if(v==0x48) //確認(rèn)鍵鍵值</p>
56、<p><b> { </b></p><p> display(1,2,"請輸入密碼");</p><p> display(4,1,"確認(rèn)E 退出F ");</p><p> jingrumima(); </p><p> do{v=keysc
57、an();}while((v!=0x28)&&(v!=0x88));</p><p><b> }</b></p><p><b> }</b></p><p> writecommand(0x01); //清屏,DDRAM的地址歸零</p><p> if(v
58、==0x28)</p><p><b> {</b></p><p> display(2,1,"重新設(shè)置密碼嗎");</p><p> display(4,1,"確認(rèn)E 退出D/F ");</p><p> do{v=keyscan();</
59、p><p> }while((v!=0x48)&&(v!=0x28)&&(v!=0x88)); </p><p> writecommand(0x01); //清屏,DDRAM的地址歸零</p><p> if(v==0x48)</p><p><b> {</b>&l
60、t;/p><p> display(1,2,"請輸入當(dāng)前密碼");</p><p> display(4,1,"確認(rèn)E 退出/F ");</p><p> flag_2=jingrumima(); // 當(dāng)前密碼函數(shù)</p><p> if(flag_2==1)</p>&l
61、t;p><b> {</b></p><p> writecommand(0x01); //清屏,DDRAM的地址歸零 </p><p> display(1,2,"設(shè)置新密碼");</p><p> display(4,1,"確認(rèn)E 退出/F ");</p>
62、;<p> stepupmima(); //設(shè)置新密碼函數(shù)</p><p><b> flag_2=0;</b></p><p><b> } </b></p><p> do{v=keyscan();}while((v!=0x28)&&(v!=0x88)
63、);</p><p><b> }</b></p><p><b> }</b></p><p> writecommand(0x01); //清屏,DDRAM的地址歸零</p><p> if(v==0x28)</p><p><b&
64、gt; {</b></p><p> display(2,1,"輸入超級密碼嗎");</p><p> display(4,1,"確認(rèn)E 退出D/F ");</p><p> do{v=keyscan();}while((v!=0x48)&&(v!=0x28)&
65、;&(v!=0x88)); </p><p> writecommand(0x01); //清屏,DDRAM的地址歸零</p><p> if(v==0x48)</p><p><b> {</b></p><p> display(1,1,"請輸入超級密碼");&l
66、t;/p><p> display(4,1,"確認(rèn)E 退出/F ");</p><p> chaojimima(); //超級密碼函數(shù)</p><p> do{v=keyscan();}while((v!=0x28)&&(v!=0x88));</p><p><b> }<
67、;/b></p><p><b> } </b></p><p> writecommand(0x01); //清屏,DDRAM的地址歸零</p><p><b> }</b></p><p><b> }</b></p&g
68、t;<p> /*********beep****/</p><p> #include"beep.h"</p><p> void beepon()</p><p><b> {</b></p><p><b> beep=0;</b></p>
69、;<p><b> }</b></p><p> void beepoff()</p><p><b> {</b></p><p><b> beep=1;</b></p><p><b> }</b></p>&l
70、t;p> /*********delay****/</p><p> #include"delay.h"</p><p> #define uint unsigned int</p><p> void delay(uint x)</p><p><b> {</b></p>
71、;<p> while(--x);</p><p><b> }</b></p><p> /********* LCD12864顯示程序****/</p><p> #include "LCD12864.h"</p><p> #include"delay.h&qu
72、ot;</p><p> #include <reg52.h> </p><p> #define uchar unsigned char</p><p> sbit rs = P3^1;</p><p> sbit rw = P3^6;</p><p> sbit en = P3^7;<
73、/p><p> /******液晶寫命令函數(shù)***************/</p><p> void writecommand(uchar command)</p><p><b> {</b></p><p> delay(100);</p><p><b> rs=0;&l
74、t;/b></p><p><b> rw=0;</b></p><p><b> en=1;</b></p><p> P0=command; //液晶數(shù)據(jù)線P0</p><p><b> en=0;</b></p><p><b
75、> }</b></p><p> /*********液晶寫數(shù)據(jù)函數(shù)***************/</p><p> void writedata(uchar date)</p><p><b> {</b></p><p> delay(100);</p><p>
76、<b> rs=1;</b></p><p><b> rw=0; </b></p><p><b> en=1;</b></p><p><b> P0=date; </b></p><p><b> en=0;</b>&
77、lt;/p><p><b> }</b></p><p> /**********液晶設(shè)置函數(shù)**************/</p><p> void lcdset(void)</p><p><b> {</b></p><p> writecommand(0x30
78、); //基本指令集</p><p> writecommand(0x01); //清屏,DDRAM的地址歸零</p><p> writecommand(0x02); //地址歸位</p><p> writecommand(0x0c); //顯示開,光標(biāo)關(guān),反白關(guān) </p><p> writecommand(0x06); //D
79、DRAM地址加1</p><p><b> }</b></p><p> /***********液晶顯示函數(shù)****************/</p><p> void display(uchar y, uchar x, uchar *p) </p><p><b> { </b><
80、;/p><p> switch (y)</p><p><b> { </b></p><p> case 1:writecommand(0x7f+x); break; //液晶第一行</p><p> case 2:writecommand(0x8f+x); break; //0x90+(x-1)</p>
81、;<p> case 3:writecommand(0x87+x); break;</p><p> case 4:writecommand(0x97+x); break;</p><p> default:break;</p><p><b> }</b></p><p> while(*p)
82、 </p><p> writedata(*p++); </p><p><b> }</b></p><p> /**********按鍵掃描程序*********/</p><p> #include "keyscan.h"</p><p> #include
83、"delay.h"</p><p> #include <reg52.h> </p><p> #define uchar unsigned char</p><p> uchar keyscan(void)</p><p><b> {</b></p><p
84、> uchar scan,tmp; //列號,行號</p><p> P1=0xf0; //發(fā)全行0掃描碼</p><p> if((P1&0xf0)!=0xf0) //若有鍵按下</p><p> {delay(1000); // 延時去抖</p><p>
85、 if((P1&0xf0)!=0xf0) //延時再判鍵是否還按下</p><p> {scan=0xfe;</p><p> while((scan&0x10)!=0) //逐行掃描</p><p><b> {</b></p><p> P1=scan;
86、 //輸出行掃描碼</p><p> if((P1&0xf0)!=0xf0) //本行有鍵按下</p><p> {tmp=(P1&0xf0)|0x0f;</p><p> delay(50000); //按鍵判釋放</p><p> return ((~scan
87、)|(~tmp));} //還回鍵值</p><p> else scan=(scan<<1)|0x01; //行掃描碼左移一位</p><p><b> }</b></p><p><b> }</b></p><p> }
88、</p><p> return (0); //無鍵按下,還回0</p><p><b> } </b></p><p> /********密碼鎖函數(shù)程序********/</p><p> #include "keyscan
89、.h"</p><p> #include"delay.h"</p><p> #include "mimasuo.h"</p><p> #include "LCD12864.h"</p><p> #include"beep.h" </
90、p><p> #include <reg52.h></p><p> #include <intrins.h></p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> #define
91、OP_READ0xa1// 器件地址以及讀取操作</p><p> #defineOP_WRITE 0xa0// 器件地址以及寫入操作 </p><p> #defineMAX_ADDR 0xff// AT24C02最大地址(256字節(jié))</p><p> sbit SDA = P2^3; //串行數(shù)據(jù)/地址&l
92、t;/p><p> sbit SCL = P2^4; //串行時鐘</p><p> uchar m,n;</p><p> uchar i,ii,k;</p><p> uchar code dis_code[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; //0
93、-9,寫入到AT24C01的數(shù)據(jù)串 </p><p> uchar code surper_code[]={0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39};// 超級密碼9個9</p><p> uchar password[]={0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38}; //原始密碼8個8</p&g
94、t;<p> uchar Userpassword[8]; //按鍵輸入密碼存放數(shù)組</p><p> uchar find_code[16]=" "; //安全顯示“*********”緩沖數(shù)組 </p><p> uchar table[8];// 讀取密碼存放
95、緩沖數(shù)組</p><p> uchar table_1[8];//新密碼存放緩沖數(shù)組</p><p> uchar j; //計算密碼輸入次數(shù)變量</p><p> uchar flag_2; //密碼輸入正確標(biāo)志位,當(dāng)前密碼輸入正確后,方可重置密碼</p><p> uchar flag_3;
96、 //原始密碼與設(shè)置密碼判斷標(biāo)志位</p><p> uchar flag_4;// 連續(xù)三次輸入判斷標(biāo)志位</p><p> uchar jingrumima()</p><p><b> {</b></p><p> flag_4=read_random(254);//讀取三次輸入判斷標(biāo)志位
97、 </p><p> if(flag_4!=1)</p><p><b> { </b></p><p> while(m!=15)</p><p><b> { </b></p><p> m=key_return();</p><p
98、><b> switch(m)</b></p><p><b> {</b></p><p> case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: case 0x38: case 0x39:</p>
99、<p><b> if(ii<8)</b></p><p><b> {</b></p><p> Userpassword[ii]=m; //輸入原始密碼</p><p> find_code[ii]='*'; //對顯示數(shù)組賦值“*”</p>&
100、lt;p> Display_String(find_code,0x89);</p><p><b> ii++;</b></p><p><b> }</b></p><p><b> break;</b></p><p> case 14: flag_3=r
101、ead_random(255);//讀取設(shè)置密碼判斷標(biāo)志位</p><p> if(flag_3==1)</p><p><b> {</b></p><p> for(k=0;k<8;k++)</p><p> {table[k]= read_random(k);</p>
102、<p> }//單片機從24C02上讀回數(shù)據(jù),送給比較數(shù)組</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> for(k=0;k<8;k++)</p
103、><p><b> { </b></p><p> table[k]=password[k];</p><p><b> }</b></p><p><b> } </b></p><p><b> if(</b>&
104、lt;/p><p> table[0]==Userpassword[0]&&table[1]==Userpassword[1]&&</p><p> table[2]==Userpassword[2]&&table[3]==Userpassword[3]&&</p><p> table[4]==Us
105、erpassword[4]&&table[5]==Userpassword[5]&&</p><p> table[6]==Userpassword[6]&&table[7]==Userpassword[7])</p><p> //判輸入密碼與原始密碼是否相等 {</p><p><
106、b> {</b></p><p> writecommand(0x01); //清屏,DDRAM的地址歸零</p><p> display(1,2,"恭喜你!密碼輸入正確");</p><p> display(4,6,"退出/F");</p><p><b&
107、gt; j=0;</b></p><p> flag_2=1; //密碼輸入正確標(biāo)志位</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p&g
108、t; writecommand(0x01); //清屏,DDRAM的地址歸零</p><p> display(1,1,"密碼輸入錯誤!");</p><p> display(2,2,"請重新輸入密碼");</p><p> display(4,1,"確認(rèn)E 退出/F ");<
109、/p><p> do{ m=key_return();}while((m!=14)&&(m!=15));</p><p><b> j++; </b></p><p> k=9; //跳出For循環(huán)條件</p><p><b> ii=0;</b></p>
110、;<p> flag_2=0; </p><p> clear_password(); //清除密碼函數(shù)</p><p> writecommand(0x01); //清屏,DDRAM的地址歸零</p><p> display(1,2,"請重新輸入密碼");</p>&l
111、t;p> display(4,1,"確認(rèn)E 退出/F ");</p><p><b> }</b></p><p> if(j==3)//報警條件及函數(shù)</p><p><b> {</b></p><p> writecommand(0x01
112、); //清屏,DDRAM的地址歸零</p><p> display(1,2,"您連續(xù)三次輸入");</p><p> display(2,1,"錯誤!界面鎖死");</p><p> display(3,1,"重新輸入!");</p><p> display(4,
113、6,"退出/F");</p><p><b> j=0;</b></p><p><b> SDA = 1;</b></p><p><b> SCL = 1;</b></p><p> delay(5000);</p><p&g
114、t; write_byte(254, 1);//三次機會已經(jīng)到,判斷標(biāo)志位</p><p> beepon(); //報警</p><p> do{m=key_return();}while(m!=15);//等待您按下返回鍵</p><p> beepoff(); /關(guān)閉報警</p><p>
115、;<b> }</b></p><p><b> break;</b></p><p> } </p><p><b> }</b></p><p><b> }</b></p><p
116、><b> ii=0;</b></p><p><b> m=0; </b></p><p> clear_password();</p><p> writecommand(0x01); </p><p> display(1,2,"安全退出密碼輸入界面");
117、</p><p> display(4,5,"返回D/F");</p><p> return(flag_2);</p><p><b> } </b></p><p> void stepupmima()</p><p><b> { <
118、/b></p><p> while(m!=15)</p><p><b> { </b></p><p> m=key_return();</p><p><b> switch(m)</b></p><p><b> {</b>&l
119、t;/p><p> case 0x30: case 0x31:case 0x32:case 0x33:case 0x34:case 0x35:case 0x36:case 0x37:case 0x38:case 0x39:</p><p><b> if(ii<8)</b></p><p><b> {</b>&l
120、t;/p><p> Userpassword[ii]=m; //輸入新密碼</p><p> find_code[ii]='*'; //對顯示數(shù)組賦值“*”</p><p> Display_String(find_code,0x89);</p><p><b> ii++;</b>
121、</p><p><b> }</b></p><p><b> break;</b></p><p> case 14: for(k=0;k<8;k++)</p><p> { table_1[k]=Userpassword[k];} //準(zhǔn)備數(shù)據(jù)</p><
122、p><b> SDA = 1;</b></p><p><b> SCL = 1;</b></p><p> delay(5000);</p><p> for(i = 0 ; i < 8; i++)</p><p> {write_byte(i, table_1[i]);
123、} //寫入數(shù)據(jù) 到24C02</p><p> write_byte(255, 1); //存儲設(shè)置密碼判斷標(biāo)志位</p><p> clear_password(); //清除密碼函數(shù)</p><p> writecommand(0x01); //清屏,DDRAM的地址歸零<
124、;/p><p> display(2,1,"恭喜你!密碼設(shè)置成功");</p><p> display(4,6,"退出/F");</p><p> do{m=key_return();}while(m!=15); </p><p><b> break;</b><
125、/p><p><b> }</b></p><p><b> }</b></p><p> clear_password();</p><p><b> ii=0;</b></p><p><b> m=0;</b></
126、p><p> writecommand(0x01); </p><p> display(1,2,"安全退出密碼重置界面"); </p><p> display(4,5,"返回D/F");</p><p><b> }</b></p><p> v
127、oid chaojimima()</p><p><b> {</b></p><p> while(m!=15&&m!=14)</p><p><b> { </b></p><p> m=key_return();</p><p><b&g
128、t; switch(m)</b></p><p><b> {</b></p><p> case 0x30: case 0x31:case 0x32:case 0x33:case 0x34:case 0x35:case 0x36:case 0x37:case 0x38:case 0x39:</p><p><b>
129、 if(ii<=7)</b></p><p><b> {</b></p><p> Userpassword[ii]=m;</p><p> find_code[ii]='*'; </p><p> Display_String(find_code,0x89);</p&
130、gt;<p> ii++;</p><p><b> } </b></p><p> break;</p><p> case 14: for(k=0;k<8;k++) //確認(rèn)鍵</p><p><b> {</b><
131、/p><p> if(surper_code[k]==Userpassword[k]) </p><p> //判輸入密碼與超級密碼是否相等</p><p><b> {</b></p><p> writecommand(0x01); //清屏,DDRAM的地址歸零</p>
132、<p> display(1,2,"超級用戶權(quán)限");</p><p> display(4,1,"還原/E 退出/F ");</p><p> do{m=key_return();}while(m!=15&&m!=14);</p><p><b> if(m==14)</b
133、></p><p><b> {</b></p><p> writecommand(0x01);</p><p> display(2,2,"成功還原出廠設(shè)置");</p><p> display(4,6,"返回/F");</p><p&g
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機課程設(shè)計-密碼鎖
- 單片機課程設(shè)計--密碼鎖
- 單片機課程設(shè)計-密碼鎖
- 單片機課程設(shè)計---密碼鎖
- 密碼鎖單片機課程設(shè)計
- 單片機課程設(shè)計-密碼鎖
- 單片機課程設(shè)計--電子密碼鎖
- 單片機課程設(shè)計---數(shù)字密碼鎖
- 單片機課程設(shè)計--電子密碼鎖
- 單片機課程設(shè)計---數(shù)字密碼鎖
- 單片機課程設(shè)計-數(shù)字密碼鎖
- 單片機課程設(shè)計電子密碼鎖
- 51單片機課程設(shè)計---密碼鎖
- 單片機課程設(shè)計報告--電子密碼鎖
- 單片機課程設(shè)計--電子密碼鎖報告
- 單片機課程設(shè)計---電子密碼鎖報告
- 課程設(shè)計報告---單片機實現(xiàn)密碼鎖
- 單片機課程設(shè)計---多功能密碼鎖
- 單片機課程設(shè)計--門禁電子密碼鎖
- 單片機課程設(shè)計----電子密碼鎖報告
評論
0/150
提交評論