智能密碼鎖設(shè)計(jì)_第1頁(yè)
智能密碼鎖設(shè)計(jì)_第2頁(yè)
智能密碼鎖設(shè)計(jì)_第3頁(yè)
智能密碼鎖設(shè)計(jì)_第4頁(yè)
智能密碼鎖設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩42頁(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、本設(shè)計(jì)采用at89s52單片機(jī)為主控芯片,結(jié)合外圍電路,通過軟件程序組成電子密碼鎖系統(tǒng),能夠?qū)崿F(xiàn):1 正確輸入密碼前提下,開鎖提示;2 錯(cuò)誤輸入密碼情況下,蜂鳴器報(bào)警;3 密碼可以根據(jù)用戶需要更改。 第二章 系統(tǒng)方案論證2.1 主控部分的選擇選用單片機(jī)作為系統(tǒng)的核心部件,實(shí)現(xiàn)控制與處理的功能。單片機(jī)具有資源豐富、速度快、編程容易等優(yōu)點(diǎn)。利用單片機(jī)內(nèi)部的隨機(jī)存儲(chǔ)器(ram)和只讀存儲(chǔ)器(rom)及其引腳資源,外接液晶顯示(lcd),鍵盤輸入等實(shí)現(xiàn)數(shù)據(jù)的處理傳輸和顯示功能,基本上能實(shí)現(xiàn)設(shè)計(jì)指標(biāo),因此綜合考慮,本系統(tǒng)采用方案二。方案二:矩陣鍵盤輸入識(shí)別 由各按鍵組成的矩陣鍵盤每條行線和列線都對(duì)應(yīng)一條

2、i/o口線,鍵位設(shè)在行線和列線的交叉點(diǎn),當(dāng)一個(gè)鍵按下就會(huì)有某一條行線與某一條列線接觸,只要確定接觸的是哪兩條線,即哪兩個(gè)i/o口線,就可以確定哪一個(gè)鍵被觸動(dòng)。 行線設(shè)計(jì)成上拉口線,初始時(shí)被置高電位,列線懸空,初始置低。通過不斷讀行線口線,或者中斷方式觸發(fā)鍵位掃描。當(dāng)發(fā)現(xiàn)有鍵按下,將列線逐一置低,其他列線置高,讀行線口線。當(dāng)某條列線置低時(shí),某條行線也被拉低,則確定這兩條線的交點(diǎn)處的按鈕被按下。每個(gè)按鍵都可通過程序賦予功能,從而完成密碼識(shí)別8。本方案簡(jiǎn)單易行,故采用。第三章 系統(tǒng)總體設(shè)計(jì)和主要芯片介紹3.1 系統(tǒng)總體設(shè)計(jì)本設(shè)計(jì)主要由單片機(jī)、矩陣鍵盤、液晶顯示器和密碼存儲(chǔ)等部分組成。其中矩陣鍵盤用于

3、輸入數(shù)字密碼和進(jìn)行各種功能的實(shí)現(xiàn)。由用戶通過連接單片機(jī)的矩陣鍵盤輸入密碼,后經(jīng)過單片機(jī)對(duì)用戶輸入的密碼與自己保存的密碼進(jìn)行對(duì)比,從而判斷密碼是否正確,然后控制引腳的高低電平傳到開鎖電路或者報(bào)警電路控制開鎖還是報(bào)警,實(shí)際使用時(shí)只要將單片機(jī)的負(fù)載由繼電器換成電子密碼鎖的電磁鐵吸合線圈即可。系統(tǒng)整體框圖如圖3-1所示。顯示模塊鍵盤輸入模塊 at89s52報(bào)警電路復(fù)位電路開鎖電路密碼存儲(chǔ)模塊 圖3-1 系統(tǒng)結(jié)構(gòu)框圖各模塊功能如下:1鍵盤輸入模塊:分為密碼輸入按鍵與幾個(gè)功能按鍵,用于完成密碼鎖輸入功能。2顯示模塊:用于完成對(duì)系統(tǒng)狀態(tài)顯示及操作提示功能。3復(fù)位電路:完成系統(tǒng)的復(fù)位。4報(bào)警電路:用于完成輸錯(cuò)

