51單片機(jī)課程設(shè)計(jì)--電子密碼鎖控制系統(tǒng)設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩35頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  課程設(shè)計(jì)報(bào)告</b></p><p>  課程名稱: 單片機(jī)課程設(shè)計(jì) </p><p>  題 目: 電子密碼鎖控制系統(tǒng)設(shè)計(jì) </p><p>  學(xué) 院: 環(huán)境與化學(xué)工程 系:過程裝備與測(cè)控工程 </p><p&g

2、t;  專 業(yè): 測(cè)控技術(shù)與儀器 </p><p>  班 級(jí): 測(cè)儀102 </p><p><b>  摘要</b></p><p>  隨著科技和人們的生活水平的提高,如何實(shí)現(xiàn)家庭防盜這一問題也變的尤其的突出,傳統(tǒng)機(jī)械鎖由于構(gòu)造簡(jiǎn)單,被撬事件屢見不鮮;電子鎖由

3、于其保密性高,使用靈活性好,安全系數(shù)高,受到了廣大用戶的青睞。 本設(shè)計(jì)以單片機(jī)AT89C51作為密碼鎖監(jiān)控裝置的檢測(cè)和控制核心,分為主機(jī)控制和從機(jī)執(zhí)行機(jī)構(gòu),實(shí)現(xiàn)鑰匙信息在主機(jī)上的初步認(rèn)證注冊(cè)、密碼信息的加密、鑰匙丟失報(bào)廢等功能。根據(jù)51單片機(jī)之間的串行通信原理,這便于對(duì)密碼信息的隨機(jī)加密和保護(hù)。而且采用鍵盤輸入的電子密碼鎖具有較高的優(yōu)勢(shì)。采用數(shù)字信號(hào)編碼和二次調(diào)制方式,不僅可以實(shí)現(xiàn)多路信息的控制,提高信號(hào)傳輸?shù)目垢蓴_性,減少錯(cuò)誤動(dòng)作,而

4、且功率消耗低;反應(yīng)速度快、傳輸效率高、工作穩(wěn)定可靠等。軟件設(shè)計(jì)采用自上而下的模塊化設(shè)計(jì)思想,以使系統(tǒng)朝著分布式、小型化方向發(fā)展,增強(qiáng)系統(tǒng)的可展性和運(yùn)行的穩(wěn)定性。測(cè)試結(jié)果表明,本系統(tǒng)各項(xiàng)功能已達(dá)到本設(shè)計(jì)的所有要求。 </p><p>  隨著科學(xué)技術(shù)的不斷發(fā)展,人們對(duì)日常生活中的安全保險(xiǎn)器件的要求越來越高。為滿足人們對(duì)鎖的使用要求,增加其安全性,用密碼代替鑰匙的密碼鎖應(yīng)運(yùn)而生。密碼鎖具有安全性高、成本低、功耗低、易

5、操作等優(yōu)點(diǎn)。在安全技術(shù)防范領(lǐng)域,具有防盜報(bào)警功能的電子密碼鎖逐漸代替?zhèn)鹘y(tǒng)的機(jī)械式密碼鎖,克服了機(jī)械式密碼鎖密碼量少、安全性能差的缺點(diǎn),使密碼鎖無論在技術(shù)上還是在性能上都大大提高一步。隨著大規(guī)模集成電路技術(shù)的發(fā)展,特別是單片機(jī)的問世,出現(xiàn)了帶微處理器的智能密碼鎖,它除具有電子密碼鎖的功能外,還引入了智能化管理、專家分析系統(tǒng)等功能,從而使密碼鎖具有很高的安全性、可靠性,應(yīng)用日益廣泛。 隨著人們對(duì)安全的重視和科技的發(fā)展,許多電子智能鎖(指紋識(shí)

6、別、IC卡辨認(rèn))已在國(guó)內(nèi)外相繼面世。但是這些產(chǎn)品的特點(diǎn)是針對(duì)特定的指紋和有效卡,只能適用于保密要求的箱、柜、門等。而且指紋識(shí)識(shí)別器若在公共場(chǎng)所使用存在容易機(jī)械損壞,IC卡還存在容易丟失、損壞等特點(diǎn)。加上其成本較高,一定程度上限制了這類產(chǎn)品的普及和推廣。鑒于目前的技術(shù)水平與市場(chǎng)的接收程度,電子密碼鎖是這類電子防盜產(chǎn)品的主流。</p><p>  關(guān)鍵詞:51單片機(jī);密碼鎖;單片機(jī)設(shè)計(jì),電子鎖</p>

7、<p><b>  目錄</b></p><p>  1 目錄 1 課題設(shè)計(jì)目標(biāo)..................................................... 2 </p><p>  2 總體設(shè)計(jì)方案..................................................... 2 </p&

