根據(jù)AT24C02電子密碼鎖的設(shè)計(jì)_第1頁
根據(jù)AT24C02電子密碼鎖的設(shè)計(jì)_第2頁
根據(jù)AT24C02電子密碼鎖的設(shè)計(jì)_第3頁
根據(jù)AT24C02電子密碼鎖的設(shè)計(jì)_第4頁
根據(jù)AT24C02電子密碼鎖的設(shè)計(jì)_第5頁
已閱讀5頁,還剩40頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

_單片機(jī)應(yīng)用課程設(shè)計(jì)設(shè)計(jì)題目:基于AT24C02電子密碼鎖的設(shè)計(jì)_目錄1設(shè)計(jì)任務(wù) 錯(cuò)誤!未定義書簽。2系統(tǒng)總體方案設(shè)計(jì) 錯(cuò)誤!未定義書簽。2.1各個(gè)模塊方案論證 錯(cuò)誤!未定義書簽。2.1.1芯片選擇 錯(cuò)誤!未定義書簽。2.1.2顯示器的選擇 錯(cuò)誤!未定義書簽。2.2總體方案設(shè)計(jì) 錯(cuò)誤!未定義書簽。3硬件電路設(shè)計(jì) 錯(cuò)誤!未定義書簽。3.1單片機(jī)最小系統(tǒng) 錯(cuò)誤!未定義書簽。3.2AT24C20儲存密碼電路 錯(cuò)誤!未定義書簽。謝謝閱讀3.3矩陣鍵盤電路 63.4液晶顯示電路 64系統(tǒng)軟件設(shè)計(jì) 錯(cuò)誤!未定義書簽。4.1主程序流程圖 74.2子程序流程圖 84.2.1AT24C20子程序流程圖 84.2.21602子程序流程圖 95實(shí)物調(diào)試 錯(cuò)誤!未定義書簽。5.1實(shí)性物能分析 106心得體會(huì) 錯(cuò)誤!未定義書簽。附錄1 錯(cuò)誤!未定義書簽。(1)系統(tǒng)總電路圖 16(2)系統(tǒng)仿真圖 17附錄2 錯(cuò)誤!未定義書簽。(1)程序清單 錯(cuò)誤!未定義書簽。_設(shè)計(jì)任務(wù)基本要求:采用AT24C02與單片機(jī)STC89C52相結(jié)合設(shè)計(jì)電子密碼鎖,然后通過矩陣鍵盤按鍵進(jìn)行密碼的輸入、清除、更改、開鎖等功能。感謝閱讀系統(tǒng)總體方案設(shè)計(jì)2.1 各個(gè)模塊方案討論2.1.1芯片選擇由于設(shè)計(jì)的是電子密碼鎖,而單片機(jī)AT89C52為8位通用微處理器,采用工業(yè)標(biāo)準(zhǔn)的C51內(nèi)核,在內(nèi)部功能及管腳排布上與通用的8xc52相同,其主要用于會(huì)聚調(diào)整時(shí)的功能控制。功能包括對會(huì)聚主IC內(nèi)部寄存器、數(shù)據(jù)RAM及外部接口等功能部件的初始化,會(huì)聚調(diào)整控制,會(huì)聚測試圖控制,紅外遙控信號IR的接收解碼及與主板CPU通信等。主要管腳有:XTAL1(19腳)和XTAL2(18腳)為振蕩器輸入輸出端口,外接12MHz晶振。RST/Vpd(9腳)為復(fù)位輸入端口,外接電阻電容組成的復(fù)位電路。VCC(40腳)和VSS(20腳)為供電端口,分別接+5V電源的正負(fù)端。P0~P3為可編程通用I/O腳,其功能用途由軟件定義,在本設(shè)計(jì)中,P0端口(32~39腳)被定義為N1功能控制端口,分別與N1的相應(yīng)功能管腳相連接,13腳定義為IR輸入端,10腳和11腳定義為I2C總線控制端口,分別連接N1的SDAS(18腳)和SCLS(19腳)端口,12腳、27腳及28腳定義為握手信號功能端口,連接主板CPU的相應(yīng)功能端,用于當(dāng)前制式的檢測及會(huì)聚調(diào)整狀態(tài)進(jìn)入的控制功能。謝謝閱讀所以我們以此單片機(jī)為核心,采用AT24C02作為儲存密碼芯片,利用單片機(jī)進(jìn)行控制,外加顯示電路和鍵盤電路,即構(gòu)成一個(gè)基本的電子密碼鎖系統(tǒng)。感謝閱讀2.1.2顯示器的選擇LCD1602具有微功耗、體積小、顯示內(nèi)容豐富、超薄輕巧,對比度可調(diào)、精品文檔放心下載內(nèi)含復(fù)位電路、提供各種控制命令等特點(diǎn),完全滿足本次設(shè)計(jì)的需要,因此,選精品文檔放心下載擇LCD1602作為顯示器進(jìn)行使用。_2.2 總體方案設(shè)計(jì)密碼鎖設(shè)計(jì)的關(guān)鍵問題是實(shí)現(xiàn)密碼的輸入、清除、更改、開鎖等功能:精品文檔放心下載1、密碼輸入功能:插上電源后,第一次使用或忘記密碼時(shí)可以用111111對其密碼初始化,LCD提示輸入密碼,輸入密碼時(shí)在1602LCD上顯示“*”每輸入一個(gè)數(shù)字,LCD上向右移一格,同時(shí)“*”加一個(gè)。值到輸入6個(gè)“*”為此,若一次性輸入大于6個(gè)密碼,則只保留前6位密碼,按“確定”生效。若按取消鍵,鎖關(guān)閉,所有輸入清除錯(cuò)誤。輸入計(jì)數(shù)達(dá)三次時(shí),報(bào)警并鎖定鍵盤。謝謝閱讀2、密碼更改功能:密碼鎖在打開的狀態(tài)再次輸入原密碼,會(huì)有提示輸入新密碼,輸入新密碼后按修改鍵再次輸入新密碼后就能成功修改密碼(初始密碼是6個(gè)1)。感謝閱讀3、當(dāng)密碼輸入成功后,或者密碼修改成功后,LCD上有提示成功字符LED燈亮,同時(shí)蜂鳴器響兩聲作為提示。謝謝閱讀AT24C02電子密碼鎖總體設(shè)計(jì)方案如圖1所示。感謝閱讀1總體設(shè)計(jì)方案系統(tǒng)硬件電路設(shè)計(jì)3.1 單片機(jī)最小系統(tǒng)單片機(jī)是電子時(shí)鐘系統(tǒng)的主控制器。其最小系統(tǒng)主要由STC89C52單片機(jī)、晶振電路及單片機(jī)復(fù)位電路組成。謝謝閱讀_晶振系統(tǒng)由兩個(gè)30pf的陶瓷電容和一個(gè)12MHz的晶振組成,分別接在XTAL1、XTAL2上,在單片機(jī)內(nèi)部,這兩個(gè)端口是一個(gè)反相放大器的輸入端,這個(gè)放大器構(gòu)成了片內(nèi)振蕩器,它決定了單片機(jī)的時(shí)鐘周期。感謝閱讀單片機(jī)有一個(gè)復(fù)位引腳RST,高電平有效,只要RST保持高電平,單片機(jī)將循環(huán)復(fù)位,復(fù)位期間,ALE、PSEN輸出高電平。RST從高電平變?yōu)榈碗娖街螅琍C指針變?yōu)?000H,使單片機(jī)從程序存儲器地址為0000H的單元開始執(zhí)行。當(dāng)單片機(jī)執(zhí)行程序出錯(cuò)或進(jìn)入死循環(huán)時(shí),也可按復(fù)位按鈕重新啟動(dòng)。單片機(jī)最小系統(tǒng)如圖2所示。感謝閱讀23.2 AT24C02儲存密碼電路.為了保存用戶設(shè)置的密碼,本系統(tǒng)使用AT24C02用來保存用戶設(shè)置的密碼,它的SCL、SDA端分別接單片機(jī)的T0、T1端,用于與單片機(jī)之間讀寫操作的數(shù)據(jù)傳輸;WP接低電平表示單片機(jī)可以對器件進(jìn)行正常的讀/寫操作;E0、E1、E2是器件地址輸入端,都接低電平表示只有一個(gè)AT24C02被器件尋址。該電路要注意的是SCL、SDA必須加上一上接電阻,阻值為4.7K。用戶設(shè)置的密碼存放在ST24C02中,當(dāng)需要更改或讀取用戶密碼時(shí),只需對ST24C02里的數(shù)據(jù)更改或讀取。ST24C02儲存密碼電路如圖3所示。感謝閱讀_33.3矩陣鍵盤電路矩陣鍵盤電路主要作用就是輸入密碼,它由行線和列線組成,按鍵位于行、列的交叉點(diǎn)上,行列分別連接到按鍵開關(guān)的兩端。無按鍵按動(dòng)作時(shí)列線處于高電平狀態(tài);精品文檔放心下載有按鍵按下時(shí),交點(diǎn)的行線和列線相通,列線電平狀態(tài)將由與此列線相連的行線電平?jīng)Q定。謝謝閱讀行線電平如果低,則列線電平為低;行線電平如果為高,則列線電平也為高。精品文檔放心下載這是識別矩陣式鍵盤按鍵是否被按下的關(guān)鍵所在。由于矩陣鍵盤中行、列線為多鍵公用,各按鍵均影響該鍵所在的行和列的電平,所以必須將行、列線信號配合起來作適當(dāng)?shù)奶幚恚拍艽_定閉合鍵所在的位置。矩陣式鍵盤節(jié)省了好多的I/O口,適用于按鍵數(shù)量比較多的場合。本設(shè)計(jì)的4*4鍵盤即采用矩陣式鍵盤。矩陣鍵盤電路圖如圖4所示感謝閱讀_43.4 液晶顯示電路1602的引腳功能:1腳:為地電源。2腳:VCC接5V正電源。3腳:為液晶顯示器對比度調(diào)整端,接正電源時(shí)對比度最弱,接地電源時(shí)對比度最高,對比度過高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過一個(gè)20K的電位器調(diào)整對比度。謝謝閱讀4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。謝謝閱讀5腳:RW為讀寫信號線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)RS和RW共同為低電平時(shí)可以寫入指令或者顯示地址,精品文檔放心下載當(dāng)RS為低電平RW為高電平時(shí)可以讀忙信號,當(dāng)RS為高電平RW為低電感謝閱讀平時(shí)可以寫入數(shù)據(jù)。6腳:E端為使能端,E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。感謝閱讀7~14腳:D0~D7為8位雙向數(shù)據(jù)線。15~16腳:15腳接VCC,16腳接地。1602電路圖如圖5所示。_5系統(tǒng)軟件設(shè)計(jì)由于單片機(jī)是可編程控制器,故采用C語言對單片機(jī)進(jìn)行程序的編寫。主程序主要由矩陣鍵盤程序、1602液晶屏程序及AT24C02程序組成。感謝閱讀4.1 主程序流程圖_6上圖6為主程序流程圖。開始先初始化,然后屏幕顯示password先掃描按感謝閱讀鍵,確認(rèn)是否可以按鍵按出密碼,如果沒有按鍵按下,則重新掃描按鍵,若有鍵感謝閱讀按下則按下修改鍵并保存密碼就會(huì)出現(xiàn)新的密碼,若不按下修改鍵則還是原來剛謝謝閱讀設(shè)置的初始密碼,按下輸入鍵并輸入密碼,不按下輸入鍵則重新回到掃描按鍵步謝謝閱讀驟,若密碼正確則開鎖。密碼錯(cuò)誤則報(bào)警顯示錯(cuò)誤。4.2子程序流程圖4.2.1AT24C02子程序流程圖7_圖7展示了AT24C02的一個(gè)工作流程:首先是對AT24C02進(jìn)行初始化,謝謝閱讀方便密碼的輸入,當(dāng)輸入的密碼正確,就會(huì)解鎖,顯示屏顯示 open,否則顯示精品文檔放心下載error并重新輸入密碼。4.2.21602子程序流程圖81602顯示器的工作流程圖展示了1602的工作流程:啟動(dòng)時(shí),首先對1602精品文檔放心下載進(jìn)行初始化,然后檢測有沒有數(shù)據(jù)寫入,當(dāng)有數(shù)據(jù)寫入時(shí),1602便讀出數(shù)據(jù)并感謝閱讀顯示,沒有數(shù)據(jù)寫入時(shí),1602就一直處于等待中,直至有數(shù)據(jù)寫入。1602子感謝閱讀程序流程圖如圖8所示。實(shí)物調(diào)試5.1實(shí)物性能分析用KEIL編寫程序軟件編寫程序、經(jīng)過Proteus仿真軟件仿真調(diào)試之后,確精品文檔放心下載認(rèn)了此系統(tǒng)可正常運(yùn)行,在這樣的前提下,我們利用一個(gè)單片機(jī)最小系統(tǒng)、一塊精品文檔放心下載用電路板焊接的模塊和一個(gè)1602液晶顯示屏完成了第一次實(shí)物仿真。謝謝閱讀_圖9圖9界面顯示為輸入密碼,這時(shí)我們按下按鍵輸入密碼。謝謝閱讀當(dāng)我們輸入密碼時(shí),下圖為密碼正確的實(shí)物圖,如圖10所示。精品文檔放心下載_圖10當(dāng)密碼輸入正確時(shí),顯示屏就會(huì)顯示OPEN。_若密碼輸入錯(cuò)誤,下圖為密碼輸入錯(cuò)誤的實(shí)物圖,如圖11所示。精品文檔放心下載11當(dāng)我們輸入錯(cuò)誤的密碼時(shí),顯示屏就會(huì)顯示error。感謝閱讀_下圖為密碼修改成功的實(shí)物圖,如圖12所示。12_當(dāng)密碼修改成功時(shí),顯示屏就會(huì)顯示RestPasswordOK。感謝閱讀心得體會(huì)通過此次課程設(shè)計(jì),我重新把單片機(jī)及相關(guān)知識聯(lián)系在了一起感謝閱讀雖然掌握的知識不是很多,但通過查找資料我還是對單片機(jī)有了很好的了解和掌握。在設(shè)計(jì)中我才發(fā)現(xiàn)單片機(jī)雖然體積小但是功能很強(qiáng)大,在生活中很多地方都可以用到它。謝謝閱讀單片機(jī)這門學(xué)科博大精深,在以后的學(xué)習(xí)中只有多看書,理論與實(shí)踐結(jié)合才能把這門課掌握好。掌握了LCD的使用方法與編程。同時(shí)我也體會(huì)到合作的好處。讓我懂得了如何合作,對不同看法發(fā)表自己的意見。謝謝閱讀此次設(shè)計(jì)中最要的一點(diǎn)是,讓我知道了,理論聯(lián)系實(shí)踐的好處。不管理論學(xué)的再怎么好都必須聯(lián)系實(shí)踐,只有在實(shí)踐中我們才會(huì)更加懂得如何運(yùn)用自己的所學(xué),在實(shí)踐中將自己的知識實(shí)物化。理論聯(lián)系實(shí)踐是我們獲取知識的最佳途徑。感謝閱讀參考文獻(xiàn)[1]譚浩強(qiáng)主編.C程序設(shè)計(jì)題解與上機(jī)指導(dǎo)(第 3版)[M].北京,清華大學(xué)出版社,精品文檔放心下載2005.16-24_[2]謝維成楊家國董秀成,單片機(jī)原理與應(yīng)用及C51程序設(shè)計(jì)(第2版)[M],北京,清華大謝謝閱讀學(xué)出版社,2009.7.25-36附錄1(1)系統(tǒng)總電路圖系統(tǒng)總電路圖,如圖12所示。13_(2)系統(tǒng)仿真圖系統(tǒng)仿真圖,如圖13所示。14(3)PCB板設(shè)計(jì)使用的PCB如圖14所示_圖15附錄2程序清單#include<reg51.h>#include<intrins.h>#defineLCM_Data P0#defineucharunsignedchar感謝閱讀#defineuint unsignedint//精品文檔放心下載#defineBusy0x80//用于檢測LCM狀態(tài)字中的Busy標(biāo)識#definew6//定義密碼位數(shù)sbitlcd1602_rs=P2^5;sbitlcd1602_rw=P2^6;sbitlcd1602_en=P2^7;sbitScl=P3^4;//24C02串行時(shí)鐘sbitSda=P3^5;//24C02串行數(shù)據(jù)sbitALAM=P2^1;//報(bào)警sbitKEY=P2^0;//開鎖sbitopen_led=P2^2;//開鎖指示燈bitoperation=0;//操作標(biāo)志位bitpass=0;//密碼正確標(biāo)志//bitResetEn=0;//重設(shè)密碼充(允)許標(biāo)志bitReInputEn=0;//重置輸入充(允)許標(biāo)志_bit s3_keydown=0; //3秒按鍵標(biāo)志位感謝閱讀bit key_disable=0; //鎖定鍵盤標(biāo)志謝謝閱讀unsignedcharcountt0,second;//t0中斷計(jì)數(shù)器,秒計(jì)數(shù)器精品文檔放心下載voidDelay5Ms(void);unsignedcharcodea[]={0xFE,0xFD,0xFB,0xF7}; //控盤掃描控制表精品文檔放心下載unsignedcharcodestart_line[]={"password: "};精品文檔放心下載unsignedcharcodename[]={"2===CodedLock==="}; //顯示名稱謝謝閱讀unsignedcharcodeCorrect[]={"correct"};//輸入正確unsignedcharcodeError[]={"error"};//輸入錯(cuò)誤unsignedcharcodecodepass[]={"pass"};unsignedcharcodeLockOpen[]={"open"};//OPENunsignedcharcodeSetNew[]={"SetNewWordEnable"};unsignedcharcodeInput[]={"input:"};//INPUTunsignedcharcodeResetOK[]={"ResetPasswordOK"};unsignedcharcodeinitword[]={"Initpassword..."};unsignedcharcodeEr_try[]={"error,tryagain!"};unsignedcharcodeagain[]={"inputagain"};unsignedcharInputData[6];//輸入密碼暫存區(qū)unsignedcharCurrentPassword[6]={1,1,1,1,1,1};//當(dāng)前密碼值unsignedcharTempPassword[6];unsignedcharN=0;//密碼輸入位數(shù)記數(shù)unsignedcharErrorCont;//錯(cuò)誤次數(shù)計(jì)數(shù)_unsignedcharCorrectCont; //正確輸入計(jì)數(shù)謝謝閱讀unsignedcharReInputCont; //重新輸入計(jì)數(shù)精品文檔放心下載unsignedcharcodeinitpassword[6]={1,1,1,1,1,1};精品文檔放心下載//=====================5ms 延 時(shí)精品文檔放心下載==============================感謝閱讀voidDelay5Ms(void){unsignedintTempCyc=5552;精品文檔放心下載while(TempCyc--);}//===================400ms 延 時(shí)謝謝閱讀==============================精品文檔放心下載voidDelay400Ms(void){unsignedcharTempCycA=5;精品文檔放心下載unsignedintTempCycB;while(TempCycA--) {TempCycB=7269;while(TempCycB--); }}//============================24C02=============感謝閱讀===============voidmDelay(uintt)//延時(shí){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();} /*應(yīng)答位*/voidAck(void)_{ Sda=0; Nop(); Scl=1; Nop();精品文檔放心下載Scl=0;}/*反向應(yīng)答位*/voidNoAck(void){Sda=1; Nop(); Scl=1; Nop();精品文檔放心下載Scl=0;} /*發(fā)送數(shù)據(jù)子程序,Data為要求發(fā)送的數(shù)據(jù)*/精品文檔放心下載voidSend(ucharData){ucharBitCounter=8;chartemp;do {temp=Data;Scl=0;Nop();if((temp&0x80)==0x80)Sda=1;elseSda=0;Scl=1;temp=Data<<1;Data=temp;BitCounter--; }while(BitCounter);Scl=0;} /*讀一字節(jié)的數(shù)據(jù),并返回該字節(jié)值*/謝謝閱讀_ucharRead(void){uchartemp=0;uchartemp1=0;ucharBitCounter=8;Sda=1;do{ Scl=0;Nop();Scl=1;Nop();if(Sda)temp=temp|0x01;elsetemp=temp&0xfe;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(0xa0);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(0xa0);Ack();Send(Address+i);Ack();Start();_Send(0xa1);Ack();*(PData+i)=Read();Scl=0;NoAck();Stop(); }}//============================LCD1602===========精品文檔放心下載========#defineyi0x80#defineer0x80+0x40//----------------延時(shí)函數(shù)----------------------精品文檔放心下載voiddelay(uintxms)//延時(shí)函數(shù),有參函數(shù)感謝閱讀{uintx,y;for(x=xms;x>0;x--)for(y=110;y>0;y--);}//--------------------------寫指令---------------------------謝謝閱讀voidwrite_1602com(ucharcom)//****液晶寫入指令函數(shù)****精品文檔放心下載{lcd1602_rs=0; //數(shù)據(jù)/指令選擇置為指令感謝閱讀lcd1602_rw=0; //讀寫選擇置為寫P0=com; //送入數(shù)據(jù)_delay(1);lcd1602_en=1;//拉高使能端,為制造有效的下降沿做準(zhǔn)備delay(1);精品文檔放心下載lcd1602_en=0; //en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令謝謝閱讀return;}//-------------------------寫數(shù)據(jù)-----------------------------謝謝閱讀voidwrite_1602dat(uchardat) //***液晶寫入數(shù)據(jù)函數(shù)****感謝閱讀{lcd1602_rs=1; //數(shù)據(jù)/指令選擇置為數(shù)據(jù)謝謝閱讀lcd1602_rw=0; //讀寫選擇置為寫P0=dat; //送入數(shù)據(jù)delay(1);lcd1602_en=1; //en置高電平,為制造下降沿做準(zhǔn)備精品文檔放心下載delay(1);lcd1602_en=0; //en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令精品文檔放心下載return;}//-------------------------初始化-------------------------謝謝閱讀voidlcd_init(void){write_1602com(0x38);//設(shè)置液晶工作模式,意思:16*2行顯示,5*7點(diǎn)陣,8位數(shù)據(jù)精品文檔放心下載write_1602com(0x0c);//開顯示不顯示光標(biāo)精品文檔放心下載_write_1602com(0x06);//整屏不移動(dòng),光標(biāo)自動(dòng)右移謝謝閱讀write_1602com(0x01);//清顯示}//============== 將 按 鍵 值 編 碼 為 數(shù) 值感謝閱讀=========================unsignedcharcoding(unsignedcharm) {精品文檔放心下載unsignedchark;switch(m) {case(0x18):k=1;break;case(0x28):k=2;break;case(0x48):k=3;break;case(0x88):k='A';break;case(0x14):k=4;break;case(0x24):k=5;break;case(0x44):k=6;break;case(0x84):k='B';break;case(0x12):k=7;break;case(0x22):k=8;break;case(0x42):k=9;break;case(0x82):k='C';break;case(0x11):k='*';break;case(0x21):k=0;break;_case(0x41):k='#';break;case(0x81):k='D';break; }精品文檔放心下載return(k);}//============= 按 鍵 檢 測 并 返 回 按 鍵 值謝謝閱讀============================謝謝閱讀unsignedcharkeynum(void){精品文檔放心下載unsignedcharrow,col,i; P1=0xf0;精品文檔放心下載if((P1&0xf0)!=0xf0) {Delay5Ms();Delay5Ms();if((P1&0xf0)!=0xf0) {row=P1^0xf0; //確定行線i=0;P1=a[i]; //精確定位while(i<4) {if((P1&0xf0)!=0xf0){col=~(P1&0xff); //確定列線break; //已定位后提前退出}else {i++;_P1=a[i]; } } }else {return0; }while((P1&0xf0)!=0xf0);return(row|col); //行線與列線組合后返回謝謝閱讀}elsereturn0; //無鍵按下時(shí)返回0謝謝閱讀}//==================一聲提示音,表示有效輸入感謝閱讀========================voidOneAlam(void){ALAM=0;Delay5Ms();ALAM=1;}//==================二聲提示音,表示操作成功感謝閱讀========================voidTwoAlam(void){ALAM=0;Delay5Ms();ALAM=1;Delay5Ms();ALAM=0;_Delay5Ms();ALAM=1;}//===================== 三 聲 提 示 音 , 表 示 錯(cuò) 誤精品文檔放心下載========================voidThreeAlam(void){ALAM=0;Delay5Ms(); ALAM=1;Delay5Ms(); ALAM=0;Delay5Ms(); ALAM=1;Delay5Ms(); ALAM=0;Delay5Ms(); ALAM=1;}//===顯示輸入的 N 個(gè)數(shù)字,用*代替以便隱藏精品文檔放心下載==========================感謝閱讀voidDisplayOne(void){//DisplayOneChar(9+N,1,'*');謝謝閱讀write_1602com(yi+5+N);write_1602dat('*');}//======================= 顯 示 提 示 輸 入精品文檔放心下載=========================voidDisplayChar(void){unsignedchari;_if(pass==1){//DisplayListChar(0,1,LockOpen);精品文檔放心下載write_1602com(er);for(i=0;i<16;i++){write_1602dat(LockOpen[i]); } }感謝閱讀else{if(N==0){//DisplayListChar(0,1,Error);謝謝閱讀write_1602com(er);for(i=0;i<16;i++) {write_1602dat(Error[i]); } }感謝閱讀else {//DisplayListChar(0,1,start_line);精品文檔放心下載write_1602com(er);for(i=0;i<16;i++){write_1602dat(start_line[i]);感謝閱讀} } }}voidDisplayInput(void){_unsignedchari;if(CorrectCont==1){//DisplayListChar(0,0,Input);精品文檔放心下載write_1602com(er);for(i=0;i<16;i++) {write_1602dat(Input[i]); } }}謝謝閱讀//======重置密碼=========================voidResetPassword(void){謝謝閱讀unsignedchari;unsignedcharj;//ResetEn=1; //開啟重置功能if(pass==0){pass=0;DisplayChar(); //寫屏函數(shù)ThreeAlam();}else {if(ReInputEn==1) //打開重置功能{if(N==6)_{ReInputCont++;if(ReInputCont==2){for(i=0;i<6;){if(TempPassword[i]==InputData[i])謝謝閱讀//將兩次輸入的新密碼作對比i++;else{//DisplayListChar(0,1,Error);謝謝閱讀write_1602com(er);for(j=0;j<16;j++){write_1602dat(Error[j]); }精品文檔放心下載ThreeAlam(); //錯(cuò)誤提示pass=0;ReInputEn=0; //關(guān)閉重置功能,ReInputCont=0; //輸入次數(shù)清零DisplayChar(); //寫屏函數(shù)break; } }_if(i==6){//DisplayListChar(0,1,ResetOK);感謝閱讀write_1602com(er);for(j=0;j<16;j++){write_1602dat(ResetOK[j]);感謝閱讀}TwoAlam(); //操作成功提示W(wǎng)rToROM(TempPassword,0,6);//將新密碼寫入24C02存儲謝謝閱讀ReInputEn=0; //關(guān)閉重置功能?}ReInputCont=0; //輸入次數(shù)清零//ResetEn=0;CorrectCont=0; }else{OneAlam();//DisplayListChar(0,1,again);//顯示再次輸入一次write_1602com(er);感謝閱讀for(j=0;j<16;j++) {write_1602dat(again[j]); }感謝閱讀_for(i=0;i<6;i++){TempPassword[i]=InputData[i];//將第一次輸入的數(shù)據(jù)暫存起來感謝閱讀}}N=0; //輸入數(shù)據(jù)位數(shù)計(jì)數(shù)器清零} }}}//========輸入密碼錯(cuò)誤超過三過,報(bào)警并鎖死鍵盤謝謝閱讀======================voidAlam_KeyUnable(void){P1=0x00; {ALAM=~ALAM;Delay5Ms(); }}//========= 取 消 所 有 操 作================================謝謝閱讀voidCancel(void){unsignedchari;unsignedcharj;//DisplayListChar(0,1,start_line);謝謝閱讀write_1602com(er);for(j=0;j<16;j++) {_write_1602dat(start_line[j]); }謝謝閱讀TwoAlam(); //提示音for(i=0;i<6;i++) {InputData[i]=0; }KEY=1; //關(guān)閉鎖ALAM=1; //報(bào)警關(guān)鎖operation=0; //操作標(biāo)志位清零pass=0; //密碼正確標(biāo)志清零//ResetEn=0; //重設(shè)密碼充許標(biāo)志清零精品文檔放心下載ReInputEn=0; //重置輸入充許標(biāo)志清零ErrorCont=0; //密碼錯(cuò)誤輸入次數(shù)清零CorrectCont=0; //密碼正確輸入次數(shù)清零感謝閱讀ReInputCont=0; //重置密碼輸入次數(shù)清零精品文檔放心下載open_led=1;s3_keydown=0;key_disable=0;N=0;}//輸入位數(shù)計(jì)數(shù)器清零//確認(rèn)鍵,并通過相應(yīng)標(biāo)志位執(zhí)行相應(yīng)功能========voidEnsure(void){感謝閱讀unsignedchari,j;RdFromROM(CurrentPassword,0,6);//從24C02里讀出存儲密碼if(N==6){謝謝閱讀_if(ReInputEn==0) //重置密碼功能未開啟謝謝閱讀{for(i=0;i<6;){if(CurrentPassword[i]==InputData[i]) {精品文檔放心下載i++; }else{ErrorCont++;if(ErrorCont==3)//錯(cuò)誤輸入計(jì)數(shù)達(dá)三次時(shí),報(bào)警并鎖定鍵盤謝謝閱讀{write_1602com(er);for(i=0;i<16;i++) {write_1602dat(Error[i]); }精品文檔放心下載doAlam_KeyUnable();while(1); }else {TR0=1; //開啟定時(shí)key_disable=1; //鎖定鍵盤pass=0;break;_}} }if(i==6) {CorrectCont++;if(CorrectCont==1)//正確輸入計(jì)數(shù),當(dāng)只有一次正確輸入時(shí),開鎖,精品文檔放心下載{//DisplayListChar(0,1,LockOpen);精品文檔放心下載write_1602com(er);for(j=0;j<16;j++) {write_1602dat(LockOpen[j]); }謝謝閱讀TwoAlam(); //操作成功提示音KEY=0; //開鎖pass=1; //置正確標(biāo)志位TR0=1; //開啟定時(shí)open_led=0; //開鎖指示燈亮for(j=0;j<6;j++) //將輸入清除{InputData[i]=0; } }else //當(dāng)兩次正確輸入時(shí),開啟重置密碼功能{//DisplayListChar(0,1,SetNew);謝謝閱讀write_1602com(er);for(j=0;j<16;j++) {write_1602dat(SetNew[j]);_}TwoAlam(); //操作成功提示ReInputEn=1; //允許重置密碼輸入CorrectCont=0; //正確計(jì)數(shù)器清零} }else//=====當(dāng)?shù)谝淮问褂没蛲浢艽a時(shí)可以用111111對其密碼初始化感謝閱讀========{if((InputData[0]==1)&&(InputData[1]==1)&&(InputData[2]==1)&&(InputData[3]==1)&&(InputData[4]==1)&&(InputData[5]==1))謝謝閱讀{WrToROM(initpassword,0,6);//強(qiáng)制將初始密碼寫入24C02存儲感謝閱讀//DisplayListChar(0,1,initword);//顯示初始化密碼感謝閱讀write_1602com(er);for(j=0;j<16;j++) {write_1602dat(initword[j]); }感謝閱讀TwoAlam();Delay400Ms();TwoAlam();N=0; }else {//DisplayListChar(0,1,Error);謝謝閱讀write_1602com(er);_for(j=0;j<16;j++){write_1602dat(Error[j]); }感謝閱讀ThreeAlam(); //錯(cuò)誤提示音pass=0; } } }else //當(dāng)已經(jīng)開啟重置密碼功能時(shí),而按下開鎖鍵,謝謝閱讀{//DisplayListChar(0,1,Er_try);感謝閱讀write_1602com(er);for(j=0;j<16;j++) {write_1602dat(Er_try[j]); }感謝閱讀ThreeAlam(); } }else {//DisplayListChar(0,1,Error);感謝閱讀write_1602com(er);for(j=0;j<16;j++) {write_1602dat(Error[j]); }精品文檔放心下載ThreeAlam(); //錯(cuò)誤提示音pass=0; }N=0;//將輸入數(shù)據(jù)計(jì)數(shù)器清零,為下一次輸入作準(zhǔn)備operation=1;}謝謝閱讀//============================== 主 函 數(shù)謝謝閱讀_========================

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論