4、密碼時(shí)候的警報(bào)功能。5密碼存儲(chǔ)模塊:用于完成掉電存儲(chǔ)功能,使修改的密碼斷電后仍能保存。6開鎖電路:應(yīng)用繼電器及發(fā)光二極管模擬開鎖,完成開鎖及開鎖提示。3.2 主要芯片介紹3.2.1 at89s52 at89s52單片機(jī)是一個(gè)低功耗,高性能cmos 8位單片機(jī),片內(nèi)含8k bytes isp(in-system programmable)的可反復(fù)擦寫1000次的flash只讀程序存儲(chǔ)器,器件采用atmel公司的高密度、非易失性存儲(chǔ)技術(shù)制造,兼容標(biāo)準(zhǔn)mcs-51指令系統(tǒng)及80c51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和isp flash存儲(chǔ)單元,功能強(qiáng)大的微型計(jì)算機(jī)的at89s52可為許多嵌入

5、式控制應(yīng)用系統(tǒng)提供高性價(jià)比的解決方案10。at89s52具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)flash,256字節(jié)ram,32 位i/o 口線,看門狗定時(shí)器,2個(gè)數(shù)據(jù)指針,三個(gè)16位定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時(shí)鐘電路。另外,at89s52可降至0hz靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,cpu停止工作,允許ram、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,ram內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。at89s52的管腳分布如圖3-2所示。 圖3-2 at89s52芯片管腳p0口為一個(gè)8位漏級(jí)開路雙向i

6、/o口,每腳可吸收8ttl門電流。當(dāng)p1口的管腳第一次寫1時(shí),被定義為高阻輸入。p0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的第八位。p1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向i/o口,p1口緩沖器能接收輸出4ttl門電流。p1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,p1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。p2口為一個(gè)內(nèi)部上拉電阻的8位雙向i/o口,p2口緩沖器可接收,輸出4個(gè)ttl門電流,當(dāng)p2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),p2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。p2口當(dāng)用于外部程序存儲(chǔ)器或16

7、位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),p2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫時(shí),p2口輸出其特殊功能寄存器的內(nèi)容。p3口作為at89s52的一些特殊功能管腳備選功能,p3.0 rxd(串行輸入口)p3.1 txd(串行輸出口)p3.2 /int0(外部中斷0)p3.3 /int1(外部中斷1)p3.4 t0(記時(shí)器0外部輸入)p3.5 t1(記時(shí)器1外部輸入)p3.6 /wr(外部數(shù)據(jù)存儲(chǔ)器寫選通)p3.7 /rd(外部數(shù)據(jù)存儲(chǔ)器讀選通)at89s52主要特性如表3-1所示。表3-1 at89s52主要特性兼容mcs-51指令系統(tǒng)8k可反復(fù)

8、擦寫(1000次)isp flash rom32個(gè)雙向i/o口4.5-5.5v工作電壓3個(gè)16位可編程定時(shí)/計(jì)數(shù)器時(shí)鐘頻率0-33mhz全雙工uart串行中斷口線256x8bit內(nèi)部ram2個(gè)外部中斷源低功耗空閑和省電模式中斷喚醒省電模式3級(jí)加密位看門狗(wdt)電路軟件設(shè)置空閑和省電功能靈活的isp字節(jié)和分頁(yè)編程雙數(shù)據(jù)寄存器指針3.2.2 存儲(chǔ)芯片at24c02 at24c02是美國(guó)atmel公司的低功耗cmos型eprom,內(nèi)含2568位存儲(chǔ)空間,具有工作電壓寬(2.55.5 v)、擦寫次數(shù)多(大于10000次)、寫入速度快(小于10 ms)、抗干擾能力強(qiáng)、數(shù)據(jù)不易丟失、體積小等特點(diǎn)。而且