8、gt;<p>  2.1 設(shè)計(jì)思路 .................................................... 2 </p><p>  2.2 方案確立 .................................................... 2 </p><p>  3 硬件電路方框圖....................

9、............................... 3 </p><p>  3.1 單片機(jī)及其最小系統(tǒng) .......................................... 3 </p><p>  3.1.1 復(fù)位電路的設(shè)計(jì)......................................... 3 </p><p>  3

10、.1.2時(shí)鐘電路的設(shè)計(jì) ......................................... 4 </p><p>  3.2 密碼鎖電路 .................................................. 5 </p><p>  3.2.1 按鍵電路的設(shè)計(jì).........................................

11、5 </p><p>  3.2.2 LCD顯示電路 ........................................... 6 </p><p>  4 程序設(shè)計(jì)......................................................... 8</p><p>  4.1 模塊介紹 ..............

12、...................................... 8</p><p>  5 課程設(shè)計(jì)總結(jié)..................................................... 9 </p><p>  6 參考文獻(xiàn)......................................................... 10&l

13、t;/p><p>  7 附 錄........................................................... 11 </p><p>  附錄一 總電路原理圖 ............................................ 11</p><p>  附錄二用lochmaster繪制的電子密碼鎖圖像

14、 ..................................... 12 </p><p>  附錄三電子密碼鎖的實(shí)物圖 ..................................... 12 </p><p>  附錄四元器件清單 ............................................. 13 </p><p

15、>  附錄五 源程序清單 .............................................. 15</p><p><b>  1、課題設(shè)計(jì)目標(biāo)</b></p><p>  1、設(shè)計(jì)任務(wù):本設(shè)計(jì)采用單片機(jī)為主控芯片,結(jié)合外圍電路,組成電子密碼鎖,用戶想要打開鎖,必先通過提供的鍵盤輸入正確的密碼才能將鎖打開,密碼輸入錯(cuò)誤將不能打開鎖。&l

16、t;/p><p><b>  2、方案總體設(shè)計(jì)</b></p><p><b>  2.1 設(shè)計(jì)思路 </b></p><p>  該電路是一種采用以AT89S52為核心的單片機(jī)控制方案。 利用單片機(jī)靈活的編程設(shè)計(jì)和豐富的IO端口,及其控制的準(zhǔn)確性,不但能實(shí)現(xiàn)基本的密碼鎖功能,還能根據(jù)實(shí)際需要添加調(diào)電存儲(chǔ)、聲光提示功能。 &l

17、t;/p><p><b>  2.2 方案確立 </b></p><p>  (1)為了實(shí)現(xiàn)密碼的保密性,采用一個(gè)4×4的矩陣式鍵盤可以任意設(shè)置用戶密碼,從而提高了密碼的保密性。 </p><p>  (2)采用LCD顯示單元,提高了可讀性,提供良好的人機(jī)界面。 </p><p>  3、硬件電路方框圖 </

18、p><p>  電路由兩大部分組成:AT89S51單片機(jī)及其外圍電路和密碼鎖電路。密碼鎖電路包含,矩陣鍵盤輸入、LCD指示電路、報(bào)警控制電路、AT24C02掉電存儲(chǔ)電路。其原理方框圖如圖3.1所示。 </p><p>  3.1 單片機(jī)及其最小系統(tǒng) </p><p>  3.1.1 復(fù)位電路的設(shè)計(jì) </p><p>  復(fù)位是單片機(jī)的初始化操作。

19、單片機(jī)啟運(yùn)運(yùn)行時(shí),都需要先復(fù)位,其作用是使CPU和系統(tǒng)中其他部件處于一個(gè)確定的初始狀態(tài),并從這個(gè)狀態(tài)開始工作。因而復(fù)位是一個(gè)很重要的操作方式。但單片機(jī)本身是不能自動(dòng)進(jìn)行復(fù)位的,必須配合相應(yīng)的外部電路才能實(shí)現(xiàn)。該復(fù)位電路采用按鍵電平復(fù)位式復(fù)位電路。當(dāng)單片機(jī)已在運(yùn)行當(dāng)中時(shí),按下復(fù)位鍵S后松開,在復(fù)位引腳RET(9腳)腳持續(xù)出現(xiàn)24個(gè)振蕩器脈沖周期(即2個(gè)機(jī)器周期)的高電平信號(hào)將使單片機(jī)復(fù)位。也能使RST為一段時(shí)間的高電平,從而實(shí)現(xiàn)上電或開關(guān)

