版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 目 錄</b></p><p><b> 1 引言1</b></p><p> 2主要元器件介紹2</p><p> 2.1主控芯片AT89S512</p><p> 2.1.1 AT89S51性能簡(jiǎn)介2</p><p>
2、 2.1.2 AT89S51引腳功能說明3</p><p> 2.2 LCD1602顯示器5</p><p> 2.2.1接口信號(hào)說明5</p><p> 2.2.2主要技術(shù)參數(shù)5</p><p> 2.2.3 1602基本操作步驟5</p><p><b> 3系統(tǒng)硬件7</b
3、></p><p><b> 3.1設(shè)計(jì)原理7</b></p><p> 3.2電路總體構(gòu)成7</p><p> 3.3鍵盤輸入部分8</p><p> 3.4 LCD1602顯示8</p><p> 4系統(tǒng)軟件設(shè)計(jì)10</p><p> 4.1
4、主程序模塊10</p><p> 4.2按鍵功能模塊11</p><p> 4.3修改密碼模塊13</p><p> 4.4開鎖模塊14</p><p><b> 參考文獻(xiàn)16</b></p><p><b> 附錄17</b></p>&
5、lt;p><b> 1 引言</b></p><p> 鎖任務(wù)的電子產(chǎn)品。它的種類很多,有簡(jiǎn)易的電路產(chǎn)品,也有基于芯片的性價(jià)比較高的產(chǎn)品?,F(xiàn)在應(yīng)用電子密碼鎖是一種通過密碼輸入來控制電路或是芯片工作,從而控制機(jī)械開關(guān)的閉合,完成開鎖、閉鎖的電子密碼鎖是以芯片為核心,通過編程來實(shí)現(xiàn)的。其性能和安全性已大大超過了機(jī)械鎖。</p><p> 在日常生活和工作中,住
6、宅與部門的安全防范、單位的文件檔案、財(cái)務(wù)報(bào)表以及一些個(gè)人資料的保存多以加鎖的辦法來解決。目前門鎖主要用彈子鎖,其鑰匙容易丟失;保險(xiǎn)箱主要用機(jī)械密碼鎖,其結(jié)構(gòu)較為復(fù)雜,制造精度要求高,成本高,且易出現(xiàn)故障,人們常需攜帶多把鑰匙,使用極不方便,且鑰匙丟失后安全性即大打折扣。針對(duì)這些鎖具給人們帶來的不便若使用機(jī)械式鑰匙開鎖,為滿足人們對(duì)鎖的使用要求,增加其安全性,用密碼代替鑰匙的密碼鎖應(yīng)運(yùn)而生。它的出現(xiàn)為人們的生活帶來了很大的方便,有很廣闊的
7、市場(chǎng)前景。由于電子器件所限,以前開發(fā)的電子密碼鎖,其種類不多,保密性差,最基本的就是只依靠最簡(jiǎn)單的模擬電子開關(guān)來實(shí)現(xiàn)的,制作簡(jiǎn)單但很不安全,在后為多是基于EDA來實(shí)現(xiàn)的,其電路結(jié)構(gòu)復(fù)雜,電子元件繁多,也有使用早先的20引腳的2051系列單片機(jī)來實(shí)現(xiàn)的,但密碼簡(jiǎn)單,易破解。隨著電子元件的進(jìn)一步發(fā)展,電子密碼鎖也出現(xiàn)了很多的種類,功能日益強(qiáng)大,使用更加方便,安全保密性更強(qiáng),由以前的單密碼輸入發(fā)展到現(xiàn)在的,密碼加感應(yīng)元件,實(shí)現(xiàn)了真正的電子加密
8、,用戶只有密碼或電子鑰匙中的一樣,是打不開鎖的,隨著電子元件的發(fā)展及人們對(duì)保密性需求的提高出現(xiàn)了越</p><p> 本設(shè)計(jì)采用單片機(jī)為主控芯片,結(jié)合外圍電路,組成電子密碼鎖,用戶想要打開鎖,必先通過提供的鍵盤輸入正確的密碼才能將鎖打開,密碼輸入錯(cuò)誤有提示,為了提高安全性,當(dāng)密碼輸入錯(cuò)誤三次將報(bào)警。密碼可以由用戶自己修改設(shè)定。修改密碼之前必須再次輸入密碼,以防止誤操作。</p><p>
9、<b> 2 主要元器件介紹</b></p><p> 2.1主控芯片AT89S51</p><p> 2.1.1 AT89S51性能簡(jiǎn)介</p><p> AT89S51具有如下特點(diǎn):40個(gè)引腳,4k Bytes Flash片內(nèi)程序存儲(chǔ)器,128 bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),32個(gè)外部雙向輸入/輸出(I/O)口,5個(gè)中斷
10、優(yōu)先級(jí)2層中斷嵌套中斷,2個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,看門狗(WDT)電路,片內(nèi)時(shí)鐘振蕩器。</p><p> 此外,AT89S51設(shè)計(jì)和配置了振蕩頻率可為0Hz并可通過軟件設(shè)置省電模式。空閑模式下,CPU暫停工作,而RAM定時(shí)計(jì)數(shù)器,串行口,外中斷系統(tǒng)可繼續(xù)工作,掉電模式凍結(jié)振蕩器而保存RAM的數(shù)據(jù),停止芯片其它功能直至外中斷激活或硬件復(fù)位。同時(shí)該芯片還具有PDIP、TQFP和PLCC等三
11、種封裝形式,以適應(yīng)不同產(chǎn)品的需求。</p><p> 圖2-1 AT89S51 芯片引腳圖</p><p><b> 其主要功能特性:</b></p><p> 兼容MCS-51指令系統(tǒng) 4k可反復(fù)擦寫ISP Flash ROM</p><p> 32個(gè)雙向I/O口
12、 4.5-5.5V工作電壓</p><p> 2個(gè)16位可編程定時(shí)/計(jì)數(shù)器 時(shí)鐘頻率0-33MHz</p><p> 全雙工UART串行中斷口線 128x8 bit內(nèi)部RAM</p><p> 2個(gè)外部中斷源 低功耗空閑和省電模式</p><p> 中
13、斷喚醒省電模式 3級(jí)加密位</p><p> 看門狗(WDT)電路 軟件設(shè)置空閑和省電功能</p><p> 靈活的ISP字節(jié)和分頁編程 雙數(shù)據(jù)寄存器指針 </p><p> 可以看出AT89S51提供以下標(biāo)準(zhǔn)功能:4K字節(jié)Flash閃速存儲(chǔ)器,128字節(jié)內(nèi)部RAM,32個(gè)I/O口
14、線,看門狗(WDT),兩個(gè)數(shù)據(jù)指針,兩個(gè)16位定時(shí)器/計(jì)數(shù)器,一個(gè)5向量?jī)杉?jí)中斷結(jié)構(gòu),一個(gè)全雙工串行通信口,片內(nèi)振蕩器及時(shí)鐘。同時(shí), AT89S51可降至0Hz的靜態(tài)邏輯操作,并支持兩種軟件可選的節(jié)電工作模式??臻e方式停止CPU的工作,但允許RAM,定時(shí)/計(jì)數(shù)器,串行通信口及中斷系統(tǒng)繼續(xù)工作。掉電方式保存在RAM中的內(nèi)容,但振蕩器停止工作并禁止其它所有部件工作直接到一個(gè)硬件復(fù)位。</p><p> 2.1.2
15、AT89S51引腳功能說明</p><p><b> Vcc:電源電壓</b></p><p><b> GND:地</b></p><p> P0口:P0口是一組8位漏極開路型雙向I/O口,也即地址/數(shù)據(jù)總線復(fù)用口,作為輸出口用時(shí),每位能驅(qū)動(dòng)8個(gè)TTL邏輯門電路,對(duì)端口寫“1”可作為高阻抗輸入端口。在訪問外部數(shù)據(jù)存
16、儲(chǔ)器或程序存儲(chǔ)器時(shí),這組口線分時(shí)轉(zhuǎn)換地址(低8位)和數(shù)據(jù)總線復(fù)用,在訪問期間激活內(nèi)部上拉電阻。在Flash編程時(shí),P0口接收指令字節(jié),而在程序校驗(yàn)時(shí),輸出指令字節(jié),校驗(yàn)時(shí),要求外接上拉電阻。</p><p> P1口:P1是一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O口,P1的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門電路。對(duì)端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口。作輸入口使用時(shí),因?yàn)閮?nèi)
17、部存在上拉電阻,某個(gè)引腳被外部信號(hào)校驗(yàn)期間,P1接收低8位地址。表2-2為P1口第二功能。</p><p> 圖2-2 P1口第二功能</p><p> P2口:P2是一個(gè)帶有內(nèi)部上拉電阻的8位雙向I/O口,P2的輸出緩沖級(jí)可驅(qū)動(dòng)4個(gè)TTL邏輯門電路。對(duì)端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口,作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸
18、出一個(gè)電流I。在訪問8位地址的外部數(shù)據(jù)存儲(chǔ)器(如執(zhí)行:MOVX @Ri 指令)時(shí),P2口線上的內(nèi)(也即特殊功能寄存器,在整個(gè)訪問期間不改變。Flash 編程或校驗(yàn)時(shí),P2也接收高位地址和其它控制信號(hào)。</p><p> P3口:P3口是一組帶有內(nèi)部上拉電阻的8位雙向I/O口。P3口輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門電路。對(duì)P3口寫入“1”時(shí),它們被內(nèi)部上拉電阻拉高并可作為輸入端口。作輸入端口時(shí),
19、被外部拉低的P3口將用上拉電阻輸出電流I。P3口除了作為一般的I/O口線外,更重要的用途是它的第二功能,P3口的第二功能如下表2-3。</p><p> 圖2-3 P3口的第二功能</p><p> RST:復(fù)位輸入。當(dāng)振蕩工作時(shí),RST引腳出現(xiàn)兩個(gè)機(jī)器周期上高電平將使單片機(jī)復(fù)位。WDT溢出將使該引腳輸出高電平,設(shè)置SFR AUXR 的 DISRTO 位(地址8EH)可打開或關(guān)閉該功
20、能。DISRTO 位缺省為RESET輸出高電平打開狀態(tài)。</p><p> ALE/PROG:當(dāng)訪問外部程序存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器時(shí),ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節(jié)。即使不訪問外部存儲(chǔ)器,ALE仍以時(shí)鐘振蕩頻率的1/6輸出的正脈沖信號(hào),因此它可對(duì)外輸出時(shí)鐘或用于定時(shí)目地,要注意的是:當(dāng)訪問外部數(shù)據(jù)存儲(chǔ)器時(shí)將跳過一個(gè)ALE脈沖。</p><p> PSEN:程序儲(chǔ)存允
21、許(PSEN)輸出是外部程序存儲(chǔ)器的讀選通信號(hào),當(dāng)AT89S51由外部程序存儲(chǔ)器取指令(或數(shù)據(jù))時(shí),每個(gè)機(jī)器周期兩次PSEN有效,即輸出兩個(gè)脈沖。當(dāng)訪問外部數(shù)據(jù)存儲(chǔ)器,高有兩次有效的PSEN信號(hào)。</p><p> EA/VPP:外部訪問允許。欲使CPU公訪問外部程序存儲(chǔ)器(地址0000H-FFFFH),EA端必須保持低電平(接地)。需注意的是:如果加密位LB1被編程,復(fù)位時(shí)內(nèi)部會(huì)鎖存EA端狀態(tài)。如EA端為高電
22、平(接Vcc端),CPU則執(zhí)行內(nèi)部程序存儲(chǔ)器中的指令。Flash存儲(chǔ)器編程時(shí),該引腳加上+12V的編程電壓Vpp。</p><p> XTAL1:振蕩器反相放大器及內(nèi)部時(shí)鐘發(fā)生器的輸入端。</p><p> XTAL2:振蕩器反相放大器的輸出端。</p><p> 2.2 LCD1602顯示器</p><p> 現(xiàn)在的字符型液晶模塊已
23、經(jīng)是單片機(jī)應(yīng)用設(shè)計(jì)中最常用的信息顯示器件了。1602型LCD顯示模塊具有體積小,功耗低,顯示內(nèi)容豐富等特點(diǎn)。1602型LCD可以顯示2行16個(gè)字符,有8位數(shù)據(jù)總線D0-D7和RS,R/W,EN三個(gè)控制端口,工作電壓為5V,并且具有字符對(duì)比度調(diào)節(jié)和背光功能。</p><p> 2.2.1接口信號(hào)說明</p><p> 1602型LCD的接口信號(hào)說明如表2-4所示:</p>
24、<p> 圖2-4 1602型LCD的接口信號(hào)說明</p><p> 2.2.2主要技術(shù)參數(shù)</p><p> 1602型LCD的主要技術(shù)參數(shù)如下表所示:</p><p> 圖2-5 1602型LCD的主要技術(shù)參數(shù)</p><p> 2.2.3 1602基本操作步驟</p><p> 讀狀態(tài):輸
25、入:RS=L,RW=L,E=H 輸出:D0-D7=狀態(tài)字</p><p> 讀數(shù)據(jù):輸入:RS=H,RW=H,E=H 輸出:無</p><p> 寫指令:輸入:RS=L,RW=L,D0-D7=指令碼,E=高脈沖 輸出:D0-D7=數(shù)據(jù)</p><p> 寫數(shù)據(jù):輸入:RS=H,RW=L,D0
26、-D7=數(shù)據(jù), E=高脈沖 輸出:無</p><p><b> 3 系統(tǒng)硬件</b></p><p><b> 3.1 設(shè)計(jì)原理</b></p><p> 本設(shè)計(jì)主要由單片機(jī)、矩陣鍵盤、液晶顯示器等部分組成。其中矩陣鍵盤用于輸入數(shù)字密碼和進(jìn)行各種功能的實(shí)現(xiàn)。由用戶通過連接單片機(jī)的矩陣鍵盤輸入密碼,后經(jīng)過單片機(jī)對(duì)
27、用戶輸入的密碼與自己保存的密碼進(jìn)行對(duì)比,從而判斷密碼是否正確。</p><p> 本系統(tǒng)共有兩部分構(gòu)成,即硬件部分與軟件部分。其中硬件部分由鍵盤輸入部分、顯示部分組成,軟件部分對(duì)應(yīng)的由主程序、初始化程序、LCD顯示程序、鍵盤掃描程序、啟動(dòng)程序、關(guān)閉程序、按鍵功能程序、密碼設(shè)置程序、EEPROM讀寫程序和延時(shí)程序等組成。</p><p><b> 3.2電路總體構(gòu)成</b
28、></p><p> 在確定了選用什么型號(hào)的單片機(jī)后,就要確定在外圍電路,其外圍電路包括電源輸入部分、鍵盤輸入部分、顯示部分組成,根據(jù)實(shí)際情況鍵盤輸入部分選擇4*4矩陣鍵盤,顯示部分選擇字符型液晶顯示LCD1602。其仿真圖如圖3-1所示:</p><p> 圖3-1 電路仿真圖</p><p><b> 3.3鍵盤輸入部分</b>
29、;</p><p> 由于本設(shè)計(jì)所用到的按鍵數(shù)量較多而不適合用獨(dú)立按鍵式鍵盤。采用的是矩陣式按鍵鍵盤,它由行線和列線組成,也稱行列式鍵盤,按鍵位于行列的交叉點(diǎn)上,密碼鎖的密碼由鍵盤輸入完成,與獨(dú)立式按鍵鍵盤相比,要節(jié)省很多I/O口。本設(shè)計(jì)中使用的這個(gè)4*4鍵盤不但能完成密碼的輸入還能作特別功能鍵使用,比如清空顯示功能等。鍵盤的每個(gè)按鍵功能在程序設(shè)計(jì)中設(shè)置。其大體功能(看鍵盤按鍵上的標(biāo)記)及與單片機(jī)引腳接法如圖3
30、-2所示:</p><p> 圖3-2 鍵盤按鍵引腳圖 </p><p><b> 3.4顯示部分</b></p><p> 為了提高密碼鎖的密碼顯示效果能力。本設(shè)計(jì)的顯示部分由液晶顯示器LCD1602取代普通的數(shù)碼管來完成。只有按下鍵盤上的開啟按鍵后,顯示器才處于開啟狀態(tài)。同理只有按下關(guān)閉按鍵后顯示器才處于關(guān)閉狀態(tài)。否則顯示器將一直處
31、于初始狀態(tài),當(dāng)需要對(duì)密碼鎖進(jìn)行開鎖時(shí),按下鍵盤上的開鎖按鍵后利用鍵盤上的數(shù)字鍵0-9輸入密碼,每按下一個(gè)數(shù)字鍵后在顯示器上顯示一個(gè)*,輸入多少位就顯示多少個(gè)*。當(dāng)密碼輸入完成時(shí),按下確認(rèn)鍵,如果輸入的密碼正確的話, LCD子顯示“RIGHT”,單片機(jī)其中P2.0引腳會(huì)輸出低電平,使三極管T2導(dǎo)通,電磁鐵吸合,電子密碼鎖被打開,如果密碼不正確,LCD顯示屏?xí)@示“ERROR”,P2.0輸出的是高電平,電子密碼鎖不能被打開。通過LCD顯示屏
32、,可以清楚的判斷出鎖所處的狀態(tài)。其顯示部分引腳接口如圖3-3所示:</p><p> 圖3-3 1602顯示屏引腳圖</p><p><b> 4 系統(tǒng)軟件設(shè)計(jì)</b></p><p> 本系統(tǒng)軟件設(shè)計(jì)由主程序模塊、初始化模塊、LCD顯示模塊、鍵盤掃描模塊、鍵功能程序、密碼設(shè)置程序等組成。</p><p><
33、;b> 4.1主程序模塊</b></p><p> 主程序流程圖如圖4-1所示:</p><p> 圖4-1 主程序流程圖</p><p> 主程序代碼如下所示:</p><p><b> main()</b></p><p><b> {</b&g
34、t;</p><p> L1602_init();</p><p><b> while(1)</b></p><p><b> { </b></p><p> keydown();</p><p><b> }</b></p>
35、<p><b> }</b></p><p><b> 4.2按鍵功能模塊</b></p><p> 按鍵功能流程圖如圖4-2所示:</p><p> 圖4-2 按鍵功能流程圖</p><p> 按鍵功能程序代碼如下所示:</p><p> if(k
36、ey==11)</p><p><b> {</b></p><p> L1602_string(1,1,"input old code ");</p><p> L1602_string(2,1," ");</p><p><b>
37、 i=0;j=1;</b></p><p><b> flag2=1;</b></p><p><b> }</b></p><p> if(key==12)</p><p><b> {</b></p><p> L1602_s
38、tring(1,1,"input your code ") ;</p><p> L1602_string(2,1," ");</p><p><b> i=0;j=1;</b></p><p><b> }</b></p><
39、p> if(key==13)</p><p><b> {</b></p><p> L1602_string(1,1,"show password ") ;</p><p> for(k=0;k<6;k++)</p><p> {L1602_char(2,k+1,init_
40、val[k]+48);}</p><p> delayms(255);delayms(255); delayms(255);delayms(255);</p><p> L1602_string(2,1," ");</p><p><b> }</b></p><p&g
41、t; if(key==14)</p><p><b> { </b></p><p> if(flag==1) </p><p><b> {</b></p><p><b> if(m!=0)</b></p><p> {L160
42、2_char(2,n-1,0);delayms(255);m--;n--;}</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> if(i!=0)</b>
43、</p><p> {L1602_char(2,j-1,0);delayms(255);i--;j--;}</p><p><b> }</b></p><p><b> }</b></p><p> if(key==15)</p><p><b> {&
44、lt;/b></p><p> L1602_string(1,1,"already reset ");</p><p> L1602_string(2,1," ");</p><p> for(i=0;i<6;i++){init_val[i]=1; show_val[i]=
45、0;} </p><p> i=0,j=1,m=0,n=1,flag=0,flag2=0;</p><p><b> }</b></p><p><b> }</b></p><p><b> 4.3修改密碼模塊</b></p><p>
46、 修改密碼程序流程圖如圖4-3所示。</p><p> 圖4-3 密碼設(shè)置流程圖</p><p> 修改密碼程序代碼如下所示:</p><p> if(key==10)</p><p><b> { </b></p><p> if(check_input_pw()==1)<
47、;/p><p><b> { </b></p><p> L1602_string(1,1," input error ");</p><p> L1602_string(2,1," ");</p><p><b> i=0;j=1
48、;</b></p><p> delayms(255);</p><p><b> times++;</b></p><p> if (times==3) </p><p><b> {</b></p><p><b> P3=0xfe;<
49、;/b></p><p> L1602_string(1,1,"system clocked ");</p><p> while(1){};</p><p><b> }</b></p><p> L1602_string(1,1,"input code again&quo
50、t;);</p><p> L1602_string(2,1," ");</p><p><b> }</b></p><p><b> else </b></p><p><b> {</b></p>&
51、lt;p> L1602_string(1,1," door open ");</p><p> L1602_string(2,1," ");</p><p><b> P3=0X7F;</b></p><p> delayms(255);delayms
52、(255);</p><p><b> P3=0XFF;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 4.4開鎖模塊</b></p><p> 開鎖程序流
53、程圖如圖4-4所示:</p><p> 圖4-4 開鎖流程圖</p><p> 開鎖程序代碼如下所示:</p><p> if(check_input_pw()==1)</p><p> { L1602_string(1,1," input error ");</p><p>
54、; L1602_string(2,1," ");</p><p><b> i=0;j=1;</b></p><p> delayms(255);</p><p><b> times++;</b></p><p> if (times==
55、3) </p><p> { P3=0xfe;</p><p> L1602_string(1,1,"system clocked ");</p><p> while(1){};</p><p><b> }</b></p><p> L1602_string
56、(1,1,"input code again ");</p><p> L1602_string(2,1," ");</p><p><b> }</b></p><p><b> else </b></p><p>
57、 {L1602_string(1,1," door open ");</p><p> L1602_string(2,1," ");</p><p><b> P3=0X7F;</b></p><p> delayms(255);delayms(255);
58、</p><p><b> P3=0XFF;</b></p><p><b> }</b></p><p><b> 參考文獻(xiàn)</b></p><p> [1] 石文軒,宋薇.基于單片機(jī)MCS-51的智能密碼鎖設(shè)計(jì)[M].武漢工程職業(yè)技術(shù)學(xué)院學(xué)報(bào),2004,(01)&
59、lt;/p><p> [2] 袁新燕。淺談單片機(jī)應(yīng)用系統(tǒng)的調(diào)試[J]。自動(dòng)化與儀器儀表,2000,(03)</p><p> [3] 童詩白,華成英,模擬電子技術(shù)基礎(chǔ)[M],北京:高等教育出版社,2000</p><p> [4] 閻石主.數(shù)字電子技術(shù)基礎(chǔ)[M],北京:高等教育出版社,1998</p><p> [5] 吳春國(guó),李文石。單
60、片機(jī)控制電子鎖技術(shù)剖析[S]。東北林業(yè)大學(xué)學(xué)報(bào),2002,(05)</p><p> [6] 李景宏,馬學(xué)文。電子技術(shù)實(shí)驗(yàn)教程[M]。沈陽:東北大學(xué)出版社,2004</p><p> [7] 賈正松。單片機(jī)系統(tǒng)復(fù)位電路設(shè)計(jì)[J]??萍假Y訊,2007,(36)</p><p><b> 附錄</b></p><p>
61、 #include <reg52.h></p><p> #include <intrins.h></p><p> #include <string.h></p><p> #define uchar unsigned char</p><p> #define uint unsigned i
62、nt</p><p> static uchar show_val[6];</p><p> static uchar init_val[6]={1,1,1,1,1,1}; </p><p> uchar key,times=0;</p><p> unsigned char code key_code[]={0
63、Xee,0Xed,0Xeb,0Xe7,0Xde,0Xdd,0Xdb,0Xd7,0Xbe,</p><p> 0Xbd,0Xbb,0Xb7,0x7e,0x7d,0x7b,0x77 };</p><p> //以下是1602程序</p><p> sbit E=P2^2;//1602使能引腳</p><p> sbit RW=P2^1
64、;//1602讀寫引腳</p><p> sbit RS=P2^0;//1602數(shù)據(jù)/命令選擇引腳</p><p> void delay()</p><p><b> {</b></p><p><b> int i,j;</b></p><p> fo
65、r(i=0; i<=100; i++)</p><p> for(j=0; j<=20; j++)</p><p><b> ;</b></p><p><b> }</b></p><p> void enable(uchar del)</p><p>
66、<b> {</b></p><p><b> P0 = del;</b></p><p><b> RS = 0;</b></p><p><b> RW = 0;</b></p><p><b> E = 0;</b>&
67、lt;/p><p><b> delay();</b></p><p><b> E = 1;</b></p><p><b> delay();</b></p><p><b> }</b></p><p> void wr
68、ite(uchar del)</p><p><b> {</b></p><p><b> P0 = del;</b></p><p><b> RS = 1;</b></p><p><b> RW = 0;</b></p>&l
69、t;p><b> E = 0;</b></p><p><b> delay();</b></p><p><b> E = 1;</b></p><p><b> delay();</b></p><p><b> }</
70、b></p><p> void L1602_init(void)</p><p><b> {</b></p><p> enable(0x01);</p><p> enable(0x38);</p><p> enable(0x0c);</p><p>
71、; enable(0x06);</p><p> enable(0xd0);</p><p><b> }</b></p><p> void L1602_char(uchar hang,uchar lie,char sign)</p><p><b> {</b></p>
72、<p><b> uchar a;</b></p><p> if(hang == 1) a = 0x80;</p><p> if(hang == 2) a = 0xc0;</p><p> a = a + lie - 1;</p><p> enable(a);</p><p&
73、gt; write(sign);</p><p><b> }</b></p><p> void L1602_string(uchar hang,uchar lie,uchar *p)</p><p><b> {</b></p><p><b> uchar a;</b
74、></p><p> if(hang == 1) a = 0x80;</p><p> if(hang == 2) a = 0xc0;</p><p> a = a + lie - 1;</p><p> enable(a);</p><p><b> while(1)</b>&l
75、t;/p><p><b> {</b></p><p> if(*p == '\0') break;</p><p> write(*p);</p><p><b> p++;</b></p><p><b> }</b></
76、p><p><b> }</b></p><p> //以上是1602顯示程序</p><p> void delayms(uint ms) </p><p><b> {</b></p><p><b> uchar t;</b></p&g
77、t;<p> while(ms--)</p><p><b> { </b></p><p> for(t = 0; t < 120; t++);</p><p><b> }</b></p><p><b> }</b></p>&
78、lt;p> uint check_input_pw()</p><p><b> { </b></p><p><b> uint i,k;</b></p><p><b> k=0;</b></p><p> for(i=0;i<6;i++)</
79、p><p><b> { </b></p><p> if (show_val[i]!=init_val[i]) k=1;</p><p><b> }</b></p><p><b> return k;</b></p><p><b>
80、 }</b></p><p> uchar keyscan()</p><p><b> {</b></p><p> uchar scan1,scan2,keycode,j;</p><p><b> P1=0xf0;</b></p><p>&l
81、t;b> scan1=P1;</b></p><p> if((scan1&0xf0)!=0xf0) //判鍵是否按下</p><p><b> {</b></p><p> delayms(30); //延時(shí)30ms</p><p><b> scan
82、1=P1;</b></p><p> if((scan1&0xf0)!=0xf0) //二次判鍵是否按下</p><p><b> {</b></p><p><b> P1=0x0f;</b></p><p><b> scan2=P1;</b>&
83、lt;/p><p> keycode=scan1|scan2;//組合成鍵編碼</p><p> for(j=0;j<=15;j++)</p><p><b> {</b></p><p> if(keycode== key_code[j]) </p><p><b> {
84、</b></p><p><b> key=j; </b></p><p> return key;</p><p> } </p><p><b> } </b></p><p><b> }</b>&l
85、t;/p><p><b> }</b></p><p> else P1=0xff;</p><p><b> }</b></p><p> void keydown()</p><p><b> { </b></p><
86、;p> static uchar i=0,j=1,m=0,n=1,flag=0,flag2=0;</p><p><b> uchar k;</b></p><p><b> P1=0xf0;</b></p><p> if((P1&0xf0)!=0xf0)</p><p>&
87、lt;b> {</b></p><p> keyscan();</p><p> if(key<10)</p><p><b> {</b></p><p> if(flag==1)</p><p><b> {</b></p>
88、;<p> init_val[m]=key; </p><p> L1602_char(2,n,key+48);</p><p> delayms(255); </p><p><b> m++;</b></p><p><b> n++;</b>&l
89、t;/p><p><b> if(m==6) </b></p><p><b> {</b></p><p> m=0;n=1;flag=0;</p><p> L1602_string(1,1,"get new code ");</p><p>
90、; L1602_string(2,1," ");</p><p><b> } </b></p><p><b> } </b></p><p><b> else</b></p><p><b> {&
91、lt;/b></p><p> L1602_string(1,1,"inputting code ");</p><p> L1602_string(2,j,"*");</p><p> show_val[i]=key;</p><p><b> i++;</b>&
92、lt;/p><p><b> j++;</b></p><p><b> if(i==6) </b></p><p><b> {</b></p><p><b> i=0;j=1;</b></p><p> if(flag2
93、==1) </p><p><b> {</b></p><p> if(check_input_pw()==0)</p><p><b> {</b></p><p> L1602_string(1,1," code right ");</p>&
94、lt;p> delayms(255);</p><p> flag=1;flag2=0;</p><p> L1602_string(1,1,"input new code ");</p><p> L1602_string(2,1," ");</p><p&
95、gt;<b> }</b></p><p><b> else</b></p><p><b> { </b></p><p> L1602_string(1,1," code wrong ");</p><p> L1602_string
96、(2,1,"input code again");</p><p><b> } </b></p><p><b> }</b></p><p><b> } </b></p><p><b> } </b></p&
97、gt;<p><b> }</b></p><p> if(key==10)</p><p><b> { </b></p><p> if(check_input_pw()==1)</p><p><b> { </b></p><
98、;p> L1602_string(1,1," input error ");</p><p> L1602_string(2,1," ");</p><p><b> i=0;j=1;</b></p><p> delayms(255);</p>
99、;<p><b> times++;</b></p><p> if (times==3) </p><p><b> {</b></p><p><b> P3=0xfe;</b></p><p> L1602_string(1,1,"sys
100、tem clocked ");</p><p> while(1){};</p><p><b> }</b></p><p> L1602_string(1,1,"input code again");</p><p> L1602_string(2,1,"
101、 ");</p><p><b> }</b></p><p><b> else </b></p><p><b> {</b></p><p> L1602_string(1,1," door open ")
102、;</p><p> L1602_string(2,1," ");</p><p><b> P3=0X7F;</b></p><p> delayms(255);delayms(255);</p><p><b> P3=0XFF;</b>
103、</p><p><b> }</b></p><p><b> }</b></p><p> if(key==11)</p><p><b> {</b></p><p> L1602_string(1,1,"input old
104、 code ");</p><p> L1602_string(2,1," ");</p><p><b> i=0;j=1;</b></p><p><b> flag2=1;</b></p><p><b> }<
105、;/b></p><p> if(key==12)</p><p><b> {</b></p><p> L1602_string(1,1,"input your code ") ;</p><p> L1602_string(2,1," &qu
106、ot;);</p><p><b> i=0;j=1;</b></p><p><b> }</b></p><p> if(key==13)</p><p><b> {</b></p><p> L1602_string(1,1,"
107、;show password ") ;</p><p> for(k=0;k<6;k++)</p><p> {L1602_char(2,k+1,init_val[k]+48);}</p><p> delayms(255);delayms(255); delayms(255);delayms(255);</p><p&
108、gt; L1602_string(2,1," ");</p><p><b> }</b></p><p> if(key==14)</p><p><b> { </b></p><p> if(flag==1) </p&
109、gt;<p><b> {</b></p><p><b> if(m!=0)</b></p><p> {L1602_char(2,n-1,0);delayms(255);m--;n--;}</p><p><b> }</b></p><p><
110、b> else</b></p><p><b> {</b></p><p><b> if(i!=0)</b></p><p> {L1602_char(2,j-1,0);delayms(255);i--;j--;}</p><p><b> }</b&
111、gt;</p><p><b> }</b></p><p> if(key==15)</p><p><b> {</b></p><p> L1602_string(1,1,"already reset ");</p><p> L160
112、2_string(2,1," ");</p><p> for(i=0;i<6;i++){init_val[i]=1; show_val[i]=0;} </p><p> i=0,j=1,m=0,n=1,flag=0,flag2=0;</p><p><b> }</b>&l
113、t;/p><p><b> }</b></p><p><b> }</b></p><p><b> main()</b></p><p><b> {</b></p><p> L1602_init();</p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于單片機(jī)密碼鎖課程設(shè)計(jì)
- 單片機(jī)密碼鎖畢業(yè)設(shè)計(jì)課程設(shè)計(jì)
- 單片機(jī)密碼鎖畢業(yè)設(shè)計(jì)課程設(shè)計(jì)
- 基于51單片機(jī)密碼鎖課程設(shè)計(jì)報(bào)告
- 基于51單片機(jī)密碼鎖課程設(shè)計(jì)報(bào)告
- 畢業(yè)設(shè)計(jì)基于51單片機(jī)密碼鎖課程設(shè)計(jì)
- 單片機(jī)密碼鎖畢業(yè)設(shè)計(jì)
- 單片機(jī)-密碼鎖課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-密碼鎖
- 單片機(jī)課程設(shè)計(jì)--密碼鎖
- 單片機(jī)課程設(shè)計(jì)-密碼鎖
- 單片機(jī)課程設(shè)計(jì)---密碼鎖
- 密碼鎖單片機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-密碼鎖
- 單片機(jī)密碼鎖設(shè)計(jì)畢業(yè)論文
- 單片機(jī)密碼鎖畢業(yè)論文
- 課程設(shè)計(jì)----單片機(jī)電子密碼鎖
- 單片機(jī)課程設(shè)計(jì)--電子密碼鎖
- 單片機(jī)電子密碼鎖課程設(shè)計(jì)
- 單片機(jī)密碼鎖畢業(yè)論文
評(píng)論
0/150
提交評(píng)論