9、他是采用了ic總線式進(jìn)行數(shù)據(jù)讀寫的串行器件,占用很少的資源和i/o線,并且支持在線編程,進(jìn)行數(shù)據(jù)實(shí)時(shí)的存取十分方便。at24c02中帶有的片內(nèi)地址寄存器。每寫入或讀出一個(gè)數(shù)據(jù)字節(jié)后,該地址寄存器自動(dòng)加1,以實(shí)現(xiàn)對(duì)下一個(gè)存儲(chǔ)單元的讀寫。所有字節(jié)均以單一操作方式讀取。為降低總的寫入時(shí)間,一次操作可寫入多達(dá)8個(gè)字節(jié)的數(shù)據(jù)。i2c總線是一種用于ic器件之間連接的二線制總線。他通過sda(串行數(shù)據(jù)線)及scl(串行時(shí)鐘線)兩根線在連到總線上的器件之間傳送信息,并根據(jù)地址識(shí)別每個(gè)器件。 at24c02正是運(yùn)用了ic規(guī)程,使用主/從機(jī)雙向通信,主機(jī)(通常為單片機(jī))和從機(jī)(at24c02)均可工作于接收器和發(fā)

10、送器狀態(tài)。主機(jī)產(chǎn)生串行時(shí)鐘信號(hào)(通過scl引腳)并發(fā)出控制字,控制總線的傳送方向,并產(chǎn)生開始和停止的條件。無論是主機(jī)還是從機(jī),接收到一個(gè)字節(jié)后必須發(fā)出一個(gè)確認(rèn)信號(hào)ack。at24c02的控制字由8位二進(jìn)制數(shù)構(gòu)成,在開始信號(hào)發(fā)出以后,主機(jī)便會(huì)發(fā)出控制字,以選擇從機(jī)并控制總線傳送的方向。管腳描述:scl 為串行時(shí)鐘:串行時(shí)鐘輸入管腳用于產(chǎn)生器件所有數(shù)據(jù)發(fā)送或接收的時(shí)鐘這是一個(gè)輸入管腳。sdl 為串行數(shù)據(jù)/地址:雙向串行數(shù)據(jù)/地址管腳用于器件所有數(shù)據(jù)的發(fā)送或接收sdl,是一個(gè)開漏輸出管腳可與其它開漏輸出或集電極開路輸出進(jìn)行線或。a0、a1、a2 為器件地址輸入端:當(dāng)使用24c02 時(shí)最大可級(jí)聯(lián)8個(gè)器

11、件,如果只有一個(gè)24c02被總線尋址,這三個(gè)地址輸入腳a0、a1、a2可懸空或連接到vss。wp為寫保護(hù):如果wp 管腳連接到vcc 所有的內(nèi)容都被寫保護(hù)只能讀當(dāng)wp, 管腳連接到vss 或懸空,允許器件進(jìn)行正常的讀/寫操作12。管腳圖如圖3-3所示。 圖3-3 at24c02引腳圖3.2.2 lcd1602顯示器 現(xiàn)在的字符型液晶模塊已經(jīng)是單片機(jī)應(yīng)用設(shè)計(jì)中最常用的信息顯示器件了。1602型lcd顯示模塊具有體積小,功耗低,顯示內(nèi)容豐富等特點(diǎn)。1602型lcd可以顯示2行16個(gè)字符,有8位數(shù)據(jù)總線d0d7和rs,r/w,en三個(gè)控制端口,工作電壓為5v,并且具有字符對(duì)比度調(diào)節(jié)和背光功能。接口信

12、號(hào)說明:1602型lcd的接口信號(hào)說明如表3-2所示。表3-2 1602型lcd的接口信號(hào)說明第1腳vss 電源地第9腳d2雙向數(shù)據(jù)線第2腳vdd +5v電源第10腳d3雙向數(shù)據(jù)線第3腳vee 液晶顯示偏壓信號(hào)第11腳d4雙向數(shù)據(jù)線第4腳rs 數(shù)據(jù)/命令選擇端第12腳d5雙向數(shù)據(jù)線第5腳r/ w 讀/寫 選擇端第13腳d6雙向數(shù)據(jù)線第6腳e 使能端第14腳d7雙向數(shù)據(jù)線第7腳d0雙向數(shù)據(jù)線第15腳bla 背光源正極第8腳d1 雙向數(shù)據(jù)線第16腳blk 背光源負(fù)極主要技術(shù)參數(shù):1602型lcd的主要技術(shù)參數(shù)如表3-3所示。 表3-3 1602型lcd的主要技術(shù)參數(shù)顯示容量162個(gè)字符芯片工作電壓