20、復(fù)位的操作。如圖3.2所示。 </p><p>  圖3.2 復(fù)位電路 </p><p>  3.1.2時(shí)鐘電路的設(shè)計(jì) </p><p>  沖的驅(qū)動(dòng)下的進(jìn)行的,如果單片機(jī)的時(shí)鐘電路停止工作,晶振停振,那么單片機(jī)也就停止運(yùn)行了。當(dāng)采用內(nèi)部時(shí)鐘 時(shí)鐘電路為單片機(jī)產(chǎn)生時(shí)序脈沖,單片機(jī)所有運(yùn)算與控制過程都是在統(tǒng)一的時(shí)序脈時(shí),連接方法如下圖

21、所示,在晶振引腳XTAL1(19腳)和XTAL2(18)腳,引腳之間接入一個(gè)11.0592MHZ晶振,兩個(gè)引腳對(duì)地分別再接入一個(gè)電容即可產(chǎn)生所需的時(shí)鐘信號(hào),電容的容量一般在幾十皮法,如20PF。</p><p>  如圖3.3所示。 </p><p><b>   </b></p><p>  圖3.3 時(shí)鐘電路 </p>

22、<p>  3.2 密碼鎖電路 </p><p>  3.2.1 按鍵電路的設(shè)計(jì) </p><p>  為了加強(qiáng)密碼的保密性,采用一個(gè) 4×4 的矩陣式鍵盤可以任意設(shè)置用戶密碼,1-16位長(zhǎng)度,從而提高了密碼的保密性,同時(shí)也能減少與單片機(jī)接口時(shí)所占用的I/O口線的數(shù)目節(jié)省了單片機(jī)的寶貴資源,在按鍵比較多的時(shí)候,通常采用這種方法。</p><p&g

23、t;  其原理圖如圖3.4所示。 </p><p>  圖3.4 矩陣鍵盤電路  </p><p>  每一行與每一列的交叉處不相同,而是通過一個(gè)按鍵來連通,利用這種行列式矩陣結(jié)構(gòu)只需要N根行線與M根列線,即可組成具有N × M 個(gè)按鍵的矩陣鍵盤。 </p><p>  在這種行列式矩陣鍵盤編碼的單片機(jī)系統(tǒng)中,鍵盤處理程序首先執(zhí)行等待按鍵并確認(rèn)有無按鍵

24、按下的程序段。當(dāng)確認(rèn)有按鍵按下后,下一步就是要識(shí)別哪一個(gè)按鍵被按下。對(duì)鍵的識(shí)別方法通常有兩種,一種是通用的組行掃描查詢法,另一種是速度較快的線反轉(zhuǎn)法。此系統(tǒng)中,我們采用線反轉(zhuǎn)法。首先辨別鍵盤中有無按鍵被按下,在單片機(jī)I/O口向鍵盤送全掃描字然后讀入行線狀態(tài)來判斷。具體方法是,向行線輸出全掃描字00H,把全部列線置成低電平,然后將列線的電平狀態(tài)讀入累加器A中。如果有按鍵被按下,總會(huì)有一根行線電瓶被拉至低電平從而使行線不全為1。判斷鍵盤中

25、哪一個(gè)按鍵被按下通常是通過將列線逐列至低電平后,檢查行輸入狀態(tài)來實(shí)現(xiàn)的。方法是,依次給列線送低電平然后檢查所有行線狀態(tài),如果全為1,則所按下的按鍵不在此列,如果不全為1,則所按下的按鍵必在此列,而且是在與零電平行線相交的交點(diǎn)上的那個(gè)按鍵。10個(gè)數(shù)字鍵用來輸入密碼,另外2個(gè)功能鍵分別是:確認(rèn)、取消。其中退格鍵的功能是當(dāng)輸入密碼錯(cuò)誤的時(shí)候,清除前面已經(jīng)輸入的數(shù)據(jù),重新輸入。確認(rèn)鍵的功能是確認(rèn)輸入的密碼。</p><p&

26、gt;<b>  按鍵功能表</b></p><p>  3.2.2 LCD顯示電路 </p><p>  本系統(tǒng)設(shè)計(jì)的顯示電路是為了給使用者以提示而設(shè)置的。因?yàn)橄到y(tǒng)具有賬戶管理系統(tǒng)使用LCD可以為用戶提供更友好的人機(jī)界面,故選用LCD1602作為顯示器件。開鎖時(shí),按下鍵盤上的開鎖按鍵后,利用鍵盤上的數(shù)字鍵0-9輸入密碼,每按下一個(gè)數(shù)字鍵后在顯示器上顯示一個(gè)*,輸入多

27、少位就顯示多少個(gè)*。當(dāng)密碼輸入完成時(shí),按下確認(rèn)鍵,如果輸入的密碼正確的話,LCD顯示“OK”,單片機(jī)其中P3.0引腳會(huì)輸出低電平,使三極管T2導(dǎo)通電磁鐵吸合,繼電器開關(guān)跳轉(zhuǎn),電子密碼鎖被打開,如果密碼不正確,LCD顯示屏?xí)@示“Enter please”,P3.0輸出的是高電平,電子密碼鎖不能打開。通過LCD顯示屏,可以清楚地判斷出密碼鎖所處的狀態(tài)。 </p><p>  圖3.5 顯示器電路 </p&

