基于單片機(jī)8051的密碼鎖控制_第1頁
基于單片機(jī)8051的密碼鎖控制_第2頁
基于單片機(jī)8051的密碼鎖控制_第3頁
基于單片機(jī)8051的密碼鎖控制_第4頁
基于單片機(jī)8051的密碼鎖控制_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、單片機(jī)課程設(shè)計報告課題名稱:密碼鎖控制學(xué)院:機(jī)電汽車工程學(xué)院班級:機(jī)091-5姓名:學(xué)號:指導(dǎo)老師:小組成員:單片機(jī)課程設(shè)計基于單片機(jī)8051的密碼鎖控制一、 題目:密碼鎖控制二、 任務(wù)要求:1、密碼鎖由4x4鍵盤和lcd顯示器組成。2、其基本功能為:(1)使用lcd顯示器來顯示密碼輸入的相關(guān)信息(2)可以設(shè)置4位數(shù)字(0-9)密碼;(3)內(nèi)定另一組4位數(shù)字密碼為1234;(4)密碼輸入正確則繼電器啟動2s,密碼輸入錯誤則發(fā)出警報聲。程序執(zhí)行后工作指示燈led亮,表示程序開始執(zhí)行,lcd顯示“password a or b key”,按下操作鍵a或b動作如下:操作鍵a:設(shè)置新的4位數(shù)字密碼,操

2、作鍵b:輸入4位數(shù)字密碼并做檢查。三、組內(nèi)成員:孫岳,宋習(xí)震,孫煜琦,孫建業(yè),唐元朝四、指導(dǎo)老師:劉鵬 2012年6月6日本組成員及分工情況組長:孫岳 組員:宋習(xí)震,孫煜琦,孫建業(yè),唐元朝孫岳:任務(wù)分配,領(lǐng)導(dǎo)整體程序編制以及電路的模擬.孫建業(yè),孫煜琦,唐元朝:電路圖的仿真宋習(xí)震,唐元朝,孫煜琦:程序的編譯調(diào)試孫建業(yè),宋習(xí)震,孫煜琦:前期資料的搜集整理全體小組成員集體參與資料搜集,前期程序的研討,程序的編制和任務(wù)書的編寫。緒論 單片機(jī)自二十世紀(jì)七十年代問世以來,以其極高的性能價格比受到人們的重視和關(guān)注,應(yīng)用廣泛,發(fā)展快。由于其的優(yōu)點(diǎn)多而突出,所以其的應(yīng)用領(lǐng)域極廣,幾乎到了無孔不入的地步。在我國廣

3、泛的應(yīng)用于工業(yè)自動化控制、自動檢測、智能儀表、智能家用電器、航空航天系統(tǒng)和國防軍事、尖端武器等各個方面??梢圆捎密浻布Y(jié)合的辦法提高系統(tǒng)的性能的控制技術(shù)為微控技術(shù)。 lcd 液晶顯示器是 liquid crystal display 的簡稱,是20世紀(jì)70年代初發(fā)展起來的一種液晶顯示器。隨著技術(shù)的發(fā)展其的分辨率、屏幕發(fā)光顏色等進(jìn)入批量化合實(shí)用化。 隨著人們生活水平的提高,如何實(shí)現(xiàn)家庭防盜這一問題也變的尤其的突出,傳統(tǒng)的機(jī)械鎖由于其構(gòu)造的簡單,被撬的事件屢見不鮮,電子鎖由于其保密性高,使用靈活性好,安全系數(shù)高,受到了廣大用戶的親呢。 本系統(tǒng)由單片機(jī)系統(tǒng)、矩陣鍵盤、lcd顯示和報警系統(tǒng)組成。系統(tǒng)能

4、完成開鎖、報警、修改用戶密碼基本的密碼鎖的功能。本文詳細(xì)闡述了個模塊的功能以及它們之間的聯(lián)系。一、單片機(jī)概述采用以8051為核心的單片機(jī)控制方案。利用單片機(jī)靈活的編程設(shè)計和豐富的io端口,及其控制的準(zhǔn)確性,不但能實(shí)現(xiàn)基本的密碼鎖功能,還能添加調(diào)電存儲、聲光提示甚至添加遙控控制功能。其原理如圖所示。 圖22單片機(jī)控制方案 2、單片機(jī)80511、芯片8051有40條引腳,共分為端口線、電源線和控制線三類4并行i/o端口,每個端口有8條端口線,用于傳送數(shù)據(jù)、地址??删幊檀型ǖ?5個中斷源低功耗的閑置和掉電方式兩個16位定時器、計數(shù)器片內(nèi)振蕩器和時鐘脈沖4k內(nèi)部rom128內(nèi)部ram2、管腳說明 1