13、4.55.5v工作電流2.0ma(5.0v)模塊最佳工作電壓5.0v字符尺寸2.954.35(wxh)mm基本操作程序:讀狀態(tài):令rs=l,rw=l, e=h 輸出:d0d7=狀態(tài)字讀數(shù)據(jù):令rs=h,rw=h, e=h 輸出:無寫指令:令rs=l,rw=l,d0d7=指令碼,e=高脈沖 輸出:d0d7=數(shù)據(jù)寫數(shù)據(jù):令rs=h,rw=l, d0d7=數(shù)據(jù), e=高脈沖 輸出:無 第四章 硬件設(shè)計(jì)本系統(tǒng)外圍電路包括鍵盤輸入部分、密碼存儲(chǔ)部分、復(fù)位部分、顯示部分、報(bào)警部分、開鎖部分組成,根據(jù)實(shí)際情況鍵盤輸入部分選擇44矩陣鍵盤,顯示部分選擇字符型液晶顯示lcd1602,密碼存儲(chǔ)部分選用at24c0

14、2芯片來完成。其原理圖如圖4-1所示。圖4-1 電路原理圖4.1 鍵盤輸入模塊由于本設(shè)計(jì)所用到的按鍵數(shù)量較多而不適合用獨(dú)立按鍵式鍵盤。采用的是矩陣式按鍵鍵盤,它由行和列組成,也稱行列式鍵盤,按鍵位于行列的交叉點(diǎn)上,密碼鎖的密碼由鍵盤輸入完成,與獨(dú)立式按鍵鍵盤相比,要節(jié)省很多i/o口。本設(shè)計(jì)中使用的這個(gè)44鍵盤不但能完成密碼的輸入還能作特別功能鍵使用。鍵盤的每個(gè)按鍵功能在程序設(shè)計(jì)中設(shè)置。它與單片機(jī)的連接如圖4-2所示。圖4-2 鍵盤輸入模塊4.2 密碼存儲(chǔ)模塊圖4-3所示at24c02的1、2、3腳是三條地址線,用于確定芯片的硬件地址。在at89s51試驗(yàn)開發(fā)板上它們都接地,第5腳和第8腳分別為

15、正、負(fù)電源。第8腳sdl為串行數(shù)據(jù)輸入/輸出,數(shù)據(jù)通過這條雙向ic總線串行傳送,在at89s52試驗(yàn)開發(fā)板上和單片機(jī)的p3.6連接。第6腳scl為串行時(shí)鐘輸入線,在at89s52試驗(yàn)開發(fā)板上和單片機(jī)的p3.7連接。sdl和scl都需要和正電源間各接一個(gè)5.1k的電阻上拉。第6腳接p3.5。at24c02中帶有片內(nèi)地址寄存器。每寫入或讀出一個(gè)數(shù)據(jù)字節(jié)后,該地址寄存器自動(dòng)加1,以實(shí)現(xiàn)對(duì)下一個(gè)存儲(chǔ)單元的讀寫。所有字節(jié)均以單一操作方式讀取。為降低總的寫入時(shí)間,一次操作可寫入多達(dá)8個(gè)字節(jié)的數(shù)據(jù)。圖4-3 密碼存儲(chǔ)電路4.3 復(fù)位部分單片機(jī)復(fù)位是使cpu和系統(tǒng)中的其他功能部件都處在一個(gè)確定的初始狀態(tài),并從