28、gt;<p>  顯示器主要用于顯示以下幾個(gè)字符指示如圖3.6所示。</p><p>  圖3.6(a)開機(jī)狀態(tài) </p><p>  圖3.6(b) 等待輸入狀態(tài) </p><p>  圖3.6 (c) 密碼輸入正確狀態(tài) </p><p><b>  4、程序設(shè)計(jì) </b></p>

29、;<p><b>  4.1 模塊介紹 </b></p><p>  本設(shè)計(jì)將密碼鎖軟件分為以下幾個(gè)模塊(程序見附錄程序清單) </p><p>  (1)主程序模塊 </p><p>  主程序主要完成系統(tǒng)及外圍電路的初始化,控制LCD根據(jù)按鍵操作進(jìn)行各個(gè)</p><p>  狀態(tài)的轉(zhuǎn)化,實(shí)現(xiàn)密碼鎖的

30、人機(jī)交互界面。 </p><p>  (2)鍵盤驅(qū)動(dòng)及鍵盤輸入程序 </p><p>  主要包括鍵盤掃描的程序,根據(jù)按鍵的布局進(jìn)行符合操作習(xí)慣的鍵值映射</p><p>  鍵盤操作到數(shù)據(jù)的轉(zhuǎn)換。 </p><p>  (3)LCD1602驅(qū)動(dòng) </p><p>  包括液晶屏的初始化程序和字符顯示,字符串顯示

31、等基本函數(shù),供主程序調(diào)用 。</p><p>  (4)AT24C02存取程序 </p><p>  包括I2C總線的讀寫時(shí)序模擬控制及讀寫程序。 </p><p>  主程序流程圖如圖4.1所示: </p><p><b>   </b></p><p>  圖4.1主程序流程圖</

32、p><p><b>  5、課程設(shè)計(jì)總結(jié)</b></p><p>  在做本次課程設(shè)計(jì)的過程中,我感觸最深的當(dāng)屬查閱大量的設(shè)計(jì)資料了。為了讓自己的設(shè)計(jì)更加完善,查閱這方面的設(shè)計(jì)資料是十分必要的,同時(shí)也是必不可少的。我們是在做片機(jī)課程設(shè)計(jì),但我們不是藝術(shù)家,他們可以拋開實(shí)際盡情在幻想的世界里翱翔,而我們一切都要有據(jù)可依,有理可尋,不切實(shí)際的構(gòu)想,永遠(yuǎn)只能是構(gòu)想,永遠(yuǎn)無法升級(jí)

33、為設(shè)計(jì)。其次,在這次課程設(shè)計(jì)中,我們運(yùn)用到了以前所學(xué)的專業(yè)課知識(shí),如Proteus制圖,C語言等。雖然過去從未獨(dú)立應(yīng)用過它們,但在學(xué)習(xí)的過程中帶著問題去學(xué)我發(fā)現(xiàn)效率很高,這是我做這次課程設(shè)計(jì)的又一收獲。最后,要做好一個(gè)課程設(shè)計(jì),就必須做到,在設(shè)計(jì)程序之前,對(duì)所用單片機(jī)的內(nèi)部結(jié)構(gòu)有一個(gè)系統(tǒng)的了解知道該單片機(jī)內(nèi)有哪些資源,要有一個(gè)清晰的思路和</p><p>  一個(gè)完整的的軟件流程圖,在設(shè)計(jì)程序時(shí),不能妄想一次就將

34、整個(gè)程序設(shè)計(jì)好,反復(fù)修改、不斷改進(jìn)是程序設(shè)計(jì)的必經(jīng)之路,要養(yǎng)成注釋程序的好習(xí)慣,一個(gè)程序的完美與否不僅僅是</p><p>  實(shí)現(xiàn)功能,而應(yīng)該讓人一看就能明白你的思路,這樣也為資料的保存和交流提供了方便,在設(shè)計(jì)課程過程中遇到問題是很正常德,但我們應(yīng)該將每次遇到的問題記錄下來,并分析清楚,以免下次再碰到同樣的問題。另外,這次課程設(shè)計(jì)讓我感到了團(tuán)隊(duì)合作的重要性。在團(tuán)隊(duì)中我們互幫互助,對(duì)整個(gè)課程設(shè)計(jì)來說,這是至關(guān)重要

