基于C語言STC89C52單片機(jī)電子密碼鎖的設(shè)計(jì)_第1頁
基于C語言STC89C52單片機(jī)電子密碼鎖的設(shè)計(jì)_第2頁
基于C語言STC89C52單片機(jī)電子密碼鎖的設(shè)計(jì)_第3頁
基于C語言STC89C52單片機(jī)電子密碼鎖的設(shè)計(jì)_第4頁
基于C語言STC89C52單片機(jī)電子密碼鎖的設(shè)計(jì)_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

.z電子密碼鎖的設(shè)計(jì)摘要:本設(shè)計(jì)闡述通過Proteus軟件成功仿真的電子密碼鎖的實(shí)現(xiàn)過程,選用STC89C52單片機(jī)為核心的系統(tǒng)來實(shí)現(xiàn)按鍵輸入、開鎖和密碼識(shí)別。采用具備I2C總線接口的E2PROM芯片來完成密碼的存儲(chǔ),通過1602A液晶顯示器提示程序運(yùn)行狀態(tài)和使用步驟,利用蜂鳴器模擬報(bào)警,發(fā)光二極管模擬鎖的開關(guān)。該系統(tǒng)用C語言編寫程序,與匯編語言相比具有更好的移植性和可讀性,便于修改和增減功能。關(guān)鍵詞:Proteus;密碼鎖;單片機(jī);C語言DesignofElectronicCodeLockUsingSTC89C52MCUBasedonCLanguageAbstract:ThepaperintroducestheimplementationoftheelectroniccodelockwhichwassuccessfullysimulatedbyProteus.ItusesSTC89C52single-chipmicroputertoachievekeyinput,theunlockingandidentificationofthecode.ItadoptsI2CbusbasedE2PROMchiptopletethecode'sstorage,usingLCD1602Atoprompttheprogram'srunningstateandworkingprocedures,adoptingbuzzertoimitatethealarmandLEDtoimitatetheswitch.ItisconvenienttomodifyandaddfunctionbyusingClanguageprogram,whichismoretransplantableandreliableparedtoassemblylanguage.Keywords:Proteus;codelock;single-chipmicroputer;Clanguage一、前言隨著社會(huì)物質(zhì)財(cái)富的日益增長和人們生活水平的提高,平安成為現(xiàn)代居民最關(guān)心的問題之一。而鎖自古以來就是把守門的鐵將軍,人們對(duì)它要求甚高,即要求可靠地防盜,又要使用方便。傳統(tǒng)的門鎖既要備有大量的鑰匙,又要擔(dān)憂鑰匙喪失后的麻煩。隨著單片機(jī)的問世,出現(xiàn)了電子密碼鎖,其**性高,使用靈活性好,平安系數(shù)高,故受到廣闊用戶的青睞。電子密碼鎖通常使用ARM和單片機(jī)控制[1],單片機(jī)相對(duì)ARM實(shí)現(xiàn)較為簡單,功能較為完善,因此使用單片機(jī)控制較多。用單片機(jī)控制的密碼鎖常使用匯編語言編寫程序,數(shù)碼管做顯示器[2]。但本設(shè)計(jì)使用移植性及可讀性強(qiáng)的C語言[3-5]編寫;同時(shí)采用顯示清楚、功率消耗小而且壽命長的1602A液晶顯示器。從經(jīng)濟(jì)實(shí)用的角度出發(fā),采用STC89C52單片機(jī)設(shè)計(jì)出一種具有密碼設(shè)置、報(bào)警等功能的電子密碼鎖,并通過Proteus[6]軟件成功地進(jìn)展了仿真。二、總體方案設(shè)計(jì)2.1方案論證與比擬方案一:以STC89C52單片機(jī)為電子密碼鎖系統(tǒng)核心,使用4*4矩陣鍵盤作為數(shù)據(jù)輸入方式,驅(qū)動(dòng)1602A顯示器提示程序運(yùn)行過程和開鎖的步驟,利用AT24C02芯片實(shí)現(xiàn)掉電存儲(chǔ)。圖1為單片機(jī)控制密碼鎖的系統(tǒng)原理框圖。STC89C5STC89C52單片機(jī)AT24C02存儲(chǔ)芯片矩陣鍵盤控制LCD1602A蜂鳴器提示電路電源模塊LED密碼校驗(yàn)提示圖1單片機(jī)控制密碼鎖的系統(tǒng)原理框圖方案二:以74LS112雙JK觸發(fā)器構(gòu)成的數(shù)字邏輯電路控制方案,如圖2。輸入按扭開關(guān)組輸入按扭開關(guān)組輸入鎖存電路密碼存儲(chǔ)電路開鎖控制電路機(jī)械動(dòng)作構(gòu)件5秒定時(shí)電路20秒定時(shí)電路聲光指示電路圖2數(shù)字邏輯控制方案電子密碼鎖原理框圖2.2方案選擇由于利用單片機(jī)靈活的編程設(shè)計(jì)和強(qiáng)大的I/O端口,及其控制的準(zhǔn)確性,不但能實(shí)現(xiàn)根本的密碼鎖功能,還可以增添掉電存儲(chǔ)、聲光提示等功能,應(yīng)選用方案一。三、單元模塊設(shè)計(jì)3.1硬件支持使用的元器件有:核心芯片STC89C52、存儲(chǔ)芯片AT24C02、液晶顯示1602A、4×4矩陣鍵盤、報(bào)警蜂鳴器、發(fā)光二極管和三極管。3.2功能單元模塊設(shè)計(jì)3.2.1開鎖機(jī)構(gòu)通過單片機(jī)送給開鎖執(zhí)行機(jī)構(gòu),電路驅(qū)動(dòng)電磁鎖吸合,從而到達(dá)開鎖的目的。如圖3所示,為密碼鎖開鎖電路原理圖。當(dāng)用戶輸入的密碼正確時(shí),單片機(jī)便輸出開門信號(hào),送到開鎖驅(qū)動(dòng)電路,然后驅(qū)動(dòng)電磁鎖,到達(dá)開門的目的。本次設(shè)計(jì)中,基于節(jié)省本錢考慮,用發(fā)光二極管代替電磁鎖,信息通過LCD顯示,并利用蜂鳴器和二極管聲光指示。其中,綠發(fā)光二極管亮,表示開鎖;否則,表示密碼輸入錯(cuò)誤并開啟報(bào)警電路。開鎖驅(qū)動(dòng)電路開鎖驅(qū)動(dòng)電路STC89C52單片機(jī)密碼正確超次鎖定電磁鎖是否圖3密碼鎖開鎖電路原理圖3.2.2矩陣鍵盤設(shè)計(jì)電路每一條水平〔行線〕與垂直線〔列線〕的穿插處不相通,而是通過一個(gè)按鍵來連通,利用這種行列式矩陣構(gòu)造只需要M條行線和N條列線,即可組成具有M×N個(gè)按鍵的鍵盤。由于本設(shè)計(jì)中要求使用16個(gè)按鍵輸入,為減少鍵盤與單片機(jī)接口時(shí)所占用的I/O線的數(shù)目,故使用矩陣鍵盤。本設(shè)計(jì)中,矩陣鍵盤行線和單片機(jī)P1.0-P1.3相連,列線與單片機(jī)P1.4-P1.7相連。矩陣鍵盤設(shè)計(jì)電路圖,如圖4所示。鍵盤掃描采用行掃描法,即依次置行線中的每一行為低電平,其余均為高電平,掃描列線電平狀態(tài),為低電平即表示該鍵按下。11234567890輸入密碼確認(rèn)更改密碼***圖4矩陣鍵盤設(shè)計(jì)電路圖3.2.3聲音提示電路設(shè)計(jì)聲音提示電路采用小蜂鳴器提示。蜂鳴器能夠根據(jù)脈沖信號(hào),以及信號(hào)的頻率發(fā)出各種不同的聲音,這樣可以根據(jù)系統(tǒng)要求在密碼出入正確和密碼輸入錯(cuò)誤時(shí)發(fā)出不同的聲音提示,已到達(dá)報(bào)警的要求。蜂鳴器電路,如圖5所示。圖5蜂鳴器電路3.2.4顯示模塊設(shè)計(jì)本設(shè)計(jì)中,顯示電路采用1602A液晶顯示器顯示[7]。如下所示,圖6為1602A液晶顯示器的接口示意圖,表1為接口說明。圖61602A液晶顯示器的接口示意圖表1接口說明管腳序名稱電平功能描述1VSS0V接地2VCC5.0V電源輸入3V0—LCD驅(qū)動(dòng)電壓輸入4RSH/L存放器選擇:RS=H,選擇數(shù)據(jù)存放器;RS=L,選擇指令存放器5R/WH/L讀寫信號(hào)線:R/W=H,讀操作;R/W=L,寫操作6EH,H→L使能信號(hào)7DB0H/L數(shù)據(jù)線8DB1H/L數(shù)據(jù)線9DB2H/L數(shù)據(jù)線10DB3H/L數(shù)據(jù)線11DB4H/L數(shù)據(jù)線12DB5H/L數(shù)據(jù)線13DB6H/L數(shù)據(jù)線14DB7H/L數(shù)據(jù)線15BLA5.0V背光電源正極16BLK0V背光電源負(fù)極本設(shè)計(jì)中液晶串口一共用到11根導(dǎo)線與單片機(jī)相連,具體連接情況如表2顯示模塊與MCU連接說明所示。表2顯示模塊與MCU連接說明序號(hào)1602A液晶顯示器引腳STC89C52單片機(jī)引腳1RS引腳P2.5(A13)2R/W引腳P2.6(A14)3E引腳P2.7(A15)4D0引腳P0.0(AD0)5D1引腳P0.1(AD1)6D2引腳P0.2(AD2)7D3引腳P0.3(AD3)8D4引腳P0.4(AD4)9D5引腳P0.5(AD5)10D6引腳P0.6(AD6)11D7引腳P0.7(AD7)3.2.5AT24C02掉電存儲(chǔ)單元的設(shè)計(jì)本設(shè)計(jì)中掉電存儲(chǔ)單元采用AT24C02外部存儲(chǔ)器[8-9],其作用是在系統(tǒng)電源斷開的時(shí)候,存儲(chǔ)當(dāng)前設(shè)定的密碼數(shù)據(jù)。AT24C02是一個(gè)2K位串行CMOSE2PROM,內(nèi)部含有256個(gè)8位字節(jié),含一個(gè)16字節(jié)頁寫緩沖器,具有寫保護(hù)功能。其采用兩線串行的總線和單片機(jī)通訊,電壓最低可以到2.5V,額定電流為1mA,靜態(tài)電流10Ua(5.5V),芯片內(nèi)的資料可以在斷電的情況下保存40年以上,而且采用8腳的DIP封裝,使用方便。如下所示,圖7為AT24C02管腳示意圖,表3為AT24C02管腳說明。A0A0A1A2GNDSDASCLWPVCC12348765C02圖7AT24C02管腳示意圖表3AT24C02管腳說明管腳名稱功能管腳名稱功能A0A1A2器件地址選擇SDA串行數(shù)據(jù)/地址SCL串行時(shí)鐘信號(hào)WP寫保護(hù)VCC1.8V-6.0V工作電壓VSS接地本設(shè)計(jì)中,AT24C02的SCL和SDA引腳接上拉電阻后與單片機(jī)的P3.4〔T0〕和P3.5〔T1〕腳相連,其電路圖如圖8所示。圖8AT24C02掉電存儲(chǔ)單元設(shè)計(jì)圖程序設(shè)計(jì)與系統(tǒng)仿真4.1模塊介紹與硬件電路相關(guān)聯(lián),本系統(tǒng)軟件包括主程序模塊、密碼比擬判斷模塊、鍵盤掃描模塊、修改密碼模塊、1602A液晶顯示模塊等[10]。系統(tǒng)程序流程如圖9所示。開場(chǎng)開場(chǎng)系統(tǒng)初始化調(diào)用E2PROM密碼顯示主界面輸入密碼判斷密碼確定密碼開鎖模擬聲光鎖定鍵盤YN返回Y判斷次數(shù)N超過N次未超過N次再次輸入密碼密碼設(shè)置完畢N設(shè)置新密碼Y按鍵N判斷按鍵值返回主界面NY設(shè)置解碼次數(shù)產(chǎn)生隨**碼輸入密碼N=0*84N=0*82N=0*11圖9系統(tǒng)程序流程圖4.1.1主程序模塊主程序主要用于定義全局變量,給全局變量賦初值,初始化E2PROM,啟動(dòng)定時(shí)器以及從AT24C02中讀取密碼,為整個(gè)程序提供數(shù)據(jù);檢測(cè)按鍵;調(diào)用顯示等功能。4.1.2密碼比擬判斷模塊該模塊的功能是將鍵盤輸入的密碼利用if語句與設(shè)定的密碼進(jìn)展逐個(gè)比擬,假設(shè)密碼完全正確則開鎖;假設(shè)不正確,則開啟報(bào)警電路,復(fù)位后重新輸入密碼。其密碼輸入和比擬判決流程圖如圖10所示。輸入密碼輸入密碼核對(duì)鍵盤鎖定,開啟報(bào)警電路開鎖,燈亮,可密碼修改NY復(fù)位圖10密碼輸入和比擬判決流程圖4.1.3鍵盤掃描模塊鍵盤使用矩陣式鍵盤,由行和列組成,CPU對(duì)所有鍵盤進(jìn)展監(jiān)視,從而實(shí)現(xiàn)逐列掃描鍵盤確定被按鍵的具體位置、判斷鍵盤上有無鍵按下、消除去抖動(dòng)、判斷閉合的鍵是否釋放等功能。如圖11所示,為鍵盤掃描流程圖。開場(chǎng)開場(chǎng)延時(shí)去抖動(dòng)計(jì)算輸入鍵值鍵值送入單片機(jī)有按鍵輸入.有按鍵輸入.有按鍵輸入.返回NNYY圖11鍵盤掃描流程圖4.1.4修改密碼模塊在密碼輸入正確情況下,可以按下“重置密碼〞對(duì)密碼進(jìn)展重新設(shè)置,每設(shè)定一位就將密碼送給AT24C02存儲(chǔ)起來,當(dāng)設(shè)置6位密碼完畢后,系統(tǒng)將自動(dòng)跳到程序開場(chǎng),調(diào)用新設(shè)置的密碼。圖12為修改密碼流程圖。開場(chǎng)開場(chǎng)輸入原密碼密碼比擬比擬正確.輸入新密碼再次輸入新密碼調(diào)用AT24C02中密碼比擬正確修改成功返回菜單鍵盤鎖定,啟動(dòng)報(bào)警電路復(fù)位YN圖12修改密碼流程圖4.1.51602A液晶顯示模塊此模塊包括液晶初始化、命令的輸入等。4.2Proteus仿真電路圖13電子密碼鎖仿真圖五、系統(tǒng)功能本設(shè)計(jì)中系統(tǒng)可實(shí)現(xiàn)功能如下:〔1〕通過切換,對(duì)輸入的4位密碼進(jìn)展顯示或隱藏;〔2〕通過發(fā)光二極管和蜂鳴器,對(duì)解密正確或者錯(cuò)誤進(jìn)展聲光報(bào)警;〔3〕4位密碼修改;〔4〕在密碼遺失情況下,通過初始密碼進(jìn)展密碼再設(shè)置;〔5〕采用AT24C02外部存儲(chǔ)器,完成斷電密碼保護(hù)功能;〔6〕具有1-9次的解鎖次數(shù)任意設(shè)定功能;〔7〕模擬密碼箱隨機(jī)產(chǎn)生密碼,并進(jìn)展解碼。六.設(shè)計(jì)總結(jié)從根本方案的制定,到硬件電路的選擇,再到電路的焊接,最后進(jìn)展程序調(diào)試——在此期間我們遇到很多困難,但經(jīng)過團(tuán)隊(duì)的不懈努力,終于擊破了各個(gè)難點(diǎn),到達(dá)的所需要的效果。在這次設(shè)計(jì)中,我們深刻認(rèn)識(shí)到自身的缺乏——缺少實(shí)戰(zhàn)經(jīng)歷。與此同時(shí),也因?yàn)檫@次設(shè)計(jì),我們得到一定的鍛煉,體會(huì)到理論與實(shí)踐相結(jié)合的重要意義。由于本次設(shè)計(jì)時(shí)間有限,一些設(shè)想沒有完全實(shí)現(xiàn),比方說:電子密碼鎖的網(wǎng)絡(luò)通信擴(kuò)展,人機(jī)界面智能化等。期待以后有時(shí)機(jī)對(duì)以上設(shè)想進(jìn)展進(jìn)一步研究實(shí)踐。參考文獻(xiàn)[1]郭海英.基于單片機(jī)的電子平安密碼鎖的設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2005,28〔13〕:95-97.[2]*毅剛.單片機(jī)原理及應(yīng)用[M].:高等教育,2003.[3]譚浩強(qiáng).C程序設(shè)計(jì)[M].:清華大學(xué),2005[4]楊章偉,韓雪,*浩然.跟我學(xué)C程序設(shè)計(jì)[M].:清華大學(xué),2010[5]*培仁.基于C語言編程MCS-51單片機(jī)原理與應(yīng)用[M].:清華大學(xué),2002[6]周潤景,*麗娜,丁莉.基于PROTEUS的電路及單片機(jī)設(shè)計(jì)與仿真[M].:航天航空大學(xué),2010[7]20070711.亞斌YB1602A液晶模塊使用說明書[DB/OL].wenku.baidu./view/7c80dd9951e79b89680226f3.html[8]AT24C02[DB/OL].baike.baidu./view/1837975.htm[9]at24c02中文資料[DB/OL]..doc88./p-.html[10]金桂,向國梁.基于C語言STC89C52單片機(jī)電子密碼鎖的設(shè)計(jì)與仿真[J].現(xiàn)代電子技術(shù),2010,19:176-182.附錄:a、器件清單器件名稱規(guī)格型號(hào)編號(hào)數(shù)量單價(jià)〔元〕總價(jià)〔元〕備注MCUSTC89C52U1177外部存儲(chǔ)器AT24C02U210.430.43LCD1602ALCD112020發(fā)光二極管3mmD110.050.05綠光普亮3mmD210.050.05紅光普亮三極管8550Q110.20.2晶振12MHz*110.50.5電阻4.7kΩ40.020.0810kΩ20.020.0410K排阻RP110.50.5電容22PC1C220.050.110μFC310.050.5IC座8腳IC座10.350.3540腳IC座10.30.3單排插座10.50.5蜂鳴器LS110.650.65電池盒5V電池盒144焊錫212導(dǎo)線111電路板9×15cm萬用板11.51.5合計(jì):39.75元b、源程序*include<REG51.h>*include<intrins.h>*include<stdio.h>*include<stdlib.h>*defineLCM_DataP0*defineucharunsignedchar*defineuintunsignedint*definew4 sbitkey=P2^0;sbitalam=P2^1;sbitopen_led=P2^2;sbitlcd1602_rs=P2^5;sbitlcd1602_rw=P2^6;sbitlcd1602_en=P2^7;sbitScl=P3^4; sbitSda=P3^5; sbit*ianshi=P3^7; bitoperation=0; bitpass=0; bitmmsd=0;voidDelay5Ms(void){ unsignedintTempCyc=5552; while(TempCyc--);}voidDelay400Ms(void){unsignedcharTempCycA=5;unsignedintTempCycB;while(TempCycA--){TempCycB=7269;while(TempCycB--);}}bitReInputEn=0; bits3_keydown=0; bitkey_disable=0; unsignedcharcountt0,second;voidDelay5Ms(void);staticunsignedchartmp2=80;unsignedcharm,d,sjmbz=0;unsignedcharcodea[]={0*FE,0*FD,0*FB,0*F7};unsignedcharcodename[] ={"Tong*in08"};unsignedcharcodeCorrect[] ={"right"}; unsignedcharcodeError[] ={"wrong"}; unsignedcharcodesuijishu[] ={"RandNumber:"}; unsignedcharcodeset[] ={"setting:"}; unsignedcharcodesjp[] ={"keypadlocked"}; unsignedcharcodestart_line[] ={"password:"};unsignedcharcodecodepass[] ={"success"};unsignedcharcodeLockOpen[] ={"open"}; unsignedcharcodeSetNew[] ={"SetNewWord"};unsignedcharcodeInput[] ={"input:"}; unsignedcharcodeResetOK[] ={"ResetOK"};unsignedcharcodeEr_try[] ={"tryagain!"};unsignedcharcodeagain[] ={"inputagain"};unsignedcharcodeinitword[] ={"chushihua"};unsignedcharInputData[4]; unsignedcharCurrentPassword[4]={1,3,1,4}; unsignedcharTempPassword[4];unsignedcharN=0; unsignedcharcun[1];unsignedcharC=3; unsignedcharErrorCont; unsignedcharCorrectCont; unsignedcharReInputCont; unsignedcharcodeinitpassword[4]={0,0,0,0};voidmDelay(uintt){ uchari; while(t--) { for(i=0;i<125;i++) {;} }}voidNop(void) { _nop_(); _nop_(); _nop_(); _nop_();}voidStart(void){ Sda=1; Scl=1; Nop(); Sda=0; Nop();}voidStop(void){ Sda=0; Scl=1; Nop(); Sda=1; Nop();}voidAck(void){ Sda=0; Nop(); Scl=1; Nop(); Scl=0;}voidNoAck(void){ Sda=1; Nop(); Scl=1; Nop(); Scl=0;}voidSend(ucharData){ ucharBitCounter=8; uchartemp; do { temp=Data; Scl=0; Nop(); if((temp&0*80)==0*80) Sda=1; else Sda=0; Scl=1; temp=Data<<1; Data=temp; BitCounter--; } while(BitCounter); Scl=0;}ucharRead(void){uchartemp=0; uchartemp1=0; ucharBitCounter=8; Sda=1; do{ Scl=0; Nop(); Scl=1; Nop(); if(Sda) temp=temp|0*01; else temp=temp&0*fe; if(BitCounter-1) { temp1=temp<<1; temp=temp1; } BitCounter--; } while(BitCounter); return(temp); }voidWrToROM(ucharData[],ucharAddress,ucharNum){uchari;uchar*PData;PData=Data;for(i=0;i<Num;i++){Start();Send(0*a0);Ack();Send(Address+i);Ack();Send(*(PData+i));Ack();Stop();mDelay(20);}}voidRdFromROM(ucharData[],ucharAddress,ucharNum){uchari;uchar*PData;PData=Data;for(i=0;i<Num;i++){Start();Send(0*a0);Ack();Send(Address+i);Ack();Start();Send(0*a1);Ack();*(PData+i)=Read();Scl=0;NoAck();Stop();}}*defineyi0*80*defineer0*80+0*40voiddelay(uint*ms){ uint*,y; for(*=*ms;*>0;*--) for(y=110;y>0;y--);}write_1602(uchar){ lcd1602_rs=0; lcd1602_rw=0; P0=;delay(1); lcd1602_en=1; delay(1); lcd1602_en=0;}write_1602dat(uchardat){ lcd1602_rs=1;lcd1602_rw=0; P0=dat; delay(1);lcd1602_en=1; delay(1); lcd1602_en=0;}voidlcd_init(void){ write_1602(0*38); write_1602(0*0c); write_1602(0*06); write_1602(0*01);}unsignedcharcoding(unsignedcharm) { unsignedchark; switch(m) { case(0*18):k=1;break; case(0*28):k=2;break; case(0*48):k=3;break; case(0*88):k='A';break; case(0*14):k=4;break; case(0*24):k=5;break; case(0*44):k=6;break; case(0*84):k='B';break; case(0*12):k=7;break; case(0*22):k=8;break; case(0*42):k=9;break; case(0*82):k='C';break; case(0*11):k='*';break; case(0*21):k=0;break; case(0*41):k='*';break; case(0*81):k='D';break; } return(k);}unsignedcharkeynum(void){ unsignedcharrow,col,i; P1=0*f0; if((P1&0*f0)!=0*f0) { Delay5Ms();Delay5Ms(); if((P1&0*f0)!=0*f0) { row=P1^0*f0; i=0; P1=a[i]; while(i<4) { if((P1&0*f0)!=0*f0) { col=~(P1&0*ff); break; } else { i++; P1=a[i]; } } } else { return0; } while((P1&0*f0)!=0*f0); return(row|col); } elsereturn0; }voidResetPassword(void){ unsignedchari; unsignedcharj; if(pass==0) { pass=0; DisplayChar(); Alam(4); } else { if(ReInputEn==1) { if(N==4) { ReInputCont++; if(ReInputCont==2) { for(i=0;i<4;) { if(TempPassword[i]==InputData[i]) i++; else { write_1602(er); for(j=0;j<16;j++) { write_1602dat(Error[j]); } Alam(4); pass=0; ReInputEn=0; ReInputCont=0; DisplayChar(); break; } } if(i==4) { write_1602(er); for(j=0;j<16;j++) { write_1602dat(ResetOK[j]); } Alam(2); WrToROM(TempPassword,0,4); ReInputEn=0; } ReInputCont=0; CorrectCont=0; } else { Alam(1); write_1602(er); for(j=0;j<16;j++) { write_1602dat(again[j]); } for(i=0;i<4;i++) { TempPassword[i]=InputData[i]; } } N=0; } } }}voidCancel(void){ unsignedchari; unsignedcharj; write_1602(yi); for(j=0;j<16;j++) { write_1602dat(name[j]); } write_1602(er); for(j=0;j<16;j++) { write_1602dat(start_line[j]); } Alam(2); for(i=0;i<4;i++) { InputData[i]=0; } KEY=1; ALAM=1; operation=0; pass=0; ReInputEn=0; ErrorCont=0; CorrectCont=0; ReInputCont=0; open_led=1; sjmbz=0; s3_keydown=0; key_disable=0; mmsd=0; N=0; }unsignedcharszzh(unsignedchard) { unsignedcharj,k; j=d; switch(j) { case(0):k=0*30;break; case(1):k=0*31;break; case(2):k=0*32;break; case(3):k=0*33;break; case(4):k=0*34;break; case(5):k=0*35;break; case(6):k=0*36;break; case(7):k=0*37;break; case(8):k=0*38;break; case(9):k=0*39;break; } return(k);}voidEnsure(void){ unsignedchari,j; RdFromROM(CurrentPassword,0,4); RdFromROM(cun,16,1); if(N==4) { if(ReInputEn==0&&mmsd==0) { for(i=0;i<4;) { if(CurrentPassword[i]==InputData[i]) { i++; } else { ErrorCont++; if(ErrorCont==C) { key_disable=1; pass=0; break; } else write_1602(er); for(j=0;j<16;j++) { write_1602dat(Error[j]); } Alam(2); pass=0; break; } } if(i==4) { CorrectCont++; if(CorrectCont==1) {write_1602(er); for(j=0;j<16;j++) { write_1602dat(LockOpen[j]); } Alam(2); KEY=0; pass=1; TR0=1; open_led=0; for(j=0;j<6;j++) { InputData[i]=0; } } else { write_1602(er); for(j=0;j<16;j++){ write_1602dat(SetNew[j]); } Alam(2); ReInputEn=1; CorrectCont=0; } } else { if((InputData[0]==0)&&(InputData[1]==8)&&(InputData[2]==0)&&(InputData[3]==6)) { WrToROM(initpassword,0,4); write_1602(er); for(j=0;j<16;j++) {write_1602dat(initword[j]); } //Alam(2);N=0; } else { if(ErrorCont==C) {write_1602(er); for(i=0;i<16;i++) { write_1602dat(sjp[i]); } } } } } elseif(ReInputEn==1&&mmsd==0) { write_1602(er); for(j=0;j<16;j++) { write_1602dat(Er_try[j]); } Alam(4); } } else { if(mmsd==1||sjmbz==1) {if(sjmbz=1) WrToROM(TempPassword,0,4); elseif(mmsd==1) WrToROM(cun,16,1); else ; mmsd=0; sjmbz=0; write_1602(yi); for(j=0;j<16;j++) { write_1602dat(name[j]); } write_1602(er); for(j=0;j<16;j++) { write_1602dat(codepass[j]); } Alam(4); } else { write_1602(er); for(j=0;j<16;j++) { write_1602dat(Error[j]); } Alam(4); pass=0; } } N=0; operation=1; } voidsuiji(void){if(pass==1) {unsignedinti,j,k;unsignedintsuijima[4];write_1602(yi);for(j=0;j<16;j++){write_1602dat(name[j]);}write_1602(er);for(j=0;j<16;j++){write_1602dat(suijishu[j]);}srand((tmp2++)*TL0);for(i=0;i<4;i++){j=(int)(10.0*rand()/(56494.0));suijima[i]=j;k=szzh(j); TempPassword[i]=suijima[i];write_1602(er+i+12);write_1602dat(k);}sjmbz=1;Alam(2);}else {unsignedintj; write_1602(er); for(j=0;j<16;j++){ write_1602dat(Error[j]); } Alam(4); } }unsignedchar*gmm(void){unsignedcharKE,i,j,a=1;unsignedcharG,k;if(pass==1){write_1602(yi); for(i=0;i<16;i++) { write_1602dat(name[j]); } write_1602(er); for(j=0;j<16;j++) { write_1602dat(set[j]); }while(a){ KE=keynum();if(KE!=0){ G=coding(KE);switch(G){case(1):C=1;break; case(2):C=2;break; case(3):C=3;break; case(4):C=4;break; case(5):C=5;break; case(6):C=6;break; case(7):C=7;break; case(8):C=8;break; case(9):C=9;break; } a=0; mmsd=1; k=szzh(C); write_1602(er+8); write_1602dat(k);} }}else{write_1602(er); for(j=0;j<16;j++) { write_1602dat(Error[j]); } pass=0; } return(C);}voidtime0_int(void)interrupt

溫馨提示

  • 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. 人人文庫網(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)論