16、這個(gè)狀態(tài)開始工作。該電路在最簡(jiǎn)單的復(fù)位電路下增加了手動(dòng)復(fù)位按鍵,在接通電源瞬間,電容c1上的電壓很小,復(fù)位下拉電阻上的電壓接近電源電壓,即rst為高電平,在電容充電的過程中rst端電壓逐漸下降,當(dāng)rst端的電壓小于某一數(shù)值后,cpu脫離復(fù)位狀態(tài),由于電容c1足夠大,可以保證rst高電平有效時(shí)間大于24個(gè)振蕩周期,cpu能夠可靠復(fù)位。增加手動(dòng)復(fù)位按鍵是為了避免死機(jī)時(shí)無法可靠復(fù)位。當(dāng)復(fù)位按鍵按下后電容c1通過r5放電。當(dāng)電容c1放電結(jié)束后,rst端的電位由r5與r6分壓比決定。由于r5 提示輸入密碼gotoxy(0,0);count=0;print(code: );count1=1;count2=

17、1;count6=1;sk15=0; sk14=0;m=0;cp0=1;if(count!=0)&(count1=1) /lcd上顯示* if(count=1)gotoxy(0,0); print(code:* );if(count=2)gotoxy(0,0); print(code:* ); if(count=3)gotoxy(0,0); print(code:* ); if(count=4)gotoxy(0,0); print(code:* );if(count=5)gotoxy(0,0); print(code:* ); if(count=6)gotoxy(0,0); print(cod

18、e:* ); if(count6)gotoxy(0,0); print(code:* );count1=0;if(sk14=1)&(count6=1) /按下確認(rèn),剛進(jìn)入較驗(yàn)/密碼正確if(password0=cq0)&(password1=cq1)&(password2=cq2)&(password3=cq3)&(password4=cq4)&(password5=cq5)&(count=6 )gotoxy(0,0); print(door open! );sk14=0; count=0;count2=0; m=0; count4=1;delayms(1000); count6=1; p2_

19、0=0;delayms(500);p2_0=1;/密碼錯(cuò)誤 lcd_initial(); cp0=0;else gotoxy(0,0); print(code wrong! );delayms(1000);sk14=0; count=0; count2=0; count6=0; m=0; p3_6=0;delayms(100);delayms(3000);p3_6=1; lcd_initial(); cp0=0; /密碼錯(cuò)誤5.2.2 按鍵掃描子程序 void check_key(void)unsigned int row,col,tmp1,tmp2;tmp1 = 0x10; /tmp1用來設(shè)