35、的,缺少每一個(gè)人都會(huì)對(duì)我們的設(shè)計(jì)產(chǎn)</p><p>  生影響。還有要感謝指導(dǎo)老師在我們遇到困難時(shí),給予我們的建議與鼓勵(lì)。一周多的課程設(shè)計(jì)結(jié)束了,但是從中學(xué)到的知識(shí)會(huì)讓我受益終身。發(fā)現(xiàn)、提出、分析、解決問題和實(shí)踐能力的提高都會(huì)受益于我在以后的學(xué)習(xí)、工作和生活中。 </p><p><b>  6、參考文獻(xiàn)</b></p><p>  參考文獻(xiàn):

36、 [1] 張?zhí)旆? 完全手冊(cè)--51單片機(jī)C語言開發(fā)詳解[M].電子工業(yè)出版社2008 </p><p>  [2] 李群芳. 單片微型計(jì)算機(jī)與接口技術(shù)[M].北京電子工業(yè)出版社2008 </p><p>  [3] 趙景波. Protel DXP實(shí)用教程[M].人民郵電出版社2009 </p><p>  [4] 丁明亮唐前輝. 51單

37、片機(jī)應(yīng)用設(shè)計(jì)與仿真--基于Keil C與Proteus[M]. 北京航空航天大學(xué)出版社2009 </p><p>  [5] Atmel.AT89S51 Data Sheet </p><p>  [6] ShareWave.LCD1602器件手冊(cè) </p><p>  [7] Atmel. AT24C02 Data Sheet </p>

38、<p><b>  7、附錄:</b></p><p>  附錄一:總電路原理圖</p><p>  附錄二:用lochmaster繪制的電子密碼鎖圖像 </p><p>  附錄三:電子密碼鎖的實(shí)物圖 </p><p><b>  附錄四:元器件清單</b></p>

39、<p>  附錄五:源程序清單 </p><p>  #include <reg52.h> </p><p>  #define uint unsigned int </p><p>  #define uchar unsigned char </p><p>  #define KEY P1 //鍵盤輸入端口

40、 </p><p>  #define No_key 20 //無按鍵時(shí)的返回值 </p><p>  #define lcddata P0 //1602的數(shù)據(jù)輸入端口 </p><p>  sbit lcden= P2^2; </p><p>  sbit lcdrs= P2^0; </p><p>

41、  sbit lcdrw= P2^1; </p><p>  sbit light= P3^0; </p><p>  sbit light1= P3^1; </p><p>  uchar j ; //用來統(tǒng)計(jì)輸入 個(gè)數(shù)的全局變量 </p><p>  uchar aa; //用來在定時(shí)器中計(jì)數(shù)的 全局變量 </p>

42、;<p>  uchar code table[]= " Hello!"; </p><p>  uchar code table1[]=" OK! " ; </p><p>  uchar code table2[]="Enter please:" ; </p><p>  

43、uchar code key_table[16] = </p><p>  { 1,2,3,10, 4,5,6,11,</p><p>  7,8,9,12, 0,13,14,15 }; </p><p>  uchar password[]={2,0,1,0,9,3} ; //設(shè)定初始密碼 </p><p>  uchar sav

44、e[6]; //保存輸入的數(shù)據(jù) </p><p>  uchar conflag ; //確認(rèn)標(biāo)志 </p><p>  uchar lockflag; //鎖鍵盤標(biāo)志 </p><p>  uchar startflag; //開始標(biāo)志 </p><p>  void d

45、elay(uint z); //延時(shí)子函數(shù) </p><p>  void wright_com(uchar com); //寫指令函數(shù) </p><p>  void wright_data(uchar date) ; //寫數(shù)據(jù)函數(shù) </p><p>  void init();

46、 //初始化 </p><p>  void display_OK(); // 顯示OK </p><p>  void delete(); //刪除輸入的最后一個(gè)數(shù) </p><p>  uchar keyscan() ; //帶返回值的鍵盤掃描程序 </p>&

47、lt;p>  void enter_code(uchar t); //輸入密碼函數(shù)把輸入的數(shù)據(jù)存入數(shù)組中</p><p>  并在屏幕上顯示相應(yīng)的東西, </p><p>  void confirm(); //確認(rèn)密碼對(duì)不對(duì)把輸入的數(shù)據(jù)與密碼逐一對(duì)比</p><p><b>  完全一樣剛正確 </b>&

48、lt;/p><p>  void succeed_an(); //輸入密碼成功時(shí)的 響應(yīng), </p><p>  void fail_an(); //輸入密碼 失敗時(shí) 響應(yīng) </p><p>  void lockkey(); //鎖鍵盤三秒 </p><p>  void reset();

49、//復(fù)位函數(shù) </p><p>  void display_enter(); //顯示輸入 </p><p>  void main(void) </p><p>  { uchar temp; </p><p>  init(); </p><p><b>  while(1) <

