單片機(jī)課程設(shè)計(jì)-密碼鎖_第1頁(yè)
已閱讀1頁(yè),還剩42頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  《單片機(jī)技術(shù)》課程設(shè)計(jì)說(shuō)明書(shū)</p><p><b>  密碼鎖</b></p><p>  院 、 部: </p><p>  學(xué)生姓名: </p><p>  指導(dǎo)教師: 職稱: </p><p&

2、gt;  專 業(yè): </p><p>  班 級(jí): </p><p>  完成時(shí)間: </p><p><b>  摘 要</b></p><p>  隨著現(xiàn)代科技的發(fā)展,鎖變得更加的多樣化,實(shí)

3、用性和安全性最為重要的,于是電子密碼鎖毋庸置疑的成為了最受歡迎的鎖類。電子密碼鎖具有眾多的優(yōu)點(diǎn),保密性強(qiáng)、不需要鑰匙、修改密碼方便等。</p><p>  該課程設(shè)計(jì)是一個(gè)基于51單片機(jī)的液晶顯示電子密碼鎖的設(shè)計(jì)。單片機(jī)技術(shù)是智能化檢測(cè)與控制領(lǐng)域應(yīng)用非常普及并且擁有很大潛力的技術(shù)。本設(shè)計(jì)硬件方面采用美國(guó)Atmel公司的AT89S52單片機(jī)作為系統(tǒng)處理核心, AT24C02作為數(shù)據(jù)存儲(chǔ)器,用于斷電保護(hù),液晶顯示器則

4、是采用LCD12684,作為系統(tǒng)輸出設(shè)備,顯示系統(tǒng)提示信息,4*4矩陣鍵盤(pán)作為輸入設(shè)備,再加以蜂鳴器、電源等電路構(gòu)成整個(gè)系統(tǒng)硬件;軟件方面則采用C語(yǔ)言編寫(xiě)。</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è)計(jì)課題任務(wù)、功能要求說(shuō)明及總體方案介紹1</p><p>  1.1 設(shè)計(jì)課題任務(wù)1</p><p>  1.2 功能要求說(shuō)明1</p><p&

10、gt;  1.3 設(shè)計(jì)課題總體方案介紹及工作原理說(shuō)明1</p><p>  2 設(shè)計(jì)課題的硬件系統(tǒng)設(shè)計(jì)3</p><p>  2.1 設(shè)計(jì)課題硬件系統(tǒng)各模塊功能簡(jiǎn)要介紹3</p><p>  2.2 設(shè)計(jì)課題電路原理圖、PCB圖、元器件布局圖4</p><p>  2.3 設(shè)計(jì)課題元器件清單4</p><

11、;p>  3 設(shè)計(jì)課題軟件系統(tǒng)的設(shè)計(jì)5</p><p>  3.1 設(shè)計(jì)課題使用單片機(jī)資源的情況5</p><p>  3.2 設(shè)計(jì)課題軟件系統(tǒng)各模塊功能簡(jiǎn)要介紹5</p><p>  3.3 設(shè)計(jì)課題軟件系統(tǒng)程序流程框圖6</p><p>  4 設(shè)計(jì)結(jié)論、仿真結(jié)果、誤差分析、教學(xué)建議等等8</p>

12、<p>  4.1 設(shè)計(jì)課題的設(shè)計(jì)結(jié)論及使用說(shuō)明8</p><p>  4.2 設(shè)計(jì)課題的仿真結(jié)果9</p><p>  4.3 設(shè)計(jì)課題的誤差分析14</p><p>  4.4 設(shè)計(jì)體會(huì)14</p><p><b>  參考文獻(xiàn):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è)計(jì)課題任務(wù)、功能要求說(shuō)明及總體方案介紹</p><p>  1.1 設(shè)計(jì)課題任務(wù)</p><p>  設(shè)計(jì)并制作一個(gè)液晶電子密碼鎖

15、,具有密碼修改,超級(jí)密碼,報(bào)警等功能。</p><p>  1.2 功能要求說(shuō)明</p><p>  (1)密碼鎖上電或按鍵復(fù)位后能自動(dòng)顯示系統(tǒng)提示符“P.”;</p><p> ?。?)可以存儲(chǔ)原始密碼,超級(jí)密碼和修改后的密碼;</p><p> ?。?)顯示提示信息;</p><p>  (4)密碼輸入時(shí)處于保密