5、)、主電源引腳vcc和vssvcc(40腳)接+5v電壓; vss(20腳)接地。 2)、外接晶體引腳xtal1和xtal2 xtal1(19腳)接外部晶體的一個引腳。在單片機(jī)內(nèi)部,它是一個反相放大器的輸入端,這個放大器構(gòu)成了片內(nèi)振蕩器。當(dāng)采用外部振蕩器時,對hmos單片機(jī),此引腳應(yīng)接地;對chmos單片機(jī),此引腳作為驅(qū)動端。 xtal2(18腳)接外晶體的另一端。在單片機(jī)內(nèi)部,接至上述振蕩器的反相放大器的輸出端。采用外部振蕩器時,對hmos單片機(jī),該引腳接外部振蕩器的信號,即把外部振蕩器的信號直接接到內(nèi)部時鐘發(fā)生器的輸入端;對xhmos,此引腳應(yīng)懸浮。 3)、控制或與其它電源復(fù)用引腳rst/

6、vpd、ale/prog、psen和ea/vpp rst/vpd(9腳)當(dāng)振蕩器運(yùn)行時,在此腳上出現(xiàn)兩個機(jī)器周期的高電平將使單片機(jī)復(fù)位。推薦在此引腳與vss引腳之間連接一個約8.2k的下拉電阻,與vcc引腳之間連接一個約10f的電容,以保證可靠地復(fù)位。vcc掉電期間,此引腳可接上備用電源,以保證內(nèi)部ram的數(shù)據(jù)不丟失。當(dāng)vcc主電源下掉到低于規(guī)定的電平,而vpd在其規(guī)定的電壓范圍(50.5v)內(nèi),vpd就向內(nèi)部ram提供備用電源。 ale/prog(30腳):當(dāng)訪問外部存貯器時,ale(允許地址鎖存)的輸出用于鎖存地址的低位字節(jié)。即使不訪問外部存儲器,ale端仍以不變的頻率周期性地出現(xiàn)正脈沖信

7、號,此頻率為振蕩器頻率的1/6。因此,它可用作對外輸出的時鐘,或用于定時目的。然而要注意的是,每當(dāng)訪問外部數(shù)據(jù)存儲器時,將跳過一個ale脈沖。ale端可以驅(qū)動(吸收或輸出電流)8個ls型的ttl輸入電路。對于eprom單片機(jī)(如8751),在eprom編程期間,此引腳用于輸入編程脈沖(prog)。 psen(29腳):此腳的輸出是外部程序存儲器的讀選通信號。在從外部程序存儲器取指令(或常數(shù))期間,每個機(jī)器周期兩次psen有效。但在此期間,每當(dāng)訪問外部數(shù)據(jù)存儲器時,這兩次有效的psen信號將不出現(xiàn)。psen同樣可以驅(qū)動(吸收或輸出)8個ls型的ttl輸入。 ea/vpp(引腳):當(dāng)ea端保持高電

8、平時,訪問內(nèi)部程序存儲器,但在pc(程序計數(shù)器)值超過0fffh(對851/8751/80c51)或1fffh(對8052)時,將自動轉(zhuǎn)向執(zhí)行外部程序存儲器內(nèi)的程序。當(dāng)ea保持低電平時,則只訪問外部程序存儲器,不管是否有內(nèi)部程序存儲器。對于常用的8031來說,無內(nèi)部程序存儲器,所以ea腳必須常接地,這樣才能只選擇外部程序存儲器。 對于eprom型的單片機(jī)(如8751),在eprom編程期間,此引腳也用于施加21v的編程電源(vpp)。 4)、輸入/輸出(i/o)引腳p0、p1、p2、p3(共32根)p0口(39腳至32腳):是雙向8位三態(tài)i/o口,在外接存儲器時,與地址總線的低8位及數(shù)據(jù)總線復(fù)