50、/b></p><p><b>  { </b></p><p>  if(lockflag) </p><p><b>  { </b></p><p>  temp=keyscan(); // 鎖鍵期間也要進(jìn)行鍵盤掃描 </p><p>  if(temp!=N

51、o_key) //重新記時(shí)三秒 </p><p><b>  { </b></p><p>  aa=0; //重新在定時(shí)器中計(jì)數(shù) } </p><p><b>  } </b></p><p><b>  else </b></p>&l

52、t;p><b>  { </b></p><p>  temp=keyscan(); //反復(fù)掃描輸入等待隨時(shí)輸入 </p><p>  if(temp!=No_key) //有按鍵按下才進(jìn)行下面的操作 </p><p><b>  { </b></p><p>  if(temp

53、==10) </p><p><b>  { </b></p><p><b>  reset(); </b></p><p>  startflag=1; //開始標(biāo)志置位 </p><p><b>  } </b></p><p>  if(sta

54、rtflag) </p><p><b>  { </b></p><p>  enter_code(temp); //每掃描一次鍵盤就要進(jìn)行一次處理</p><p><b>  保存輸入的數(shù)值 </b></p><p>  if(temp==13) //按下確認(rèn)鍵盤就要進(jìn)行密碼確認(rèn) &l

55、t;/p><p><b>  { </b></p><p>  confirm(); //進(jìn)行確認(rèn)判斷 </p><p>  if(conflag) //密碼確認(rèn)為正確 </p><p><b>  { </b></p><p>  succeed_an();

56、 //密碼正確作出相應(yīng)的反應(yīng) </p><p><b>  } </b></p><p><b>  else </b></p><p><b>  { </b></p><p>  fail_an(); //密碼錯(cuò)誤作相應(yīng)反應(yīng) </p><

57、p><b>  } </b></p><p><b>  } </b></p><p>  if(temp==14) </p><p><b>  { </b></p><p>  delete(); //作刪除操作 } </p><p>

58、<b>  } </b></p><p>  } </p><p><b>  } </b></p><p>  /****** 顯示enter********/ </p><p>  void display_enter() </p>&

59、lt;p><b>  { </b></p><p>  uchar num; </p><p>  wright_com(0x80); </p><p>  for(num=0;num<13;num++) </p><p><b>  { </b></p><p>

60、;  wright_data(table2[num]); </p><p><b>  } </b></p><p><b>  } </b></p><p>  /****** 顯示OK********/ </p><p>  void display_OK() </p><p

61、><b>  { </b></p><p>  uchar num; </p><p>  wright_com(0x80); </p><p>  for(num=0;num<13;num++) </p><p><b>  { </b></p><p>  w

62、right_data(table1[num]); </p><p><b>  } </b></p><p><b>  } </b></p><p>  /****** 刪除最后一個(gè)********/ </p><p>  void delete() </p><p>