20、置p1口的輸出,取反后使p1.4p1.7中有一個(gè)為0for(row=0;row4;row+) / 行檢測(cè)p1 = 0x0f; / 先將p1.0p1.3置高p1 =tmp1; / 使p1.4p1.7中有一個(gè)為0tmp1*=2; / tmp1左移一位if (p1 & 0x0f) 0x0f) / 檢測(cè)p1.0p1.3中是否有一位為0,只要有,則說明此行有鍵按下,進(jìn)入列檢測(cè)delayms(30);if (p1 & 0x0f) 0x0f) / 檢測(cè)p1.0p1.3中是否有一位為0,只要有,則說明此行有鍵按下,進(jìn)入列檢測(cè) tmp2 = 0x01; / tmp2用于檢測(cè)出哪一列為0for(col =0;co

21、l按鍵盤認(rèn)鍵,較驗(yàn)舊密碼/舊密碼輸入正確if(password0=cq0)&(password1=cq1)&(password2=cq2)&(password3=cq3)&(password4=cq4)&(password5=cq5)&(pass=1)&(count=6)gotoxy(0,0); print(new code: );pass0=1;pass=0;sk14=0;count=0;count7=0;n=0;m=0;elsegotoxy(0,0); print(old code wrong! ); /舊密碼輸入錯(cuò)誤sk14=0;count2=0;count7=0;pass=0;m=0;

22、if(pa!=10)&(pass0=1)if(n=7)&(count=6)gotoxy(0,0); print(set over! ); /舊密碼輸入正確,存新密碼cq0=co1;cq1=co2;cq2=co3;cq3=co4;cq4=co5;cq5=co6;n=0;pass0=0;pass1=1;sk14=0;count=0;count2=0;m=0;count7=0;elsegotoxy(0,0); print(set wrong! ); /密碼過多或過少,報(bào)錯(cuò)sk14=0;count2=0;count=0;count7=0;m=0; 附錄一 總電路原理圖附錄二 實(shí)物圖附錄三 元器件清單序

23、號(hào)元件名稱型號(hào)與規(guī)格單位數(shù)量1電阻1k個(gè)6470個(gè)15.1k個(gè)210k個(gè)12三極管8550個(gè)23發(fā)光二極管個(gè)14晶振12m個(gè)15電容10uf個(gè)120pf個(gè)26按鈕開關(guān)個(gè)177芯片at24c02塊1at89s52塊18蜂鳴器5v個(gè)19繼電器5v個(gè)110液晶顯示器1602塊111實(shí)驗(yàn)板塊1附錄四 系統(tǒng)總體程序#include #include #include #include #define uchar unsigned char;#define uint unsigned int;/port definitions*sbit p3_6=p21;sbit lcdrs= p32;sbit lcdr

24、w= p31;sbit lcden = p30;sfr dbport = 0x80;/p0=0x80,p1=0x90,p2=0xa0,p3=0xb0.數(shù)據(jù)端口sbit p2_0=p20;uint key_val=16;uint m=0,count=0,count2=0;uint pass=0,pass0=0,pass1=0,pass2=0,o=0,n=0;uint co6=0,0,0,0,0,0;uint cp1=0;uint cq7=0,0,0,0,0,0,0; uchar sk16=0,0,0,0,0,0,0,0,0,0,0,0,0,0,pa=10; uchar password6;voi

25、d delayms(unsigned int n) unsigned int i,j; for(i=0;in;i+) for(j=0;j120;j+); /*按鍵掃描*/ void check_key(void)unsigned int row,col,tmp1,tmp2;tmp1 = 0x10; /tmp1用來設(shè)置p1口的輸出,取反后使p1.4p1.7中有一個(gè)為0for(row=0;row4;row+) / 行檢測(cè)p1 = 0x0f; / 先將p1.0p1.3置高p1 =tmp1; / 使p1.4p1.7中有一個(gè)為0tmp1*=2; / tmp1左移一位if (p1 & 0x0f) 0x0f

26、) / 檢測(cè)p1.0p1.3中是否有一位為0,只要有,則說明此行有鍵按下,進(jìn)入列檢測(cè)delayms(30);if (p1 & 0x0f) 0x0f) / 檢測(cè)p1.0p1.3中是否有一位為0,只要有,則說明行有鍵按下,進(jìn)入列檢測(cè) tmp2 = 0x01; / tmp2用于檢測(cè)出哪一列為0for(col =0;col6)m=0;if(count2=1)if(key_val=0) / delay(1000) ;sk0=1 ;count+;pa=0;passwordm=0;m+;delayms(10);p3_6=0;delayms(100);p3_6=1;key_val=16;if(key_val=

27、1)/delay(1000) ;sk1=1 ;count+;pa=1;passwordm=1;m+;delayms(10);p3_6=0;delayms(100);p3_6=1;key_val=16; if(key_val=2)/delay(1000) ;sk2=1 ;count+;pa=2;passwordm=2;m+;delayms(10);p3_6=0;delayms(100);p3_6=1;key_val=16; if(key_val=3)/delay(1000) ;sk3=1 ;count+;pa=3;passwordm=3;m+;delayms(10);p3_6=0;delayms

28、(100);p3_6=1;key_val=16; if(key_val=4)/delay(1000) ;sk4=1 ;count+;pa=4;passwordm=4;m+;delayms(10);p3_6=0;delayms(100);p3_6=1;key_val=16;if(key_val=5)/delay(1000) ;sk5=1 ;count+;pa=5;passwordm=5;m+;delayms(10);p3_6=0;delayms(100);p3_6=1;key_val=16; if(key_val=6)/delay(1000) ;sk6=1 ;count+;pa=6;passwo