9、用,能以吸收電流的方式驅(qū)動8個ls型的ttl負(fù)載。 p1口(1腳至8腳):是準(zhǔn)雙向8位i/o口。由于這種接口輸出沒有高阻狀態(tài),輸入也不能鎖存,故不是真正的雙向i/o口。p1口能驅(qū)動(吸收或輸出電流)4個ls型的ttl負(fù)載。對8052、8032,p1.0引腳的第二功能為t2定時/計數(shù)器的外部輸入,p1.1引腳的第二功能為t2ex捕捉、重裝觸發(fā),即t2的外部控制端。對eprom編程和程序驗(yàn)證時,它接收低8位地址。 p2口(21腳至28腳):是準(zhǔn)雙向8位i/o口。在訪問外部存儲器時,它可以作為擴(kuò)展電路高8位地址總線送出高8位地址。在對eprom編程和程序驗(yàn)證期間,它接收高8位地址。p2可以驅(qū)動(吸收

10、或輸出電流)4個ls型的ttl負(fù)載。 p3口(10腳至17腳):是準(zhǔn)雙向8位i/o口,在mcs-51中,這8個引腳還用于專門功能,是復(fù)用雙功能口。p3能驅(qū)動(吸收或輸出電流)4個ls型的ttl負(fù)載。 作為第一功能使用時,就作為普通i/o口用,功能和操作方法與p1口相同。值得強(qiáng)調(diào)的是,p3口的每一條引腳均可獨(dú)立定義為第一功能的輸入輸出或第二功能。 p3各口線的第二功能定義 口線 引腳 第二功能 p3.0 10 rxd(串行輸入口) p3.1 11 txd(串行輸出口) p3.2 12 int0(外部中斷0) p3.3 13 int1(外部中斷1) p3.4 14 t0(定時器0外部輸入) p3.

11、5 15 t1(定時器1外部輸入) p3.6 16 wr(外部數(shù)據(jù)存儲器寫脈沖)p3.7 17 rd(外部數(shù)據(jù)存儲器讀脈沖) 2、mcs-51單片機(jī)的片外總線結(jié)構(gòu) 綜合上面的描述可知,i/o口線都不能當(dāng)作用戶i/o口線。除8051/8751外真正可完全為用戶使用的i/o口線只有p1口,以及部分作為第一功能使用時的p3口。如圖,是mcs-51單片機(jī)按引腳功能分類的片外總線結(jié)構(gòu)圖。 由圖我們可以看到,單片機(jī)的引腳除了電源、復(fù)位、時鐘接入,用戶i/o口外,其余管腳是為實(shí)現(xiàn)系統(tǒng)擴(kuò)展而設(shè)置的。這些引腳構(gòu)成mcs-51單片機(jī)片外三總線結(jié)構(gòu),即: 地址總線(ab):地址總線寬為16位,因此,其外部存儲器直接

12、尋址為64k字節(jié),16位地址總線由p0口經(jīng)地址鎖存器提供8位地址(a0至a7);p2口直接提供8位地址(a8至a15)。 數(shù)據(jù)總線(db):數(shù)據(jù)總線寬度為8位,由p0提供。 控制總線(cb):由p3口的第二功能狀態(tài)和4根獨(dú)立控制線reset、ea、ale、psen組成。 下表列出各個子系列的配制情況供讀則參考。 芯片種類 片內(nèi)存儲器 中斷源 定時/計數(shù)器 串行口 電源消耗(ma) 制造工藝 rom/eprom ram 8051(8751,8031) 4k 128 5 2 同、異步方式,8位或10位可程序控制 125 hmos 8052(8752,8032) 8k 256 6 3 同、異步方式,

13、8位或10位可程序控制 100 hmos 80c51(87c51,80c31) 4k 128 5 2 同、異步方式,8位或10位可程序控制 24 chmos 80c52(87c52,80c32) 8k 256 7 3 同、異步方式,8位或10位可程序控制 24 chmos 8044(8744,8344) 4k 192 5 2 s.l.u 200 hmos 3、控制部件 控制部件是單片機(jī)的神經(jīng)中樞,它包括時鐘電路、復(fù)位電路、指令寄存器、譯碼以及信息傳送控制部件。它以主振頻率為基準(zhǔn)發(fā)出cpu的時序,對指令進(jìn)行譯碼,然后發(fā)出各種控制信號,完成一系列定時控制的微操作,用來控制單片機(jī)各部分的運(yùn)行。其中有