63、;<b>  { </b></p><p>  wright_com(0x80+0x40+j); //確定刪除對(duì)象 </p><p>  wright_data(' '); //顯示空格即為刪除 </p><p>  save[--j]=0; //刪除后數(shù)據(jù)清零 </p><p> 

64、 wright_com(0x80+0x40+j); //為下次輸入數(shù)據(jù)時(shí)寫好位置必須是在最后</p><p><b>  一個(gè)后面 </b></p><p><b>  } </b></p><p>  /****** 對(duì)各種變量進(jìn)行復(fù)位********/ </p><p>  void

65、reset() </p><p><b>  { </b></p><p>  uchar num; </p><p>  display_enter(); </p><p>  wright_com(0x80+0x40); //擦除屏幕上的顯示 </p><p>  for(num=0;nu

66、m<6;num++) </p><p><b>  { </b></p><p>  save[num]=0; //對(duì)輸入的數(shù)值進(jìn)行清零 </p><p>  wright_data(' '); //顯示的是空格 </p><p><b>  } </b></p&g

67、t;<p>  wright_com(0x80+0x40); //下次再輸入時(shí)可以又從起始位置輸入 </p><p>  lockflag=0; //各種變量要清零回起始狀態(tài) </p><p>  conflag=0; </p><p><b>  j=0; </b></p><p><

68、b>  } </b></p><p>  /****** 輸入密碼正確進(jìn)行響應(yīng)********/ </p><p>  void succeed_an() </p><p><b>  { </b></p><p>  light=0; //燈亮 </p><p>  di

69、splay_OK(); //顯示成功 </p><p>  delay(1000); </p><p>  light=1; //燈滅 </p><p><b>  } </b></p><p>  /****** 輸入密碼錯(cuò)誤進(jìn)行響應(yīng)********/ </p><p>  void

70、 fail_an() </p><p><b>  { </b></p><p>  lockkey(); </p><p><b>  } </b></p><p>  /******鎖鍵盤三秒************/ </p><p>  void lockk

71、ey() </p><p><b>  { </b></p><p>  lockflag=1; </p><p><b>  } </b></p><p>  /******輸入密碼并在屏幕上顯示星號(hào)******/ </p><p>  void enter_c

72、ode(uchar t) </p><p><b>  { </b></p><p>  if(t>=0&&t<10) </p><p><b>  { </b></p><p><b>  if(j==0) </b></p><

73、p><b>  { </b></p><p>  wright_com(0x80+0x40) ; //第一輸入時(shí)要先寫入地址指令否則無法顯示 </p><p>  wright_data('*') ; </p><p><b>  } </b></p><p>  el

74、se </p><p><b>  { </b></p><p>  wright_data('*') ;//不是第一個(gè)輸入則不用再寫地址 </p><p><b>  } </b></p><p>  save[j++]=t; //保存輸入的數(shù)據(jù) </p

75、><p><b>  } </b></p><p><b>  } </b></p><p>  /******校對(duì)密碼以確定是不是正確的**********/ </p><p>  void confirm() </p><p><b>  { </b>

76、;</p><p><b>  uchar k; </b></p><p>  for(k=0;k<6;k++) </p><p><b>  { </b></p><p>  if(password[k]!=save[k]) //對(duì)數(shù)組中的內(nèi)容進(jìn)行逐一比較一旦有數(shù)據(jù)不對(duì)馬上退出循環(huán)

77、</p><p><b>  { </b></p><p><b>  break;  </b></p><p><b>  } </b></p><p><b>  } </b></p><p>  if(k==6)

78、//要是條件退出的話說明六個(gè)數(shù)全對(duì)密碼 </p><p><b>  { </b></p><p>  conflag=1; // 進(jìn)行標(biāo)志密碼正確 </p><p><b>  } </b></p><p><b>  } </b></p><p>

79、;  /******中斷服務(wù)程序**********/ </p><p>  void timer0() interrupt 1 </p><p><b>  { </b></p><p>  TH0=(65536-50000)/256; </p><p>  TL0=(65536-50000)%256; //

80、重裝初值 </p><p>  if(lockflag) </p><p><b>  {</b></p><p><b>  aa++; </b></p><p>  light1=0; </p><p>  if(aa>=60) //三秒到了 &l

81、t;/p><p><b>  { </b></p><p>  aa=0; //清零可以方便下次再使用 </p><p>  light1=1; //關(guān)閉警報(bào) </p><p>  lockflag=0; //標(biāo)志清零解除鍵鎖方便下次使用 </p><p><b>  } </b

82、></p><p><b>  } </b></p><p><b>  } </b></p><p>  /******初始化***********/ </p><p>  void init() </p><p><b>  { </b><

83、;/p><p>  uchar num; </p><p>  /*****定時(shí)器初始化****/ </p><p><b>  TMOD=1; </b></p><p>  TH0=(65536-50000)/256; </p><p>  TL0=(65536-50000)%256; </

84、p><p><b>  ET0=1; </b></p><p>  EA=1; //開啟總中斷 </p><p>  TR0=1;//把定時(shí)器關(guān)閉 </p><p>  /****1602初始化******/ </p><p>  lcdrw=0; //這個(gè)必須要置 零否則無法正常顯示 &l

85、t;/p><p><b>  lcden=0; </b></p><p>  wright_com(0x38) ; //初始化 </p><p>  wright_com(0x0c) ; //打開光標(biāo) 0x0c不顯示光標(biāo) 0x0e光標(biāo)不閃0x0f</p><p><b>  光標(biāo)閃 </b>

86、;</p><p>  wright_com(0x01) ; //清顯示 </p><p>  wright_com(0x80) ; </p><p>  for(num=0;num<9;num++) </p><p><b>  { </b></p><p>  wright_data(t

87、able[num]); </p><p>  delay(1); </p><p><b>  } </b></p><p><b>  } </b></p><p>  /******1602寫入指令************/ </p><p>  void wright_

88、com(uchar com) </p><p><b>  { </b></p><p><b>  lcdrs=0; </b></p><p>  lcddata=com; </p><p>  delay(1); </p><p><b>  lcden=1;

89、</b></p><p>  delay(1); </p><p>  lcden=0; </p><p><b>  } </b></p><p>  /******1602寫入數(shù)據(jù)***********/ </p><p>  void wright_data(uchar dat

90、e) </p><p><b>  { </b></p><p><b>  lcdrs=1; </b></p><p>  lcddata=date; </p><p>  delay(1); </p><p><b>  lcden=1; </b>&

91、lt;/p><p>  delay(1); </p><p><b>  lcden=0; </b></p><p><b>  } </b></p><p>  /******延時(shí)函數(shù)************/ </p><p>  void delay(uint z) <

92、;/p><p><b>  { </b></p><p>  uint x,y; </p><p>  for(x=z;x>0;x--) </p><p>  for(y=110;y>0;y--) ; </p><p><b>  } </b></p>

93、<p>  /**********4x4矩陣鍵盤掃描函數(shù)*********/ </p><p>  uchar keyscan() </p><p><b>  {</b></p><p>  uchar temp,num=No_key; //num的初值要為無鍵盤按下時(shí)的返</p><p><b>

94、  回值 </b></p><p>  /*********掃描第一行****************/ </p><p>  KEY=0xfe; </p><p>  temp=KEY; </p><p>  temp=temp&0xf0; //讀出高四位 </p><p>  while(t

95、emp!=0xf0) </p><p><b>  { </b></p><p>  delay(5); //延時(shí)消抖 </p><p>  temp=KEY; </p><p>  temp=temp&0xf0; </p><p>  while(temp!=0xf0) //確認(rèn)

96、確實(shí)有按鍵按下</p><p><b>  { </b></p><p>  temp=KEY; </p><p>  switch(temp) //根據(jù)這八個(gè)電平可以確定是哪個(gè)按鍵按下 </p><p><b>  { </b></p><p>  case 0xe

97、e:num=1; </p><p><b>  break; </b></p><p>  case 0xde:num=2; </p><p><b>  break; </b></p><p>  case 0xbe:num=3; </p><p><b>  b

98、reak; </b></p><p>  case 0x7e:num=10; </p><p><b>  break; </b></p><p><b>  } </b></p><p>  while(temp!=0xf0) //等待松手 </p><p&g

99、t;<b>  { </b></p><p>  temp=KEY; </p><p>  temp=temp&0xf0; </p><p><b>  } </b></p><p><b>  } </b></p><p>  } /****

100、*****掃描第二行***************/ </p><p>  KEY=0xfd; </p><p>  temp=KEY; </p><p>  temp=temp&0xf0; </p><p>  while(temp!=0xf0) </p><p><b>  { </b>

101、;</p><p>  delay(5); </p><p>  temp=KEY; </p><p>  temp=temp&0xf0; </p><p>  while(temp!=0xf0) </p><p><b>  { </b></p><p>  te

102、mp=KEY;  </p><p>  switch(temp) </p><p><b>  { </b></p><p>  case 0xed:num=4; </p><p><b>  break; </b></p><p>  case 0xdd:num=5; &

103、lt;/p><p><b>  break; </b></p><p>  case 0xbd:num=6; </p><p><b>  break; </b></p><p>  case 0x7d:num=11; </p><p><b>  break; <

104、;/b></p><p><b>  }</b></p><p>  while(temp!=0xf0) </p><p><b>  { </b></p><p>  temp=KEY; </p><p>  temp=temp&0xf0; </p>

105、;<p><b>  } </b></p><p><b>  } </b></p><p><b>  } </b></p><p>  /*********掃描第三行****************/ </p><p>  KEY=0xfb; </p&g

106、t;<p>  temp=KEY; </p><p>  temp=temp&0xf0; </p><p>  while(temp!=0xf0) </p><p><b>  { </b></p><p>  delay(5); </p><p>  temp=KEY; &

107、lt;/p><p>  temp=temp&0xf0; </p><p>  while(temp!=0xf0) </p><p><b>  { </b></p><p>  temp=KEY; </p><p>  switch(temp) </p><p><

108、;b>  { </b></p><p>  case 0xeb:num=7; </p><p><b>  break; </b></p><p>  case 0xdb:num=8 ; </p><p><b>  break; </b></p><p>

109、  case 0xbb:num=9; </p><p><b>  break; </b></p><p>  case 0x7b:num=12; </p><p><b>  break; </b></p><p><b>  } </b></p><p&

110、gt;  while(temp!=0xf0) </p><p><b>  { </b></p><p>  temp=KEY; </p><p>  temp=temp&0xf0; </p><p><b>  } </b></p><p><b>  }

111、 </b></p><p><b>  } </b></p><p>  /*********掃描第四行****************/ </p><p>  KEY=0xf7; </p><p>  temp=KEY; </p><p>  temp=temp&0xf0;

112、</p><p>  while(temp!=0xf0) </p><p><b>  { </b></p><p>  delay(5); </p><p>  temp=KEY; </p><p>  temp=temp&0xf0; </p><p>  whi

113、le(temp!=0xf0) </p><p><b>  { </b></p><p>  temp=KEY; </p><p>  switch(temp) </p><p><b>  { </b></p><p>  case 0xe7:num=0; </p&g

114、t;<p><b>  break; </b></p><p>  case 0xd7:num=13; </p><p><b>  break; </b></p><p>  case 0xb7:num=14; </p><p><b>  break; </b>

115、;</p><p>  case 0x77:num=15; </p><p><b>  break; </b></p><p>  while(temp!=0xf0) </p><p><b>  { </b></p><p>  temp=KEY; </p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論