16、顯示狀態(tài);</p><p>  1.3 設(shè)計(jì)課題總體方案介紹及工作原理說(shuō)明</p><p>  1.3.1 設(shè)計(jì)課題總體方案介紹</p><p>  本課程設(shè)計(jì)采用AT89S52作為系統(tǒng)處理核心,4*4鍵盤(pán)輸入密碼,AT24C02用于存儲(chǔ)密碼,進(jìn)行掉電保護(hù),蜂鳴器用于報(bào)警功能,LCD12684用于顯示系統(tǒng)提示信息,5V電源供電。硬件系統(tǒng)框圖如圖1所示。</

17、p><p>  圖1 硬件系統(tǒng)結(jié)構(gòu)框圖</p><p>  1.3.2 工作原理說(shuō)明</p><p>  用4*4鍵盤(pán)輸入密碼,單片機(jī)調(diào)用AT24C02中存儲(chǔ)的原始密碼對(duì)輸入密碼進(jìn)行比較,通過(guò)顯示屏輸出相應(yīng)的系統(tǒng)提示信息,通過(guò)提示信息,可修改密碼,并存儲(chǔ)新密碼,用于下次開(kāi)鎖。可進(jìn)行手動(dòng)復(fù)位,回到初始界面。</p><p>  2 設(shè)計(jì)課題的硬

18、件系統(tǒng)設(shè)計(jì)</p><p>  2.1 設(shè)計(jì)課題硬件系統(tǒng)各模塊功能簡(jiǎn)要介紹</p><p>  本課程設(shè)計(jì)硬件系統(tǒng)采用AT89S52為核心,再加以LCD12684液晶顯示電路,蜂鳴器電路,AT24C02密碼存儲(chǔ)電路,4*4鍵盤(pán)輸入電路,手動(dòng)復(fù)位電路,晶振電路,電源電路,下載口電路等模塊。</p><p>  2.1.1 單片機(jī)AT89S52模塊</p>

19、;<p>  AT89S52是一款低功耗、高性能CMOS8位微控制器,具有8K可編程 Flash存儲(chǔ)器。使用 Atmel 公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè) 80C51 產(chǎn)品指令和引腳完全兼容。價(jià)格低廉,不過(guò)在性能方面上完全可以勝任本設(shè)計(jì)課題中硬件系統(tǒng)中的處理核心。結(jié)合各個(gè)方面,所以決定采用AT89S52單片機(jī)作為核心處理模塊。</p><p>  2.1.2 LCD12684液晶顯示模塊&

20、lt;/p><p>  LCD12684帶有中文字庫(kù),是一種具有4位/8位并行、2線或3線串行多種接口方式,可以顯示出8*4行16*16點(diǎn)陣的漢字,綜合各方面,所以采用了LCD12684為本設(shè)計(jì)課題的液晶顯示模塊。AT89S52的P0口接LCD12684的八位數(shù)據(jù)線,用于顯示提示信息。P3.1 接寄存器選擇端RS,當(dāng)RS=1時(shí),DB0—DB7為顯示數(shù)據(jù);當(dāng)RS=0時(shí),DB0—DB7為顯示指令數(shù)據(jù)。 P3.6接讀寫(xiě)控制

21、端R/W,當(dāng)R/W=1的時(shí)候,寫(xiě)操作;當(dāng)R/W=0的時(shí)候,讀操作。P3.7接使能端E,寫(xiě)入操作時(shí),使能端下降沿有效。</p><p>  2.1.3 蜂鳴器模塊</p><p>  用P3.0口控制一個(gè)無(wú)源蜂鳴器,作為提示音,當(dāng)密碼錯(cuò)誤時(shí)會(huì)發(fā)出聲音,進(jìn)行提示。由于單片機(jī)輸出的電流過(guò)小,無(wú)法驅(qū)動(dòng)蜂鳴器工作,所以使用了三極管進(jìn)行放大電流,使蜂鳴器可以正常工作。本設(shè)計(jì)課題通過(guò)控制單片機(jī)的P3.

22、0口進(jìn)而控制蜂鳴器的工作狀態(tài)。</p><p>  2.1.4 AT24C02密碼存儲(chǔ)模塊</p><p>  AT24C02是美國(guó)Atmel公司生產(chǎn)的低功耗CMOS型E2PROM,內(nèi)部含含256*8位存儲(chǔ)空間,具有抗干擾能力強(qiáng),不易丟失數(shù)據(jù),體積小,成本低等優(yōu)點(diǎn)。AT24C02有一個(gè)16字節(jié)頁(yè)寫(xiě)緩沖器,該器件通過(guò)I2C總線接口進(jìn)行操作,還有一個(gè)專門的寫(xiě)保護(hù)功能。本設(shè)計(jì)課題主要用到AT2