14、一些控制信號線能簡化應(yīng)用系統(tǒng)外圍控制邏輯,如控制地址鎖存的地址鎖存信號ale,控制片外程序存儲器運(yùn)行的片內(nèi)外存儲器選擇信號ea,以及片外取指信號psen二、硬件設(shè)計2.1 硬件設(shè)計思想鍵盤采用44矩陣式鍵盤,p1口作為鍵盤的輸入口。顯示采用lcd顯示報警聲音由p3.6引腳控制錯誤指示燈由p3.7引腳控制電源與接地要做好片內(nèi)外以及強(qiáng)弱電的隔離。2.2 部分硬件方案論述2.2.1 鍵盤輸入單元:這是用戶使用時將密碼輸入單片機(jī)內(nèi)的輸入設(shè)備,具體結(jié)構(gòu)構(gòu)成見圖:采用16個按鍵開關(guān),分別代表0d14個數(shù)字輸入鍵位,一個確認(rèn)鍵和一個取消鍵。采取矩陣式鍵位設(shè)計,此舉為減少對單片機(jī)的i/o口的使用,同時也是的我

15、們鍵盤的的外形更好看,使用更人性化。鍵盤的行線和列現(xiàn)分別接80c51單片機(jī)的p1.0p1.7八個端口。對鍵盤的識別方式我們采取行掃描法。具體使用由編程由單片機(jī)完成。逐行(或列)掃描查詢法,是一種最常用的按鍵識別方法,介紹過程如下。1、判斷鍵盤中有無鍵按下。將全部行線置低電平,然后檢測列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。 2、判斷閉合鍵所在的位置。在確認(rèn)有鍵按下后,即可進(jìn)入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時,其它線為高電平。在確定某根行

16、線位置為低電平后,再逐行檢測各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。 圖 鍵盤輸入單元2.2.2 顯示單元:此設(shè)備是用戶使用密碼防盜鎖的的顯示裝置,是實(shí)現(xiàn)人機(jī)交換的重要設(shè)備。用戶通過它來觀看鍵位數(shù)字的信息,了解已輸入的密碼個數(shù),單片機(jī)通過它告知用戶操作的正確與否,對用戶的操作進(jìn)行提示和引導(dǎo)。lcd顯示器的基本結(jié)構(gòu)和原理lcd顯示電路lcd模組是由控制器,驅(qū)動器,顯示器三部份所組成,而目前市面上lcd的模組驅(qū)動/控制器都是由日制的hd44780控制器晶片(或是相容產(chǎn)品),因此外部接腳的功能也都相同,這個控制器的內(nèi)部共有80 個位元組可供儲存由外部送進(jìn)來

17、的資料,因此使用此款控器的lcd模組最多一次可顯示80個字hd44780中儲存顯示資料的80個位元組,稱之為display dataram(ddram),ddra的位址從00h67h,共80個byte。在lcd 上show出資料ddram位址與可供顯示位置的對應(yīng)圖至于cpu如何將資料送給lcd顯示的方法,是將欲顯示的字元的ascii 碼寫到lcd內(nèi)部的ddram,lcd就會將這個自在其對應(yīng)的位置顯示出來.例如,若想在lcd 的左上角處(位址00h),顯示a.就將ascii碼-41h,送到ddram 的00h 位址.例:2.2.3報警電路模塊:此設(shè)備用于輸出按鍵聲、開鎖提示聲、操作錯誤提示聲及報

18、警聲;由p3.6輸出脈沖驅(qū)動喇叭發(fā)聲,電路如圖:圖 報警電路模塊2.2.4晶振電路模塊:此模塊為單片機(jī)提供時鐘頻率圖 晶振電路2.2.5復(fù)位電路模塊:此模塊用于實(shí)現(xiàn)密碼鎖的密碼重置,復(fù)位電路接單片機(jī)的rst引腳,但復(fù)位鍵按下時,低電平使單片機(jī)復(fù)位,從而實(shí)現(xiàn)密碼鎖密碼的重置。圖 復(fù)位電路模塊2.26 掉電存儲單元2.3 使用到的元器件列表元器件規(guī)格和型號數(shù)量單片機(jī)80511lcd顯示器lm016l1蜂鳴器speaker1晶體振蕩器crystal1可擦除存儲芯片24c0241按鍵開關(guān)button16電容cap3電阻res4發(fā)光二極管led-red,led-green2滑動變阻器pot13 總框圖設(shè)