29、rdm=6;m+;delayms(10);p3_6=0;delayms(100);p3_6=1;key_val=16; if(key_val=7)/delay(1000) ;sk7=1 ;count+;pa=7;passwordm=7;m+;delayms(10);p3_6=0;delayms(100);p3_6=1;key_val=16; if(key_val=8)/delay(1000) ;sk8=1 ;count+;pa=8;passwordm=8;m+;delayms(10);p3_6=0;delayms(100);p3_6=1;key_val=16; if(key_val=9)/de

30、lay(1000) ;sk9=1 ;count+;pa=9;passwordm=9;m+;delayms(10);p3_6=0;delayms(100);p3_6=1;key_val=16;if(m9)m=0;if(key_val=10)/delay(1000) ;sk10=1 ;delayms(10);p3_6=0;delayms(100);p3_6=1;key_val=16; if(key_val=11)/delay(1000) ;sk11=1 ;delayms(10);p3_6=0;delayms(100);p3_6=1;key_val=16;if(key_val=12)/delay(1

31、000) ;sk12=1 ;delayms(10);p3_6=0;delayms(100);p3_6=1;key_val=16;if(key_val=13)/delay(1000) ;sk13=1 ;delayms(10);p3_6=0;delayms(100);p3_6=1;key_val=16;if(key_val=14)/delay(1000) ;sk14=1 ;delayms(10);p3_6=0;delayms(200);p3_6=1;key_val=16;if(key_val=15)/delay(1000) ;sk15=1;delayms(10);p3_6=0;delayms(10

32、0);p3_6=1;key_val=16;if(m10)m=0; /內(nèi)部等待函數(shù)*unsigned char lcd_wait(void)lcden=0;lcdrs=0;lcdrw=1;_nop_();lcden=1;_nop_();lcden=0;_nop_();while(dbport&0x80)/在用proteus仿真時(shí),注意用屏蔽此語(yǔ)句,在調(diào)用gotoxy()時(shí),會(huì)進(jìn)入死循環(huán),/可能在寫該控制字時(shí),該模塊沒有返回寫入完備命令,即dbport&0x80=0x80/實(shí)際硬件時(shí)打開此語(yǔ)句return dbport;/向lcd寫入命令或數(shù)據(jù)*#define lcd_command0 / com

33、mand#define lcd_data1 / data#define lcd_clear_screen0x01 / 清屏#define lcd_homing 0x02 / 光標(biāo)返回原點(diǎn)void lcd_write(bit style, unsigned char input) lcd_wait();lcden=0;lcdrs=style;lcdrw=0;_nop_();dbport=input;_nop_();/注意順序lcden=1;_nop_();/注意順序lcden=0;_nop_();/設(shè)置顯示模式*#define lcd_show0x04 /顯示開#define lcd_hide0

34、x00 /顯示關(guān) #define lcd_cursor0x02 /顯示光標(biāo)#define lcd_no_cursor0x00 /無光標(biāo) #define lcd_flash0x01 /光標(biāo)閃動(dòng)#define lcd_no_flash0x00 /光標(biāo)不閃動(dòng)void lcd_setdisplay(unsigned char displaymode)lcd_write(lcd_command, 0x08|displaymode);/設(shè)置輸入模式*#define lcd_ac_up0x02#define lcd_ac_down0x00 / default#define lcd_move0x01 / 畫面

35、可平移#define lcd_no_move0x00 /defaultvoid lcd_setinput(unsigned char inputmode)lcd_write(lcd_command, 0x04|inputmode);/移動(dòng)光標(biāo)或屏幕*/*#define lcd_cursor0x02 #define lcd_screen0x08#define lcd_left0x00#define lcd_right0x04void lcd_move(unsigned char object, unsigned char direction) if(object=lcd_cursor)lcd_write(lcd_command,0x10|direction);if(object=lcd_screen)lcd_write(lcd_command,0x18|dir

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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)論