23、4C02的寫(xiě)保護(hù)功能。其中其串行時(shí)鐘SCL端接P2.4;串行數(shù)據(jù)/地址SDA端接P2.3口,完成數(shù)據(jù)和指令的傳送,相比較并行傳輸,更加節(jié)省I/O口資源。</p><p>  2.1.5 4*4鍵盤(pán)輸入電路</p><p>  本設(shè)計(jì)課題采用4*4行列式鍵盤(pán),共有鍵位16個(gè),4根行線連接P1口低四位,另外4根列線連接P1口高四位,在一開(kāi)始的時(shí)候,給4根行線賦高電平,當(dāng)有按鍵按下時(shí),則某行和

24、某列相通,高電平變低,可知該行有按鍵被按下,然后進(jìn)行列掃描,同理可識(shí)別出按鍵所在列。最后則可知按下的鍵位。、</p><p>  2.1.6 手動(dòng)復(fù)位模塊</p><p>  為確保系統(tǒng)中電路穩(wěn)定可靠工作,復(fù)位電路是必不可少的一部分。本設(shè)計(jì)課題采用AVR復(fù)位電路,當(dāng)按下復(fù)位按鈕的時(shí)候, VCC的高電平就會(huì)直接加到RET端。由于人的動(dòng)作再快也會(huì)使按鈕保持接通一段時(shí)間,所以完全能夠滿足復(fù)位的

25、時(shí)間要求。</p><p>  2.1.7 晶振模塊</p><p>  單片機(jī)本身就是一個(gè)復(fù)雜的同步時(shí)序電路,為了保證能夠?qū)崿F(xiàn)同步工作方式,必須提供時(shí)鐘信號(hào),以使其系統(tǒng)在時(shí)鐘信號(hào)的控制下按時(shí)序協(xié)調(diào)工作。晶振電路是不可缺少的一部分,AT89S52芯片中的高增益反向放大器輸入端為引腳XTAL1,輸出端引腳為XTAL2。通過(guò)這兩個(gè)引腳在芯片外并接石英晶體振蕩器和兩只負(fù)載電容。保證單片機(jī)能夠進(jìn)

26、行正常工作。</p><p>  2.1.8 電源模塊</p><p>  本設(shè)計(jì)直接采用5V電源進(jìn)行外部供電,這可使整個(gè)系統(tǒng)處于正常工作狀態(tài)。</p><p>  2.1.9 下載口模塊</p><p>  通過(guò)下載口模塊,可以將用KEIL軟件產(chǎn)生的Hex文件下載入單片機(jī)AT89S52中,使其進(jìn)行正常工作。</p><

27、;p>  2.2 設(shè)計(jì)課題電路原理圖、PCB圖、元器件布局圖</p><p>  詳見(jiàn)附錄A、B、C、</p><p>  2.3 設(shè)計(jì)課題元器件清單</p><p><b>  詳見(jiàn)附錄D</b></p><p>  3 設(shè)計(jì)課題軟件系統(tǒng)的設(shè)計(jì)</p><p>  3.1 設(shè)計(jì)課題

28、使用單片機(jī)資源的情況</p><p>  P0口接LCD12684的八位數(shù)據(jù)線,用于顯示提示信息;P3.1 接寄存器選擇端RS;P3.6接讀寫(xiě)控制端R/W;P3.7接使能端E;P3.0口控制一個(gè)無(wú)源蜂鳴器,用于提示;P1口接4*4矩陣鍵盤(pán),用于輸入數(shù)據(jù);P2.3、P2.4分別接AT24C02的SDA、SCL端;RET接手動(dòng)復(fù)位模塊RET端;XTAL1、XTAL2分別接晶振模塊的XTAL1和XTAL2端。</

29、p><p>  3.2 設(shè)計(jì)課題軟件系統(tǒng)各模塊功能簡(jiǎn)要介紹</p><p>  主函數(shù):主體的布局,并調(diào)用相應(yīng)的子函數(shù),使其構(gòu)成一個(gè)完整的系統(tǒng);</p><p>  延遲子函數(shù):用于去抖,顯示間隔,使系統(tǒng)更加的有條理;</p><p>  顯示子函數(shù):用于顯示系統(tǒng)提示的信息;</p><p>  密碼鎖子函數(shù):用于密碼的