19、計整體程序設(shè)計和程序流程圖 1、程序分為主程序和中斷服務(wù)程序兩個主要部分,主程序完成變量和單片機(jī)特殊功能寄存器的初始化后,進(jìn)入一個循環(huán)結(jié)構(gòu)。在循環(huán)中,首先判斷有無按鍵按下,若有則判斷是數(shù)字鍵還是功能鍵,根據(jù)按鍵的情況執(zhí)行相應(yīng)的功能。然后根據(jù)密碼是否正確的判斷情況,執(zhí)行相應(yīng)的操作。循環(huán)中最后需要顯示的內(nèi)容通過動態(tài)掃描子在液晶顯示器上顯示。中斷服務(wù)程序需要實(shí)現(xiàn)待機(jī)計時5秒。單片機(jī)采用mcs51系列的單片機(jī)8051作為主要主控制器,外圍電路器件包括液晶顯示驅(qū)動、蜂鳴器的驅(qū)動輸出、獨(dú)立式鍵盤和發(fā)光二極管的輸出等。2、程序主要包括以下幾個模塊1)、主程序模塊主要完成初始化、設(shè)置中斷向量、檢查有無按鍵按下

20、、以及調(diào)用顯示等等。2)、鍵盤掃描及識別子程序鍵盤采用查詢方式,放于主程序中,當(dāng)沒有按鍵按下時,單片機(jī)循環(huán)主程序,當(dāng)按鍵按下時便轉(zhuǎn)向相應(yīng)的子程序處理,處理結(jié)束后返回。3)、掉電存儲服務(wù)程序當(dāng)比較密碼的時候,需要讀取at24c02程序,將存儲于芯片內(nèi)的數(shù)據(jù)讀到ram中,然后和輸入密碼相比較,當(dāng)修改密碼時需要把密碼保存于24c02中。4)、顯示子程序包括關(guān)閉狀態(tài)顯示子程序(dis-a)、開鎖狀態(tài)顯示子程序(dis-b)、密碼輸入及修改狀態(tài)顯示子程序(dis-c)、密碼輸入錯誤報警狀態(tài)子程序(dis-d).程序流程圖 四、程序設(shè)計#include#define uint unsigned int#d

21、efine uchar unsigned charint pw_error,audio_out,cnt_state;void key_scan();uchar count0,count1,count3,num,n=0,temp,a,j,count4;uchar mima4; /初始密碼存儲區(qū)uchar tab_key50; /輸入密碼存儲區(qū)uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;bit enterflag; /確認(rèn)鍵按下與否的標(biāo)志bit mi

22、maflag; /密碼正確與否的標(biāo)志bit xiugaiflag; /修改密碼標(biāo)志bit enter1flag; /修改密碼確認(rèn)鍵標(biāo)志sbit red=p37;sbit bell=p36;sbit rs=p20;sbit rw=p21; sbit lcden=p22; sbit green=p32;sbit scl=p34;sbit sda=p35;uchar code table1=input the passco;uchar code table2=de: -;uchar code table3=*;uchar code table4=right (_) ;uchar code table

