版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、摘要自從人類開始制造鎖以來長(zhǎng)期所使用的鎖都是機(jī)械鎖,通俗的講就是彈子芯鎖。而傳統(tǒng)的彈子芯鎖,由于其本身鎖芯密齒的有限加之開鎖工具鑰匙的容易復(fù)制性,使得其安全性大大降低,隨著人們生活質(zhì)量的提高,如何實(shí)現(xiàn)安全有效的防盜這一問題受到越來越多人的關(guān)注。傳統(tǒng)的機(jī)械鎖由于安全性能太差,被撬的事件屢見不鮮,相比之下,電子密碼鎖因其保密性強(qiáng),使用靈活性好,安全系數(shù)高,受到了廣大用戶的歡迎。電子密碼鎖作為一種新型的鎖,不僅擁有海量的密齒,通常從10000到10000000不等,還省去了傳統(tǒng)機(jī)械鎖的鑰匙,使用者只要記得其密碼,便可以開啟,從而大大提高了防盜功能。關(guān)鍵詞:?jiǎn)纹瑱C(jī)、系統(tǒng)搭建、C語(yǔ)言、微機(jī)原理目錄摘要2
2、第1章課題背景11.1課程設(shè)計(jì)目的11.2設(shè)計(jì)方案21.2.1選題內(nèi)容21.2.2選題要求21.2.3方案選擇2第2章硬件電路設(shè)計(jì)42.1核心芯片42.2顯示電路62.3矩陣鍵盤72.424C02芯片82.5報(bào)警電路102.6開鎖電路102.7最小系統(tǒng)11第3章程序部分123.1程序流程圖123.1.1密碼正誤判斷流程圖123.1.2密碼重置流程圖123.1.3報(bào)警流程圖133.2程序清單133.2.1主函數(shù)133.2.2LCD1602模塊183.2.324C02模塊213.2.4矩陣鍵盤模塊263.2.5報(bào)警程序283.2.6密碼判斷程序303.2.7密碼重置程序343.2.8取消按鍵程序3
3、73.2.9中斷程序38第4章調(diào)試及運(yùn)行結(jié)果414.1調(diào)試過程414.2運(yùn)行結(jié)果42第5章結(jié)論與展望445.1結(jié)論445.2展望44第1章 課題背景1.1 課程設(shè)計(jì)目的在日常的生活和工作中,住宅與部門的安全防范、單位的文件檔案、財(cái)務(wù)報(bào)表以及一些個(gè)人資料的保存多以加鎖的辦法來解決。若使用傳統(tǒng)的機(jī)械式鑰匙開鎖,人們常需要攜帶多把鑰匙,使用極不方便,且鑰匙丟失后安全性即大打折扣。隨著科學(xué)技術(shù)的不斷發(fā)展,人們對(duì)日常生活中的安全保險(xiǎn)器件的要求越來越高。為了滿足人們對(duì)鎖的使用要求,增加其安全性,用密碼代替鑰匙的密碼鎖應(yīng)運(yùn)而生。電子密碼鎖是一種通過密碼輸入來控制電路或是芯片工作(訪問控制系統(tǒng)),從而控制機(jī)械
4、開關(guān)的閉合,完成開鎖、閉鎖任務(wù)的電子產(chǎn)品。它的種類很多,有簡(jiǎn)易的電路產(chǎn)品,也有基于芯片的性價(jià)比較高的產(chǎn)品?,F(xiàn)在應(yīng)用較廣的電子密碼鎖是以芯片為核心,通過編程來實(shí)現(xiàn)的。電子鎖在安全技術(shù)防范領(lǐng)域,具有防盜報(bào)警功能的電子密碼鎖代替?zhèn)鹘y(tǒng)的機(jī)械式密碼鎖,克服了機(jī)械式密碼鎖密碼量少、安全性能差的缺點(diǎn),使密碼鎖無論在技術(shù)上還是在性能上都大大提高一步。本設(shè)計(jì)采用以51單片機(jī)為主控芯片,結(jié)合外圍電路連接,組成電子密碼鎖。用戶可以通過鍵盤輸入正確的密碼才能將鎖打開,同時(shí)結(jié)合智能報(bào)警系統(tǒng),當(dāng)用戶多次輸入密碼錯(cuò)誤后,將會(huì)自動(dòng)報(bào)警,提高了鎖的安全性。考慮到人們有可能會(huì)忘記密碼,因此本設(shè)計(jì)留有一個(gè)恢復(fù)初始設(shè)置的功能,只要輸
5、入該特定的密碼即可實(shí)現(xiàn)對(duì)密碼的初始化設(shè)置。1.2 設(shè)計(jì)方案1.2.1 選題內(nèi)容密碼鎖在輸入密碼正確的條件下輸出開鎖電平,控制電控鎖開啟,同時(shí)顯示00字樣。當(dāng)輸入密碼錯(cuò)誤時(shí),發(fā)出錯(cuò)誤警告聲音,同時(shí)顯示FF字樣。當(dāng)六次誤碼輸入的條件下,產(chǎn)生報(bào)警電平報(bào)警。還可以實(shí)現(xiàn)對(duì)密碼的修改,修改成功后,蜂鳴器發(fā)出確認(rèn)音。1.2.2 選題要求選用合適的芯片和適當(dāng)?shù)拇鎯?chǔ)器及接口芯片完成相應(yīng)的功能。用LED顯示器顯示電子鎖的當(dāng)前狀態(tài)。畫出詳細(xì)的硬件連接圖。給出程序設(shè)計(jì)思路、畫出軟件流程圖。給出所有程序清單并加上必要注釋。完成設(shè)計(jì)說明書(列出參考文獻(xiàn),所用器件型號(hào))。1.2.3 方案選擇根據(jù)題目的要求,需要考慮以下幾方
6、面的內(nèi)容:鍵盤的輸入、密碼的判別、密碼重置以及輸出信號(hào)控制鍵盤的輸入:本設(shè)計(jì)擬采用矩陣鍵盤作為用戶的輸入端,實(shí)現(xiàn)對(duì)密碼的輸入以及其他特殊功能的操作。密碼的判別:利用用戶輸入的密碼與系統(tǒng)自帶的密碼進(jìn)行比較即可實(shí)現(xiàn)對(duì)于密碼正確或者錯(cuò)誤的判斷。密碼重置:考慮到用戶的需求,密碼重置包括兩個(gè)部分。一種情況是用戶忘記密碼,需要重新設(shè)置密碼。對(duì)于這種情況,我們事先設(shè)計(jì)好一個(gè)固定的密碼作為密保,一旦用戶輸入該密碼,系統(tǒng)自動(dòng)把密碼重置為初始密碼。另一種情況是用戶主動(dòng)去修改密碼。對(duì)于這種情況,只要用戶輸入原密碼后,按下重置按鈕即可設(shè)置新密碼。輸出信號(hào)控制:輸出信號(hào)只有兩種。一種為正確的情況,此時(shí)控制電子鎖電路工作
7、,電子鎖自動(dòng)打開。另一種為錯(cuò)誤報(bào)警的情況,一旦用戶輸入錯(cuò)誤密碼次數(shù)達(dá)到3次,則密碼鎖自動(dòng)進(jìn)入強(qiáng)制封鎖狀態(tài),用戶將無法再輸入密碼,同時(shí)報(bào)警器也會(huì)發(fā)出警報(bào)。1.2.3.1 程序設(shè)計(jì)思路程序分為主程序和中斷服務(wù)程序兩個(gè)主要部分。主程序完成變量和單片機(jī)特殊功能寄存器的初始化后,進(jìn)入一個(gè)循環(huán)結(jié)構(gòu)。在循環(huán)中,首先判斷有無按鍵按下,若有按鍵則判斷是否數(shù)字鍵還是功能鍵,根據(jù)按鍵的情況執(zhí)行相應(yīng)的功能。然后根據(jù)密碼是否正確的判斷情況,執(zhí)行相應(yīng)的操作。循環(huán)中最后將需要顯示的內(nèi)容通過動(dòng)態(tài)掃描在數(shù)碼管上顯示。中斷服務(wù)程序只要實(shí)現(xiàn)三個(gè)狀態(tài)的計(jì)時(shí),待機(jī)時(shí)需要計(jì)時(shí)5秒,密碼正確需要計(jì)時(shí)3s,密碼3次輸入錯(cuò)誤需要計(jì)時(shí)10秒。當(dāng)
8、前處于何種計(jì)時(shí),由主程序根據(jù)密碼判斷結(jié)果來決定。1.2.3.2 硬件設(shè)計(jì)思路本設(shè)計(jì)用到的硬件部分包括:89C52單片機(jī)、矩陣鍵盤、LCD 1602液晶顯示屏、報(bào)警器、指示電路??傮w設(shè)計(jì)框架如圖1-1所示:圖1-1 總體設(shè)計(jì)框架第2章 硬件電路設(shè)計(jì)2.1 核心芯片密碼鎖采用AT89C52芯片作為核心芯片。這款芯片是一個(gè)低電壓,高性能CMOS 8位單片機(jī),片內(nèi)含8k bytes的可反復(fù)擦寫的Flash只讀程序存儲(chǔ)器和256 bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存儲(chǔ)單元,AT
9、89C52單片機(jī)在電子行業(yè)中有著廣泛的應(yīng)用。本單片機(jī)具有以下特性: 與 MCS-51 兼容 4K字節(jié)可編程FLASH存儲(chǔ)器(壽命:1000寫/擦循環(huán)) 全靜態(tài)工作:0 Hz - 24 KHz 三級(jí)程序存儲(chǔ)器保密鎖定 128*8位內(nèi)部RAM 32條可編程I/O線 兩個(gè)16位定時(shí)器/計(jì)數(shù)器 5個(gè)中斷源 可編程串行通道 低功耗的閑置和掉電模式 片內(nèi)振蕩器和時(shí)鐘電路AT89C52有40個(gè)引腳,32個(gè)外部雙向輸入/輸出(I/O)端口,同時(shí)內(nèi)含2個(gè)外中斷口,3個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,2 個(gè)讀寫口線,AT89C52可以按照常規(guī)方法進(jìn)行編程,也可以在線編程。其將通用的微處理器和Flas
10、h存儲(chǔ)器結(jié)合在一起,特別是可反復(fù)擦寫的 Flash存儲(chǔ)器可有效地降低開發(fā)成本。該芯片引腳圖如圖2 1所示:圖2-1 AT89C52引腳圖實(shí)驗(yàn)總電路連接,如圖2-2所示:圖2-2 總電路連接圖2.2 顯示電路顯示輸出選擇了LCD 1602液晶顯示屏作為顯示設(shè)備。1602液晶也叫1602字符型液晶,它是一種專門用來顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶模塊。它由若干個(gè)5X7或者5X11等點(diǎn)陣字符位組成,每個(gè)點(diǎn)陣字符位都可以顯示一個(gè)字符,每位之間有一個(gè)點(diǎn)距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用。1602采用標(biāo)準(zhǔn)的16腳接口,其中有幾個(gè)特殊的引腳,將在下面進(jìn)行介紹:第4腳:RS為寄存器選擇
11、,高電平1時(shí)選擇數(shù)據(jù)寄存器、低電平0時(shí)選擇指令寄存器。第5腳:RW為讀寫信號(hào)線,高電平(1)時(shí)進(jìn)行讀操作,低電平(0)時(shí)進(jìn)行寫操作。第6腳:E(或EN)端為使能(enable)端,高電平(1)時(shí)讀取信息,負(fù)跳變時(shí)執(zhí)行指令。第714腳:D0D7為8位雙向數(shù)據(jù)端??梢詫?duì)數(shù)據(jù)進(jìn)行輸入或者讀出。1602控制指令如圖2-3所示:圖2-3 1602控制指令表其中有幾個(gè)重要的指令:指令5:控制光標(biāo)或字符移動(dòng)以及方向。指令8:數(shù)據(jù)指針設(shè)置指令。控制器內(nèi)部設(shè)有一個(gè)數(shù)據(jù)地址指針,用戶可以通過它們?cè)L問內(nèi)部的全部80 B的RAM。指令碼 = 80H + 地址碼(0 27H,40 67H)。指令10:數(shù)據(jù)寫入控制。把數(shù)
12、據(jù)寫入到1602內(nèi)部寄存器CGRAM或者DDRAM中。1602液晶顯示屏與單片機(jī)接口如圖2-4所示:圖2-4 1602液晶顯示屏與單片機(jī)接口2.3 矩陣鍵盤在單片機(jī)按鍵使用過程中,當(dāng)鍵盤中按鍵數(shù)量較多時(shí) 為了減少端口的占用通常將按鍵排列成矩陣形式,如下圖2-5所示。圖2-5 矩陣鍵盤單片機(jī)的整一個(gè)8位端口可以構(gòu)成 4*4=16 個(gè)矩陣式按鍵 ,相比獨(dú)立式按鍵接法多出了一倍,而且線數(shù)越多區(qū)別就越明顯。確定矩陣式鍵盤上任何一個(gè)鍵被按下通常采用行掃描法。對(duì)于掃描法:首先,不斷循環(huán)地給低四位獨(dú)立的低電平,然后判斷鍵盤中有無鍵按下。將低位中其中一列線(P1.0P1.3中其中一列)置低電平然后檢測(cè)行線的狀
13、態(tài)(高4位,即P1.4P1.7,由于線與關(guān)系,只要與低電平列線接通,即跳變成低電平),只要有一行的電平為低就延時(shí)一段時(shí)間以消除抖動(dòng),然后再次判斷,假如依然為低電平,則表示鍵盤中真的有鍵被按下而且閉合的鍵位于低電平的4個(gè)按鍵之中任其一,若所有行線均為高電平則表示鍵盤中無鍵按下。矩陣鍵盤電路連接,如圖2-6所示:圖2-6 矩陣鍵盤電路連接圖2.4 24C02芯片串行E2PROM是基于I2C-BUS 的存儲(chǔ)器件,遵循二線制協(xié)議,由于其具有接口方便,體積小,數(shù)據(jù)掉電不丟失等特點(diǎn),在儀器儀表及工業(yè)自動(dòng)化控制中得到大量的應(yīng)用。其引腳圖如圖所示:A0,A1,A2為硬件地址,根據(jù)引腳上的電平?jīng)Q定當(dāng)前器件的地址
14、。WP為寫保護(hù)引腳,當(dāng)該引腳高電平時(shí)器件只能讀不能寫。SCL,SDA為I2C引腳。VCC,GND是芯片的電源和地。以ATMEL公司的AT24C02為例,該器件在讀/寫操作時(shí),要做兩次尋址操作,先做設(shè)備尋址(包括讀/寫標(biāo)志操作),得到應(yīng)答后,再做片內(nèi)數(shù)據(jù)尋址,在片內(nèi)尋址時(shí)有兩種類型,16位地址尋址和8位尋址,AT24C02屬于8位尋址;16位地址尋址時(shí),將地址分成低8位和高8位兩段發(fā)送,這里主要說明8位尋址的情況。AT24C02的設(shè)備地址格式為1,0,1,0,A2,A1,A0,R/W;其中前四位1010(下面以16進(jìn)制表示即0xA0)表示設(shè)備的類型,A2A1A0表示器件地址,最低位表讀寫;如果A
15、0A1A2沒有被其他設(shè)備占用,則在I2C總線上可掛載這樣的設(shè)備8個(gè)(因?yàn)橛腥齻€(gè)引腳每個(gè)引腳有01兩種表示,所以有23個(gè)設(shè)備地址)。本電路中,電路連接圖如圖所示:2.5 報(bào)警電路報(bào)警電路采用一個(gè)蜂鳴器來代替。通過單片機(jī)的一個(gè)I/O口來控制。電路連接如圖2-7所示:圖2-7 報(bào)警電路當(dāng)I/O口輸出低電平,Q2 截?cái)?,蜂鳴器不工作;當(dāng)I/O口輸出高電平,Q2 導(dǎo)通,蜂鳴器發(fā)出蜂鳴聲。2.6 開鎖電路通過一個(gè)電磁繼電器即可實(shí)現(xiàn)對(duì)開關(guān)的控制。電路連接如圖2-8所示:圖2-8 開鎖電路當(dāng)I/O口輸出低電平,Q1 截?cái)啵姶爬^電器不工作,鎖處于關(guān)閉狀態(tài);當(dāng)I/O口輸出高電平,Q1 截?cái)?,電磁繼電器開關(guān)打下,
16、電路接通,自動(dòng)開鎖。2.7 最小系統(tǒng)為了使單片機(jī)正常工作,需要搭建單片機(jī)的最小系統(tǒng)。對(duì)于AT89C52來說,它的最小系統(tǒng)需要包括以下內(nèi)容:復(fù)位電路、晶振電路。具體電路連接如圖2-9所示:圖2-9 最小系統(tǒng)電路連接圖第3章 程序部分3.1 程序流程圖3.1.1 密碼正誤判斷流程圖3.1.2 密碼重置流程圖3.1.3 報(bào)警流程圖3.2 程序清單3.2.1 主函數(shù)#include <REG52.h>#include<intrins.h>#define LCM_Data P0#define uchar unsigned char #define uint unsigned in
17、t#define w 6/定義密碼位數(shù)sbit lcd1602_rs=P35;sbit lcd1602_en=P34;sbit Scl=P26;/24C02串行時(shí)鐘sbit Sda=P27;/24C02串行數(shù)據(jù)sbit ALAM = P23;/報(bào)警sbit KEY = P10;/開鎖sbit open_led=P12;/開鎖指示燈bit operation=0;/操作標(biāo)志位bit pass=0;/密碼正確標(biāo)志bit ReInputEn=0;/重置輸入充許標(biāo)志bit s3_keydown=0;/3秒按鍵標(biāo)志位bit key_disable=0;/鎖定鍵盤標(biāo)志unsigned char count
18、t0,second;/t0中斷計(jì)數(shù)器,秒計(jì)數(shù)器void Delay5Ms(void);unsigned char code a=0xFE,0xFD,0xFB,0xF7; /控盤掃描控制表unsigned char code b="0123456789"unsigned char code start_line= "password: "unsigned char code name = "=Coded Lock=" /顯示名稱unsigned char code Correct = " correct "/輸入正確
19、unsigned char code Error = " error " /輸入錯(cuò)誤unsigned char code codepass= " pass " unsigned char code LockOpen= " open "/OPENunsigned char code SetNew = "SetNewWordEnable"unsigned char code Input = "input: "/INPUTunsigned char code ResetOK = "Reset
20、PasswordOK "unsigned char code initword= "Init password."unsigned char code Er_try= "error,try again!"unsigned char code again= "input again "unsigned char InputData6;/輸入密碼暫存區(qū)unsigned char CurrentPassword6=1,3,1,4,2,0; /當(dāng)前密碼值unsigned char TempPassword6;unsigned cha
21、r N=0;/密碼輸入位數(shù)記數(shù)unsigned char ErrorCont;/錯(cuò)誤次數(shù)計(jì)數(shù)unsigned char CorrectCont;/正確輸入計(jì)數(shù)unsigned char ReInputCont; /重新輸入計(jì)數(shù)unsigned char code initpassword6=0,0,0,0,0,0;/=主函數(shù)=void main(void)unsigned char KEY2,NUM;unsigned char i,j;P1=0xFF; TMOD=0x11; /定義兩個(gè)16位定時(shí)器TL0=0xB0; /置初值TH0=0x3C;EA=1; /開總中斷ET0 = 1; /開定時(shí)器1
22、中斷TR0 = 0;/啟動(dòng)定時(shí)器0Delay400Ms(); /啟動(dòng)等待,等LCM講入工作狀態(tài)lcd_init(); /LCD初始化write_1602com(yi);/日歷顯示固定符號(hào)從第一行第0個(gè)位置之后開始顯示for(i=0;i<16;i+)write_1602dat(namei);/向液晶屏寫日歷顯示的固定符號(hào)部分write_1602com(er);/時(shí)間顯示固定符號(hào)寫入位置,從第2個(gè)位置后開始顯示for(i=0;i<16;i+)write_1602dat(start_linei);/寫顯示時(shí)間固定符號(hào),兩個(gè)冒號(hào)write_1602com(er+9);/設(shè)置光標(biāo)位置writ
23、e_1602com(0x0f);/設(shè)置光標(biāo)為閃爍Delay5Ms(); /延時(shí)片刻(可不要)N=0;/初始化數(shù)據(jù)輸入位數(shù)while(1)if(key_disable=1)Alam_KeyUnable();elseALAM=1;/關(guān)報(bào)警KEY2=keynum();/按鍵檢測(cè)if(KEY2!=0)if(key_disable=1)second=0;elseNUM=coding(KEY2);switch(NUM)case ('A'): ; break;case ('B'):; break;case ('C'): ; break;case ('D
24、'): ResetPassword();break; /重新設(shè)置密碼case ('*'): Cancel();break; /取消當(dāng)前輸入case ('#'): Ensure(); break; /確認(rèn)鍵,default: /DisplayListChar(0,1,Input);write_1602com(er);for(i=0;i<16;i+)write_1602dat(Inputi);operation=0;if(N<6) /當(dāng)輸入的密碼少于6位時(shí),接受輸入并保存,大于6位時(shí)則無效。 OneAlam();/按鍵提示音/DisplayOne
25、Char(6+N,1,'*');for(j=0;j<=N;j+)write_1602com(er+6+j);write_1602dat(bNUM);Delay5Ms();Delay5Ms();write_1602com(er+6+j); write_1602dat('*');InputDataN=NUM;N+;else/輸入數(shù)據(jù)位數(shù)大于6后,忽略輸入OneAlam();for(j=0;j<=N;j+)write_1602com(er+6+j); write_1602dat('*');N=6;break; 3.2.2 LCD1602模塊
26、/=LCD1602=#define yi 0x80 /LCD第一行的初始位置,因?yàn)長(zhǎng)CD1602字符地址首位D7恒定為1(100000000=80)#define er 0x80+0x40 /LCD第二行初始位置(因?yàn)榈诙械谝粋€(gè)字符位置地址是0x40)/-延時(shí)函數(shù),后面經(jīng)常調(diào)用-void delay(uint xms)/延時(shí)函數(shù),有參函數(shù)uint x,y;for(x=xms;x>0;x-)for(y=110;y>0;y-);/-寫指令-void write_1602com(uchar com)/*液晶寫入指令函數(shù)*lcd1602_rs=0;/數(shù)據(jù)/指令選擇置為指令 ./lcd16
27、02_rw=0; /讀寫選擇置為寫P0=com;/送入數(shù)據(jù)delay(1);lcd1602_en=1;/拉高使能端,為制造有效的下降沿做準(zhǔn)備delay(1);lcd1602_en=0;/en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令/-寫數(shù)據(jù)-void write_1602dat(uchar dat)/*液晶寫入數(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í)行命
28、令/-初始化-void lcd_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);/清顯示/=顯示提示輸入=void DisplayChar(void)unsigned char i;if(pass=1)/DisplayListChar(0,1,LockOpen);write_1602com(er);for(i=0;i<16;i+)write_1602da
29、t(LockOpeni);elseif(N=0)/DisplayListChar(0,1,Error);write_1602com(er);for(i=0;i<16;i+)write_1602dat(Errori);else/DisplayListChar(0,1,start_line);write_1602com(er);for(i=0;i<16;i+)write_1602dat(start_linei);3.2.3 24C02模塊/=24C02=void mDelay(uint t) /延時(shí) uchar i;while(t-)for(i=0;i<125;i+);void
30、Nop(void) /空操作_nop_();_nop_();_nop_();_nop_();/*起始條件*/void Start(void)Sda=1;Scl=1;Nop();Sda=0;Nop(); /*停止條件*/void Stop(void)Sda=0;Scl=1;Nop();Sda=1;Nop();/*應(yīng)答位*/void Ack(void)Sda=0;Nop();Scl=1;Nop();Scl=0;/*反向應(yīng)答位*/void NoAck(void)Sda=1;Nop();Scl=1;Nop();Scl=0; /*發(fā)送數(shù)據(jù)子程序,Data為要求發(fā)送的數(shù)據(jù)*/void Send(uchar
31、 Data)uchar BitCounter=8;uchar temp;dotemp=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é)值*/uchar Read(void)uchar temp=0;uchar temp1=0;uchar BitCounter=8;Sda=1;doScl=0;Nop();Scl=1;Nop();if(Sda)temp=temp|
32、0x01;elsetemp=temp&0xfe;if(BitCounter-1)temp1=temp<<1;temp=temp1;BitCounter-;while(BitCounter);return(temp);void WrToROM(uchar Data,uchar Address,uchar Num)uchar i;uchar *PData;PData = Data;for(i=0;i<Num;i+)Start();Send(0xa0);Ack();Send(Address+i);Ack();Send(*(PData+i);Ack();Stop();mDel
33、ay(20);void RdFromROM(uchar Data,uchar Address,uchar Num)uchar i;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(); 3.2.4 矩陣鍵盤模塊/=將按鍵值編碼為數(shù)值=unsigned char coding(unsigned char m)unsigned char k;
34、switch(m)case (0x11): k=1;break;case (0x21): k=2;break;case (0x41): k=3;break;case (0x81): k='A'break;case (0x12): k=4;break;case (0x22): k=5;break;case (0x42): k=6;break;case (0x82): k='B'break;case (0x14): k=7;break;case (0x24): k=8;break;case (0x44): k=9;break;case (0x84): k='
35、C'break;case (0x18): k='*'break;case (0x28): k=0;break;case (0x48): k='#'break;case (0x88): k='D'break;return(k);/=按鍵檢測(cè)并返回按鍵值=unsigned char keynum(void)unsigned char row,col,i;P3=0xf0;if(P3&0xf0)!=0xf0)Delay5Ms();Delay5Ms();if(P3&0xf0)!=0xf0)row=P30xf0; /確定行線i=0;P
36、3=ai;/精確定位while(i<4)if(P3&0xf0)!=0xf0)col=(P3&0xff); /確定列線break; /已定位后提前退出 elsei+;P3=ai;elsereturn 0;while(P3&0xf0)!=0xf0);return (row|col);/行線與列線組合后返回else return 0;/無鍵按下時(shí)返回03.2.5 報(bào)警程序/=一聲提示音,表示有效輸入=void OneAlam(void)ALAM=0;Delay5Ms(); ALAM=1;/=二聲提示音,表示操作成功=void TwoAlam(void)ALAM=0;De
37、lay5Ms(); ALAM=1;Delay5Ms();ALAM=0;Delay5Ms(); ALAM=1;/=三聲提示音,表示錯(cuò)誤=void ThreeAlam(void)ALAM=0;Delay5Ms(); ALAM=1;Delay5Ms();ALAM=0;Delay5Ms(); ALAM=1;Delay5Ms();ALAM=0;Delay5Ms(); ALAM=1;/=輸入密碼錯(cuò)誤超過三過,報(bào)警并鎖死鍵盤=void Alam_KeyUnable(void)P3=0x00;ALAM=ALAM;Delay5Ms();3.2.6 密碼判斷程序/=確認(rèn)鍵,并通過相應(yīng)標(biāo)志位執(zhí)行相應(yīng)功能=void
38、Ensure(void)unsigned char i,j;RdFromROM(CurrentPassword,0,6); /從24C02里讀出存儲(chǔ)密碼if(N=6) if(ReInputEn=0)/重置密碼功能未開啟for(i=0;i<6;)if(CurrentPasswordi=InputDatai)i+;elseErrorCont+;if(ErrorCont=3)/錯(cuò)誤輸入計(jì)數(shù)達(dá)三次時(shí),報(bào)警并鎖定鍵盤write_1602com(er);for(i=0;i<16;i+)write_1602dat(Errori);doAlam_KeyUnable();while(1);elseT
39、R0=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(LockOpenj);TwoAlam(); /操作成功提示音KEY=0;/開鎖pass=1;/置正確標(biāo)志位TR0=1;/開啟定時(shí)open_led=0;/開鎖指示燈亮for(j=0;j<6;j+)/將輸入清除InputDatai=
40、0;else/當(dāng)兩次正確輸入時(shí),開啟重置密碼功能/DisplayListChar(0,1,SetNew);write_1602com(er);for(j=0;j<16;j+)write_1602dat(SetNewj);TwoAlam();/操作成功提示ReInputEn=1;/允許重置密碼輸入CorrectCont=0;/正確計(jì)數(shù)器清零else/=當(dāng)?shù)谝淮问褂没蛲浢艽a時(shí)可以用131420對(duì)其密碼初始化=if(InputData0=1)&&(InputData1=3)&&(InputData2=1)&&(InputData3=4)&
41、;&(InputData4=2)&&(InputData5=0)WrToROM(initpassword,0,6); /強(qiáng)制將初始密碼寫入24C02存儲(chǔ)/DisplayListChar(0,1,initword);/顯示初始化密碼write_1602com(er);for(j=0;j<16;j+)write_1602dat(initwordj);TwoAlam();Delay400Ms();TwoAlam();N=0;else/DisplayListChar(0,1,Error);write_1602com(er);for(j=0;j<16;j+)write
42、_1602dat(Errorj);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_tryj);ThreeAlam();else/DisplayListChar(0,1,Error);write_1602com(er);for(j=0;j<16;j+)write_1602dat(Errorj);ThreeAlam();/錯(cuò)誤提示音pass=0;N=0;/將輸入數(shù)據(jù)計(jì)數(shù)器清零,
43、為下一次輸入作準(zhǔn)備operation=1;3.2.7 密碼重置程序/=重置密碼=void ResetPassword(void)unsigned char i;unsigned char j;if(pass=0)pass=0;DisplayChar();ThreeAlam();elseif(ReInputEn=1)if(N=6)ReInputCont+;if(ReInputCont=2)for(i=0;i<6;)if(TempPasswordi=InputDatai)/將兩次輸入的新密碼作對(duì)比i+;else/DisplayListChar(0,1,Error);write_1602com(er);for(j=0;j<16;j+)write_1602dat(Errorj);ThreeAlam();/錯(cuò)誤提示pass=0;ReInputEn=0;/關(guān)閉重置功能,ReInputCont=0;DisplayChar();break; if(i=6)/DisplayListChar(0,1,ResetOK);write_1602com(er);for(j=0
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度環(huán)評(píng)報(bào)告編制及審查合同模板
- 2025年度環(huán)保工程設(shè)計(jì)施工合同范本-@-1
- 2025年度食品飲料購(gòu)銷合同(健康飲品生產(chǎn)線)
- 2025年度跨境并購(gòu)股權(quán)出資與收益分配合同
- 2025年度全國(guó)連鎖超市貨物采購(gòu)合同范本
- 2025年度果品產(chǎn)業(yè)鏈供應(yīng)鏈金融解決方案合同
- 二零二四年度企業(yè)關(guān)鍵崗位員工競(jìng)聘合同參考2篇
- 二零二五年度瓷磚售后維修服務(wù)合同2篇
- 2025年度字畫購(gòu)買與市場(chǎng)分析合作合同
- 二零二五年度跨區(qū)域教育扶貧捐贈(zèng)服務(wù)合同3篇
- 醫(yī)院消防安全培訓(xùn)課件
- 《00541語(yǔ)言學(xué)概論》自考復(fù)習(xí)題庫(kù)(含答案)
- 2025年機(jī)關(guān)工會(huì)個(gè)人工作計(jì)劃
- 江蘇省南京市、鹽城市2023-2024學(xué)年高三上學(xué)期期末調(diào)研測(cè)試+英語(yǔ)+ 含答案
- 2024護(hù)理不良事件分析
- 光伏項(xiàng)目的投資估算設(shè)計(jì)概算以及財(cái)務(wù)評(píng)價(jià)介紹
- 電力安全工作規(guī)程(完整版)
- 2024年湖南省公務(wù)員錄用考試《行測(cè)》試題及答案解析
- 借名買車的協(xié)議書范文范本
- 《2024 ESC血壓升高和高血壓管理指南》解讀
- 2023年鐵嶺衛(wèi)生職業(yè)學(xué)院高職單招(語(yǔ)文)試題庫(kù)含答案解析
評(píng)論
0/150
提交評(píng)論