30、邏輯關(guān)系,使整個(gè)程序擁有密碼鎖的功能,可以存儲(chǔ)密碼和調(diào)用密碼,主要控制AT24C02的工作;</p><p>  按鍵掃描子函數(shù):用于輸入鍵值,實(shí)現(xiàn)與用戶的交互;</p><p>  蜂鳴器子函數(shù):實(shí)現(xiàn)蜂鳴器的報(bào)警功能。</p><p>  3.3 設(shè)計(jì)課題軟件系統(tǒng)程序流程框圖</p><p><b>  圖2 主程序流程圖<

31、;/b></p><p>  圖3 密碼處理函數(shù)流程圖</p><p>  圖4 按鍵掃描流程圖</p><p>  4 設(shè)計(jì)結(jié)論、仿真結(jié)果、誤差分析、教學(xué)建議等等</p><p>  4.1 設(shè)計(jì)課題的設(shè)計(jì)結(jié)論及使用說(shuō)明</p><p>  本設(shè)計(jì)課題使用AT89S52單片機(jī)作為主控芯片, LCD12684

32、作為其液晶顯示器, 用AT24C02串行傳輸存儲(chǔ)器來(lái)存儲(chǔ)密碼,4*4矩陣鍵盤(pán),蜂鳴器,以及其他外圍電路,用C語(yǔ)言編寫(xiě)其控制程序,最終成功設(shè)計(jì)出一款密碼鎖,可以進(jìn)行隨時(shí)改密,并存儲(chǔ)新的密碼可以用于下次開(kāi)啟,當(dāng)忘記密碼時(shí)配有專有的超級(jí)密碼,可以解決忘記密碼所帶來(lái)的麻煩,同時(shí)擁有豐富聲光提示信息。此密碼鎖具有很高的使用價(jià)值,可在日常生活中發(fā)揮巨大的作用。利用單片機(jī)控制,矩陣鍵盤(pán)輸入密碼,液晶顯示器顯示中文提示字符,蜂鳴器發(fā)聲,密碼鎖運(yùn)行的效果

33、非常的良好,設(shè)計(jì)課題取得了圓滿的成功。</p><p>  密碼鎖的初始密碼為88888888,超級(jí)密碼為99999999,可以修改密碼;當(dāng)輸錯(cuò)三次密碼時(shí),密碼鎖將會(huì)報(bào)警,并鎖死,按下返回鍵和復(fù)位鍵可以回到初始界面。加入了AT24C02模塊,擁有掉電保護(hù)功能,就算停電,也不用擔(dān)心密碼的遺失。</p><p>  4.2 設(shè)計(jì)課題的仿真結(jié)果</p><p><

34、b>  圖5 初始頁(yè)面</b></p><p><b>  圖6 菜單頁(yè)面</b></p><p><b>  圖7 進(jìn)入界面</b></p><p><b>  圖8 密碼輸入界面</b></p><p>  圖9 密碼輸入正確提示</p>&

35、lt;p>  圖10 密碼輸入錯(cuò)誤界面</p><p>  圖11 超級(jí)密碼功能界面</p><p>  圖12 超級(jí)密碼輸入界面</p><p>  圖13 重新輸入密碼選擇界面</p><p>  圖14 安全退出選擇界面</p><p>  4.3 設(shè)計(jì)課題的誤差分析</p><p&g

36、t;  LCD12684顯示有亂碼,跟延遲沒(méi)有設(shè)置合理有一定的關(guān)系,通過(guò)多次試驗(yàn),無(wú)改變,不過(guò)不影響正常的使用,此誤差可以忽略。</p><p>  4.4 設(shè)計(jì)體會(huì) </p><p>  本設(shè)計(jì)課題最終成功運(yùn)行,不過(guò)存在一些小誤差,LCD12684顯示有瑕疵,至今無(wú)力解決,頗感無(wú)奈。通過(guò)設(shè)計(jì),對(duì)多方面的知識(shí)都有很大的增加,對(duì)以后設(shè)計(jì)有很大的作用,積累了大量的經(jīng)驗(yàn),收獲頗豐。對(duì)于幾個(gè)芯片

37、的理解和運(yùn)用更加的自如。再設(shè)計(jì)中感到很大的壓力。同時(shí)對(duì)單片機(jī)的功能更加期待,其強(qiáng)大的功能還有待后續(xù)發(fā)掘,其潛力無(wú)窮。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 劉迎春.《MCS-51單片機(jī)原理及應(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] 沙占友.《單片機(jī)外圍電路設(shè)計(jì)》[M] . 北京:電子工業(yè)出版社,2003</p><p>  Sha Zhanyou. Peripheral circuit design [M].