23、5=error!;uchar code table6=define the passc;uchar code table7=ode: -;uchar code table8=code is new;/*鍵盤消抖函數(shù)*void delay1() ; void delay2(uchar x) uchar a,b; for(a=x;a0;a-) for(b=100;b0;b-); void delay(uint z) uint x,y; for(x=z;x0;x-) for(y=110;y0;y-); /*e2room的初始化*void start() /開始信號 sda=1; delay1();

24、scl=1; delay1(); sda=0; delay1();void stop() /停止 sda=0; delay1(); scl=1; delay1(); sda=1; delay1();/*應(yīng)答信號*void respond() uchar i; scl=1; delay1(); while(sda=1)&(i250)i+; scl=0; delay1(); /*寫字節(jié)操作函數(shù)*void write_byte(uchar date) uchar i,temp; temp=date; for(i=0;i4;i+) temp=temp1; /保持最高位,左移到進(jìn)位cy scl=0; d

25、elay1(); sda=cy; delay1(); scl=1; delay1(); scl=0; delay1(); sda=1;/總線釋放 delay1();/*讀字節(jié)操作函數(shù)*uchar read_byte() uchar i,k; scl=0; delay1(); sda=1; delay1(); for(i=0;i4;i+) scl=1; delay1(); k=(k1)|sda; /或運(yùn)算,放到最低位 scl=0; delay1(); return k;/*寫地址函數(shù)*void write_add(uchar address,uchar date) start(); write_

26、byte(0xa0); respond(); write_byte(address); respond(); write_byte(date); respond(); stop();/*讀地址函數(shù)*uchar read_add(uchar address) uchar date; start(); write_byte(0xa0); respond(); write_byte(address); respond(); start(); write_byte(0xa1); respond(); date=read_byte(); stop(); return date;/*lcd1602的初始化

27、*void write_com(uchar com) rs=0; lcden=0; p0=com; delay(5); lcden=1; delay(5); lcden=0; void write_date(uchar date) rs=1; lcden=0; p0=date; delay(5); lcden=1; delay(5); lcden=0; /*密碼比較函數(shù)*bit mimacmp() bit flag; uchar i; for(i=0;i4;i+) if(mimai=tab_keyi) flag=1; else flag=0; i=4; return(flag); /返回fla

28、g/*lcd顯示函數(shù)開始*void lcd_display()uchar i=0;write_com(0x80+0x40+4);for(i=0;in;i+)write_date(table30);/*鍵盤功能分配函數(shù)群開始*/* 0 * 4 * 8 *修改(clr) * /* 1 * 5 * 9 *修改密碼鍵(a)*/* 2 * 6 * 確認(rèn)(en)*修改確認(rèn)密碼鍵(b)* /* 3 * 7 *void key_manage1()tab_keyn=0;n+;if(xiugaiflag=1)mimacount4=0;count4+; void key_manage2()tab_keyn=1;n+

29、;if(xiugaiflag=1)mimacount4=1;count4+;void key_manage3()tab_keyn=2;n+;if(xiugaiflag=1)mimacount4=2;count4+;void key_manage4()tab_keyn=3;n+;if(xiugaiflag=1)mimacount4=3;count4+;void key_manage5()tab_keyn=4;n+;if(xiugaiflag=1)mimacount4=4;count4+;void key_manage6()tab_keyn=5;n+;if(xiugaiflag=1)mimacou

30、nt4=5;count4+;void key_manage7()tab_keyn=6;n+;if(xiugaiflag=1)mimacount4=6;count4+;void key_manage8()tab_keyn=7;n+;if(xiugaiflag=1)mimacount4=7;count4+;void key_manage9()tab_keyn=8;n+;if(xiugaiflag=1)mimacount4=8;count4+;void key_manage10()tab_keyn=9;n+;if(xiugaiflag=1)mimacount4=9;count4+;/*確認(rèn)鍵* vo

31、id key_manage11() enterflag=1; /確認(rèn)鍵按下 if(n=4) /只有輸入4個密碼后按確認(rèn)才做比較 mimaflag=mimacmp(); else mimaflag=0; if(enterflag=1) enterflag=0; n=0; /用ffff清除已經(jīng)輸入的密碼 for(count3=0;count34;count3+) delay(5); tab_keycount3=0x0f; tr1=1; /打開計數(shù)器 count1=0; /定時器1由50ms累計到1s所用的計數(shù)器 if(mimaflag=1) a=0; write_com(0x01); write_

32、com(0x80); for(count3=0;count316;count3+) write_date(table4count3); /密碼正確,顯示right,綠燈亮 green=0; delay(5); else n=0; red=0;/ bell=bell;/ delay(100) ; a+; if(a=3) / for(count3=0;count38;count3+) /ffffffff清除密碼/ / delay(5);/ tab_keycount3=0x0f; / write_com(0x01); write_com(0x80); for(count3=0;count39;cou

33、nt3+) write_date(table5count3); /密碼錯誤,顯示 error,紅燈亮 / green=1; pw_error=0; /密碼錯誤指示燈亮 bell=0; /長鳴聲報警 delay(60000); delay(60000); delay(60000); delay(60000); delay(60000); delay(60000); delay(60000); delay(60000); delay(60000); bell=1; /- tr1=1; /打開定時器計時 cnt_state=2; /下一狀態(tài)處于15秒計時的狀態(tài) / delay(5); / tr1=0

34、; void key_manage12()tab_keyn=11;n+; /密碼計數(shù)清零/*取消鍵* void key_manage13()n=0; /密碼計數(shù)清零write_com(0x80); /指針?biāo)肝恢胒or(count3=0;count316;count3+) write_date(table1count3); /第一行顯示input the passpord: delay(5);write_com(0x80+0x40);for(count3=0;count316;count3+) write_date(table2count3); /開機(jī)顯示- delay(5); tab_key

35、count3=0x0f; /用ffff清除已經(jīng)輸入的密碼/*修改密碼鍵*void key_manage14() uchar aa=0; n=0; xiugaiflag=1; write_com(0x01); write_com(0x80);for(count3=0;count316;count3+) write_date(table6count3); /顯示define the password delay(5); tab_keycount3=0x0f; /用ffff清除已經(jīng)輸入的密碼write_com(0x80+0x40);for(count3=0;count316;count3+) wri

36、te_date(table7count3); /顯示- delay(5);tr0=1;/*修改密碼鍵的確認(rèn)鍵*void key_manage15() n=0;enter1flag=1;if(enter1flag=1) enter1flag=0; count4=0; for(count3=0;count316;count3+) tab_keycount3=0x0f; /用ffff清除已經(jīng)輸入的密碼 write_com(0x01); write_com(0x80); for(count3=0;count316;count3+) write_date(table8count3); delay(100

37、); tr1=1; count1=0;void key_manage16()tab_keyn=15;n+;/*定時器1的50ms,共延時1秒*void time_1() interrupt 3 th1=(65536-50000)/256; tl1=(65536-50000)%256; if(count120) count1+; else /計時到1s tr1=0; count1=0; mimaflag=0; red=1; bell=1; /顯示ffff write_com(0x01); write_com(0x80); for(count3=0;count316;count3+) write_

38、date(table1count3); /顯示password a or b key delay(5); write_com(0x80+0x40); for(count3=0;count316;count3+) write_date(table2count3); /開機(jī)顯示ffff delay(5); /*定時0*void time_0() interrupt 1 th0=(65536-50000)/256; tl0=(65536-50000)%256;if(count44) key_scan();else tr0=0; count4=0;/初始化函數(shù)void init() / uchar i

39、; lcden=0; write_com(0x38); /打開顯示模式設(shè)置 write_com(0x0c); /打開顯示,光標(biāo)等等設(shè)置未零 write_com(0x06); /當(dāng)讀或?qū)懸粋€字符后地址指針加一,且光標(biāo)加一,當(dāng)寫一個字符后整頻顯示左移 write_com(0x01); /清零指令 write_com(0x80); /指針?biāo)肝恢?count0=0; /初始沒有密碼輸入,故為零 enterflag=0; /沒有確認(rèn)鍵按下 mimaflag=0; /密碼正確與否鍵先置零 red=1; /紅燈不亮/*密碼存入eprom中* sda=1; delay(5); scl=1; delay(5)

40、; for(i=0;i8;i+) write_add(i,8); delay2(100); for(i=0;i8;i+) mimai=read_add(i); delay(5); void main() tmod=0x11; /t0,t1工作方式1 th0=(65536-2000)/256; tl0=(65536-2000)%256; /t0初始化2ms th1=(65536-50000)/256; tl1=(65536-50000)%256; /t1初始化50ms tr1=0; et1=1; ea=1; tr0=0; et0=1; rw=0; init(); write_com(0x80);

41、 /指針?biāo)肝恢?for(count3=0;count316;count3+) write_date(table1count3); /第一行顯示input the passpord: delay(5); write_com(0x80+0x40); for(count3=0;count316;count3+) write_date(table2count3); /開機(jī)顯示ffff delay(5); while(1) key_scan(); /調(diào)用鍵盤掃描函數(shù) lcd_display(); /*鍵盤掃描函數(shù)開始*void key_scan()/*掃描第一行*p1=0xfe; temp=p1;temp=temp&0xf0;if(temp!=0xf0)delay(100);if(temp!=0xf0)temp=p1;switch(temp)case 0xee:key_manage1();break;case 0xde:key_manage2();break;case 0xbe:key_manage3();break;case 0x7e:key_manage4();break; while(temp!=0xf0)temp=p1;temp=temp&0xf0; /*掃描第二行*p1=0xfd; temp=p1;temp=

溫馨提示

  • 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

提交評論