39、 Beijing: Publishing House of electronics industry, 2003</p><p>  [3] 李念強(qiáng).《單片機(jī)原理機(jī)及應(yīng)用》[M] .北京:機(jī)械工業(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è)計(jì)課題圓滿結(jié)束,在此要先感謝我的指導(dǎo)老師王韌老師,他嚴(yán)謹(jǐn)求實(shí)的作風(fēng)給我很大的鼓舞。設(shè)計(jì)過(guò)程中,從前期的功能設(shè)計(jì),電路設(shè)計(jì),軟件上每一條語(yǔ)句的調(diào)試,期間遇到許許多多的難點(diǎn),眾多意想不到的問(wèn)題??朔@些困難,最終獲得成果,知識(shí)融入到設(shè)計(jì)

41、的每個(gè)角落里。當(dāng)最終完成整個(gè)設(shè)計(jì),自是欣喜不已。最后還要感謝幫助過(guò)我的眾多同學(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>  *功能:可以實(shí)現(xiàn)密碼的修改,密碼的存儲(chǔ),掉電后密碼不丟失,擁有超級(jí)密碼, </p><p>  根據(jù)液晶的提示便可進(jìn)行操作。 </p><p>  初始密碼為88888888;</p><p>  超級(jí)密碼為99999999;</p><p>  修改密碼要輸入初始密

46、碼或超級(jí)密碼才能修改密碼</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"//延時(shí)模塊頭文件</p><p>  #include "keyscan.h"//鍵掃描模塊頭文件</p><p>  #i

48、nclude "mimasuo.h"//頻率測(cè)試模塊頭文件</p><p>  #include"beep.h"//報(bào)警模塊頭文件</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鍵進(jìn)入");</p><p>  display(3,2,"通信1103徐恩彬"); </p><p>  display(4,1,"學(xué)號(hào)11401340334"

51、); //開(kāi)機(jī)界面</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,"超級(jí)密碼"); </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,"進(jìn)入系統(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,"請(qǐng)輸入密碼");</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,"請(qǐng)輸入當(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,"輸入超級(jí)密碼嗎");</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,"請(qǐng)輸入超級(jí)密碼");&l

66、t;/p><p>  display(4,1,"確認(rèn)E 退出/F ");</p><p>  chaojimima(); //超級(jí)密碼函數(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>  /******液晶寫(xiě)命令函數(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>  /*********液晶寫(xiě)數(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); //顯示開(kāi),光標(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; //列號(hào),行號(hào)</p><p>  P1=0xf0; //發(fā)全行0掃描碼</p><p>  if((P1&0xf0)!=0xf0) //若有鍵按下</p><p>  {delay(1000); // 延時(shí)去抖</p><p> 

85、 if((P1&0xf0)!=0xf0) //延時(shí)再判鍵是否還按下</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); //無(wú)鍵按下,還回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// 器件地址以及寫(xiě)入操作 </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; //串行時(shí)鐘</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,寫(xiě)入到AT24C01的數(shù)據(jù)串 </p><p>  uchar code surper_code[]={0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39};// 超級(jí)密碼9個(gè)9</p><p>  uchar password[]={0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38}; //原始密碼8個(gè)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; //計(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]='*'; //對(duì)顯示數(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>  }//單片機(jī)從24C02上讀回?cái)?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,"密碼輸入錯(cuò)誤!");</p><p>  display(2,2,"請(qǐng)重新輸入密碼");</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,"請(qǐng)重新輸入密碼");</p>&l

111、t;p>  display(4,1,"確認(rèn)E 退出/F ");</p><p><b>  }</b></p><p>  if(j==3)//報(bào)警條件及函數(shù)</p><p><b>  {</b></p><p>  writecommand(0x01

112、); //清屏,DDRAM的地址歸零</p><p>  display(1,2,"您連續(xù)三次輸入");</p><p>  display(2,1,"錯(cuò)誤!界面鎖死");</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ī)會(huì)已經(jīng)到,判斷標(biāo)志位</p><p>  beepon(); //報(bào)警</p><p>  do{m=key_return();}while(m!=15);//等待您按下返回鍵</p><p>  beepoff(); /關(guān)閉報(bào)警</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]='*'; //對(duì)顯示數(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、} //寫(xiě)入數(shù)據(jù) 到24C02</p><p>  write_byte(255, 1); //存儲(chǔ)設(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>  //判輸入密碼與超級(jí)密碼是否相等</p><p><b>  {</b></p><p>  writecommand(0x01); //清屏,DDRAM的地址歸零</p>

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

評(píng)論

0/150

提交評(píng)論