電子密碼鎖論文_第1頁
電子密碼鎖論文_第2頁
電子密碼鎖論文_第3頁
電子密碼鎖論文_第4頁
電子密碼鎖論文_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、基于單片機(jī)的電子密碼鎖設(shè)計(jì)報(bào)告組員:李文強(qiáng) 李王成 張劍文 江滔引言目前,最常用的鎖是20世紀(jì)50年代意大利人設(shè)計(jì)的機(jī)械鎖,其機(jī)構(gòu)簡單、使用方便、價(jià)格便宜。但在使用中暴露了很多缺點(diǎn):一是機(jī)械鎖是靠金屬制成的鑰匙上的不同齒形與鎖芯的配合來工作的。據(jù)統(tǒng)計(jì),每4000把鎖中就有兩把鎖的鑰匙齒牙相同或類似,故安全性低。二是鑰匙一旦丟失,無論誰撿到都可以將鎖打開。三是機(jī)械鎖的材料大多為黃銅,質(zhì)地較軟,容易損壞。四是機(jī)械鎖鑰匙易于復(fù)制,不適于諸如賓館等公共場所使用。由于人們對(duì)鎖的安全性,方便性等性能有更高的要求,許多智能鎖也相繼問世,但這類產(chǎn)品的特點(diǎn)是針對(duì)特定指紋或有效卡,但能適用于保密要求高且僅供個(gè)別人

2、使用的箱、柜、房間,其成本一般較高,在一定程度上限制了這類產(chǎn)品的普及和推廣。隨著人們生活水平的提高,電子密碼防盜鎖作為防盜衛(wèi)士的作用日趨重要。電子密碼防盜鎖用密碼代替鑰匙,不但省去了佩戴鑰匙的煩惱,也從根本上解決了普通門鎖保密性差的缺點(diǎn)。隨著人們生活水平的提高,如何實(shí)現(xiàn)防盜這一問題也變的尤其的突出,傳統(tǒng)的機(jī)械鎖由于其構(gòu)造的簡單,被撬的事件屢見不鮮,機(jī)械鎖的這些弊端為一種新型的鎖-電子密碼鎖,提供了發(fā)展的空間。隨著人們對(duì)安全的重視和科技的發(fā)展,許多電子智能鎖已在國內(nèi)外相繼面世。但是這些產(chǎn)品的特點(diǎn)是針對(duì)特定的指紋和有效卡,只能適用于保密要求的箱、柜、門等。而且指紋識(shí)識(shí)別器若在公共場所使用存在容易機(jī)

3、械損壞,IC卡還存在容易丟失、損壞等特點(diǎn)。加上其成本較高,一定程度上限制了這類產(chǎn)品的普及和推廣。電子鎖由于其保密性高,使用靈活性好,安全系數(shù)高,受到了廣大用戶的歡迎。鑒于目前的技術(shù)水平與市場的接收程度,電子密碼鎖是這類電子防盜產(chǎn)品的主流。 主要功能(詳細(xì)說明見附錄1)1.輸入密碼正確開鎖、密碼修改(密碼可為1-6位,斷電密碼不丟失);2.輸入密碼錯(cuò)誤次數(shù)超出設(shè)定值報(bào)警,并鎖定鍵盤3分鐘(后錯(cuò)誤次數(shù)并不會(huì)改變,除非輸入正確密碼。設(shè)計(jì)方案該方案采用的是一種以STC-AT89C52為核心的單片機(jī)控制方案,利用單片機(jī)靈活的編程設(shè)計(jì)方式和豐富的I/O端口以及其控制的準(zhǔn)確性,不但可以實(shí)現(xiàn)密碼鎖的基本功能,

4、還能添加遙控控制等拓展功能。第一章 系統(tǒng)模塊電路的設(shè)計(jì)I 系統(tǒng)總電路II 開鎖電路在本次項(xiàng)目設(shè)計(jì)中,開鎖信號(hào)為繼電器的開關(guān)信號(hào),實(shí)際應(yīng)用中,可以用開關(guān)去控制電機(jī)鎖,線圈鎖或者靈性鎖的電源,以達(dá)到通電開鎖的功能:III 報(bào)警電路 本設(shè)計(jì)的報(bào)警裝置采用的是蜂鳴器。當(dāng)用戶輸入密碼錯(cuò)誤次數(shù)超過設(shè)定值時(shí),蜂鳴器將發(fā)出報(bào)警信號(hào)。第二章 按鍵電路模塊設(shè)計(jì)本項(xiàng)目設(shè)計(jì)采用的是4*4矩陣鍵盤,這樣能減少鍵盤與單片機(jī)接口時(shí)所占用的I/O線的數(shù)目,并增加了長按鍵的功能,在按鍵比較多的時(shí)候,這樣能減少材料并降低成本。電路原理圖如下所示:在這種行列式矩陣鍵盤非鍵盤編碼的單片機(jī)系統(tǒng)中,鍵盤處理程序首先執(zhí)行等待按鍵并確認(rèn)有無

5、按鍵按下的程序段(即鍵盤掃描程序段)。當(dāng)確認(rèn)有按鍵按下后,下一步就要識(shí)別哪一個(gè)按鍵按下。對(duì)鍵的識(shí)別通常有兩種方法:一種是常用的逐行掃描法;另一種是速度較快的線反轉(zhuǎn)法。由于添加了長按鍵功能,本設(shè)計(jì)采用逐行掃描法。線反轉(zhuǎn)法,通過獲取行檢測得到行值,再將行值做與運(yùn)算賦給端口,然后檢測到列值,最后行值與列值做或運(yùn)算得到鍵值。長按鍵是本設(shè)計(jì)的獨(dú)特處之一,通過長按鍵可以精簡按鍵版面,使操作更有趣味(看起來就那么多按鍵但功能有待發(fā)掘),同時(shí)節(jié)約了材料。這里略談一下逐行掃描法。此法將一個(gè)端口的8位分成高低兩個(gè)部分(低四位,高四位),通過令一個(gè)部分的一位置低電平,檢測另一部分與之有交集(按下按鍵后相交)是哪一個(gè)

6、端口從而確定是哪一個(gè)按鍵被按下。程序編寫過程中需要考慮兩個(gè)方面:去抖和松手檢測。源程序如下(一般矩陣鍵盤檢測,非長按鍵檢測):uvoid read_key(void) uchar key_value,i=1; uchar key_high_value,key_low_value;/定義變量暫存高四位和低四位按鍵的鍵碼 key_port=0xf0;/置按鍵控制口為1,準(zhǔn)備讀入數(shù)據(jù) key_value=key_port & 0xf0; if(key_value!=0xf0)/如果沒有按鍵按下,則相等 delay_50us(200);/延時(shí)10ms去除抖動(dòng) key_port=0xf0;/再次

7、講IO置1,準(zhǔn)備讀入去除抖動(dòng)后的數(shù)據(jù) key_value=key_port & 0xf0; switch (key_value) case 0xf0:break;/經(jīng)軟件延時(shí)后,判斷為誤判,則退出函數(shù),返回 case 0x70:key_high_value=0x70;break; case 0xb0:key_high_value=0xb0;break; case 0xd0:key_high_value=0xd0;break; case 0xe0:key_high_value=0xe0;break; default:key_high_value=0x00;break;/多個(gè)按鍵同時(shí)按下,

8、顯示0,然后退出 key_port=0x0f;/交換高四位和低四位的狀態(tài),再次讀取鍵碼 key_value=key_port & 0x0f; switch(key_value) case 0x07:key_low_value=0x07;break; case 0x0b:key_low_value=0x0b;break; case 0x0d:key_low_value=0x0d;break; case 0x0e:key_low_value=0x0e;break; default:key_low_value=0x00;break; key_value=key_high_value | ke

9、y_low_value; for(i=0;i<16;i+) if(key_value=tabl2i) keybord_value=i; break; (各按鍵功能見文末附件)第三章 LED數(shù)碼管顯示模塊設(shè)計(jì)本電子密碼鎖系統(tǒng)設(shè)計(jì)采用的是LCD1602為顯示器。電路原理圖如下所示:LCD1602讀寫時(shí)序:第四章 4儲(chǔ)模塊為防止斷電后密碼丟失,特在此項(xiàng)目設(shè)計(jì)中加入了以AT24C16為核心的存儲(chǔ)模塊。其電路原理圖如下所示:AT24c16,是IIc總線協(xié)議的通信方式。單片機(jī)本身不具有IIc通行的硬件設(shè)備,因此采用軟件模擬的方式完成與單片機(jī)的通信。摘抄文獻(xiàn):IIC總線工作原理 I2C總線進(jìn)行數(shù)據(jù)傳送

10、時(shí),時(shí)鐘信號(hào)為高電平期間,數(shù)據(jù)線上的數(shù)據(jù)必須保持穩(wěn)定,只有在時(shí)鐘線上的信號(hào)為低電平期間,數(shù)據(jù)線上的高電平或低電平狀態(tài)才允許變化。 起始和終止信號(hào) :SCL線為高電平期間,SDA線由高電平向低電平的變化表示起始信號(hào);SCL線為高電平期間,SDA線由低電平向高電平的變化表示終止信號(hào)。數(shù)據(jù)傳送格式(1)字節(jié)傳送與應(yīng)答每一個(gè)字節(jié)必須保證是8位長度。數(shù)據(jù)傳送時(shí),先傳送最高位(MSB),每一個(gè)被傳送的字節(jié)后面都必須跟隨一位應(yīng)答位(即一幀共有9位)。如果一段時(shí)間內(nèi)沒有收到從機(jī)的應(yīng)答信號(hào),則自動(dòng)認(rèn)為從機(jī)已正確接收到數(shù)據(jù)。 AT24C16的芯片地址如下圖,1010為固定,A0,A1,A2正好與芯片的1,2,3引

11、角對(duì)應(yīng),為當(dāng)前電路中的地址選擇線,三根線可選擇8個(gè)芯片同時(shí)連接在電路中,當(dāng)要與哪個(gè)芯片通信時(shí)傳送相應(yīng)的地址即可與該芯片建立連接,TX-1B實(shí)驗(yàn)板上三根地址線都為0。最后一位R/W為告訴從機(jī)下一字節(jié)數(shù)據(jù)是要讀還是寫,0為寫入,1為讀出。 AT24C016芯片地址(0xa0為寫,0xa1為讀)任一地址寫入數(shù)據(jù)格式操作時(shí)序圖如下:下面是本項(xiàng)目的源程序:/*/功能:發(fā)送非應(yīng)答信號(hào)void nack_24c16() sda_24c16=1; delay_3us(); delay_3us(); scl_24c16=1; delay_3us(); delay_3us(); scl_24c16=0; sda_

12、24c16=0;/*/功能:發(fā)送IIC停止信號(hào)void stop_24c16() sda_24c16=0; scl_24c16=1; delay_3us(); delay_3us(); sda_24c16=1; delay_3us(); delay_3us(); scl_24c16=0; /*/功能:發(fā)送啟動(dòng)通訊的信號(hào)void star_24c16() sda_24c16=1; scl_24c16=1; delay_3us(); delay_3us(); sda_24c16=0; delay_3us(); delay_3us(); scl_24c16=0; /*/功能:判斷應(yīng)答或非應(yīng)答/說明:

13、通訊出錯(cuò)時(shí)標(biāo)志為1,否則為0void cack_24c16() scl_24c16=0; sda_24c16=1; delay_3us(); scl_24c16=1; flag12=0;/清除錯(cuò)誤標(biāo)志 if(sda_24c16)flag12=1; scl_24c16=0; /*/功能:發(fā)送應(yīng)答信號(hào)void mack_24c16() sda_24c16=0; scl_24c16=1; delay_3us(); delay_3us(); scl_24c16=0; sda_24c16=1;/*/功能:向24C16寫入一字節(jié)的數(shù)據(jù)void w1byte_24c16(uchar byte1) uchar

14、 i=8; while(i-) delay_3us(); delay_3us(); delay_3us(); if(byte1 & 0x80) sda_24c16=1; else sda_24c16=0; delay_3us(); delay_3us(); delay_3us(); scl_24c16=1; delay_3us(); delay_3us(); delay_3us(); scl_24c16=0; byte1<<=1; /*/功能:從24C16中讀出一字節(jié)的數(shù)據(jù)uchar rd1byte_24c16(void)/;讀字節(jié)子程序(通用)讀出的數(shù)據(jù)存放在30H中 u

15、char i; uchar ddata=0; sda_24c16=1;/置IO口為1,準(zhǔn)備讀入數(shù)據(jù) for(i=0;i<8;i+) ddata<<=1; delay_3us(); delay_3us(); delay_3us(); scl_24c16=1; if(sda_24c16) ddata+; delay_3us(); delay_3us(); delay_3us(); scl_24c16=0; return ddata; 第五章 系統(tǒng)的軟件設(shè)計(jì)軟件設(shè)計(jì)思路電子密碼鎖工作的主要過程是LCD1602顯示提示開始輸入密碼,通過鍵盤輸入密碼,同時(shí)LCD示密碼輸入狀況,接下來確

16、認(rèn)密碼的判斷,做出開鎖或報(bào)警處理。當(dāng)輸入密碼連續(xù)輸入錯(cuò)誤設(shè)定次數(shù)時(shí),系統(tǒng)報(bào)警。附錄1電子密碼鎖使用說明(for mini 80)基本功能:1,密碼在本機(jī)上修改(密碼位數(shù)在0-9位之間),斷電儲(chǔ)存;2,自動(dòng)上鎖(當(dāng)開鎖后一段時(shí)間后自動(dòng)鎖閉,開鎖2秒)3,密碼錯(cuò)誤次數(shù)超出設(shè)定值,發(fā)出報(bào)警信號(hào),并且將鍵盤鎖定3MIN(再此期間重啟后可以再鍵入)斷電后錯(cuò)誤次數(shù)并不會(huì)改變,除非輸入正確密碼,可特色:附錄2源程序/編譯環(huán)境: KEIL UVISION2/單片機(jī)晶振:12M 單片機(jī)型號(hào)AT89S52/單片機(jī)晶振: 無特殊要求/作者:興向榮電子元件店/日期:2013.07.09/功能:實(shí)現(xiàn)4組密碼鎖,4組密碼

17、均可以修改,修改后掉電可以保持#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int/=LCD1602接口連接方法=/*- |DB0-P0.0 | DB4-P0.4 | RW-P2.3 | |DB1-P0.1 | DB5-P0.5 | RS-P2.4 | |DB2-P0.2 | DB6-P0.6 | E-P2.2 | |DB3-P0.3 | DB7-P0.7 | -*/=AT24C16控制引腳定義=sbit sda_24c16=P20;/定義24

18、C16串行數(shù)據(jù)線 第5腳sbit scl_24c16=P21;/定義24C16串行時(shí)鐘線 第6腳/=*/ #define LCM_Data P0 /LCD1602數(shù)據(jù)接口#define Busy 0x80 /用于檢測LCM狀態(tài)字中的Busy標(biāo)識(shí)sbit LCM_RW = P26; /讀寫控制輸入端,LCD1602的第五腳sbit LCM_RS = P25; /寄存器選擇輸入端,LCD1602的第四腳sbit LCM_E = P27; /使能信號(hào)輸入端,LCD1602的第6腳#define key_port P3/用KEY_PORT代替P3sbit beek_c =P22;/定義蜂鳴器控制口sb

19、it lock_c =P23;/定義鎖信號(hào)輸出口/*函數(shù)聲明*void delay_3us();/3US的延時(shí)程序void nack_24c16();/24C16非應(yīng)答信號(hào) void stop_24c16();/停止通訊信號(hào)void star_24c16();/啟動(dòng)信號(hào)void cack_24c16();/檢測應(yīng)答信號(hào)void mack_24c16();/發(fā)送應(yīng)答信號(hào)void w1byte_24c16(uchar byte1);/向24C16寫入一字節(jié)的數(shù)據(jù)uchar rd1byte_24c16(void);void read_24c16();/讀數(shù)據(jù)操作void write_24c16();

20、/寫入16字節(jié)的數(shù)據(jù)操作void init_t0();/定時(shí)器0初始化函數(shù)void WriteDataLCM(uchar WDLCM);/LCD模塊寫數(shù)據(jù)void WriteCommandLCM(uchar WCLCM,BuysC); /LCD模塊寫指令uchar ReadStatusLCM(void);/讀LCD模塊的忙標(biāo)void DisplayOneChar(uchar X,uchar Y,uchar ASCII);/在第X+1行的第Y+1位置顯示一個(gè)字符void LCMInit(void);/LCD初始void delayms(uint ms);/1MS基準(zhǔn)延時(shí)程序void delay_

21、50us(unsigned int t);/ 延時(shí)50*t(us)void DisplayListChar(uchar X,uchar Y,uchar delayms, uchar code *DData);void judge_xianshi(void);/顯示處理程序void read_key(void);/按鍵鍵碼讀取子函數(shù),返回相應(yīng)的鍵碼uchar keybord_value;/全局變量,存儲(chǔ)最終的鍵碼,其值為0-Fvoid read_password(void);/6位數(shù)據(jù)的讀取,也就是密碼的讀取uchardeal_password(void);/輸入密碼和系統(tǒng)碼對(duì)比,看是否符合開鎖

22、條件 /返回值為1就開鎖,返回值為0為密碼錯(cuò)誤void makesurekeydeal();/確認(rèn)鍵處理程序void cancelkeydeal();/取消鍵處理程序/*矩陣鍵盤鍵碼*const uchar tabl216=0xee,0xed,0xeb,0xe7,0xde,0xdd,0xdb,0xd7,0xbe, / s1 s2 s3 s4 s5 s6 s7 s8 s9 0xbd,0xbb,0xb7,0x7e,0x7d,0x7b,0x77; / s10 s11 s12 s13 s14 s15 s16uchar system46;/定義 4*6個(gè)數(shù)據(jù)作為系統(tǒng)的密碼 也就是4組6位數(shù)uchar p

23、assin6;/定義全局變量,儲(chǔ)存輸入的6個(gè)按鍵數(shù)據(jù)uchar temppassin6;/輸入的數(shù)據(jù)暫存uchar flag1;/按鍵鍵入是否成功的標(biāo)準(zhǔn),為1成功 為0失敗uchar passcount;/鍵入次數(shù)的統(tǒng)計(jì)uchar flag2;/密碼是否對(duì)的標(biāo)志單位 ,為1成功 ,為0失敗uchar flag3,flag4,flag5,flag6,flag7,flag12;uchar t0_crycle;uchar error_count;/密碼輸入次數(shù)/*主程序*main() passcount=0; flag5=0; flag7=0; flag6=0; flag4=0; flag3=0;

24、flag1=0; beek_c=1;/關(guān)閉蜂鳴器 lock_c=0;/關(guān)閉鎖 LCMInit();/液晶初始化設(shè)置 init_t0(); TR0=0;/關(guān)閉定時(shí)器T0 error_count=0; read_24c16();/單片機(jī)上電的時(shí)候先讀取4組密碼 while(1) read_key();/讀取鍵碼 read_password();/把鍵碼轉(zhuǎn)為密碼 judge_xianshi();/顯示 /*/寫入數(shù)據(jù)操作void write_24c16() uchar i,j;write1: star_24c16();/發(fā)送啟動(dòng)脈沖 w1byte_24c16(0xa0);/寫24C16的芯片地址,高

25、四位固定為1010,選擇第一區(qū),寫操作 cack_24c16();/ 讀取應(yīng)答或非應(yīng)答信號(hào) if(flag12)goto write1;/判斷 w1byte_24c16(01);/寫入24C16的內(nèi)部地址 cack_24c16(); if(flag12)goto write1; for(j=0;j<2;j+)/先寫入12個(gè)字節(jié)的數(shù)據(jù) for(i=0;i<6;i+) w1byte_24c16(systemji); cack_24c16(); if(flag12)goto write1; stop_24c16();/寫數(shù)據(jù)完畢,發(fā)送停止脈沖 write2: star_24c16();/

26、發(fā)送啟動(dòng)脈沖 w1byte_24c16(0xa0);/寫24C16的芯片地址,高四位固定為1010,選擇第一區(qū),寫操作 cack_24c16();/ 讀取應(yīng)答或非應(yīng)答信號(hào) if(flag12)goto write2;/判斷 w1byte_24c16(17);/寫入24C16的內(nèi)部地址 cack_24c16(); if(flag12)goto write2; for(j=2;j<4;j+)/寫入后面24字節(jié)的數(shù)據(jù) for(i=0;i<6;i+) w1byte_24c16(systemji); cack_24c16(); if(flag12)goto write2; stop_24c1

27、6();/寫數(shù)據(jù)完畢,發(fā)送停止脈沖 /*/讀數(shù)據(jù)操作 void read_24c16() uchar i,j;read1: for(j=0;j<2;j+)/讀取前面12字節(jié)的數(shù)據(jù) for(i=0;i<6;i+) nack_24c16(); star_24c16();/發(fā)送啟動(dòng)脈沖 w1byte_24c16(0xa0);/24C16的芯片地址,高四位固定為1010,選擇第一區(qū),寫操作 cack_24c16(); if(flag12)goto read1; w1byte_24c16(j*6+i+1);/寫入24C16的內(nèi)部地址,選擇第二頁 cack_24c16(); if(flag12

28、)goto read1; nack_24c16(); stop_24c16();/重新開始 star_24c16();/ w1byte_24c16(0xa1);/ 24C16的芯片地址,高四位固定為1010,選擇第一區(qū),讀操作 cack_24c16(); if(flag12)goto read1; systemji=rd1byte_24c16(); mack_24c16(); nack_24c16(); stop_24c16();read2: for(j=2;j<4;j+) for(i=0;i<6;i+) nack_24c16(); star_24c16();/發(fā)送啟動(dòng)脈沖 w1b

29、yte_24c16(0xa0);/24C16的芯片地址,高四位固定為1010,選擇第一區(qū),寫操作 cack_24c16(); if(flag12)goto read2; w1byte_24c16(j*6+i+5);/寫入24C16的內(nèi)部地址,選擇第二頁 cack_24c16(); if(flag12)goto read2; nack_24c16(); stop_24c16();/重新開始 star_24c16();/ w1byte_24c16(0xa1);/ 24C16的芯片地址,高四位固定為1010,選擇第一區(qū),讀操作 cack_24c16(); if(flag12)goto read2;

30、systemji=rd1byte_24c16(); mack_24c16(); nack_24c16(); stop_24c16(); for(j=0;j<4;j+)/ for(i=0;i<6;i+) if(systemji>15)systemji=1;/出廠芯片讀出的是FF,這樣就沒有密碼可以輸入了,防止防止這種任何密碼都無效的情況,我們?cè)O(shè)置出廠4組密碼都是111 111 /*/顯示處理程序void judge_xianshi() uchar i; _nop_(); if(flag2=0)/開關(guān)初始顯示 DisplayListChar(0,0,0, "Electr

31、onics Lock");/ DisplayListChar(1,0,0, "Password:"); for(i=0;i<passcount&&i<6;i+)/顯示輸入的6個(gè)數(shù)據(jù) DisplayOneChar( 1, 9+i, '*'); /第一行改為隱藏 / /第二行改為真實(shí)顯示,可以把這句刪除就隱藏密碼了 else if(flag2=5) DisplayListChar(0,0,0, "Change passwor "); DisplayOneChar( 0,15,flag5+0x30); Di

32、splayListChar(1,0,0, "0: n: "); for(i=0;i<6;i+) DisplayOneChar( 1,i+2,systemflag5-1i+0x30); for(i=0;i<6;i+)DisplayOneChar( 1,i+10,temppassini+0x30); /6位數(shù)據(jù)的讀取,也就是密碼的讀取void read_password() _nop_(); if(flag1=1 )/判斷鍵入是否成功 flag1=0; if(passcount<6 && flag5=0) passinpasscount=key

33、bord_value; passcount+; if(passcount<6 && flag5!=0) if(keybord_value!=15 && keybord_value!=14 ) flag7=1; temppassinpasscount=keybord_value; passcount+; cancelkeydeal();/取消鍵處理程序 makesurekeydeal();/確認(rèn)鍵處理程序 if(keybord_value=15 && flag7=0)/判斷是否為設(shè)置鍵 flag5+; if(flag5>=5)flag5

34、=1; /*/確認(rèn)鍵處理程序void makesurekeydeal() uchar i; _nop_(); if(keybord_value=12 && flag7=0 )/判斷時(shí)候?yàn)榇_認(rèn)鍵 flag2=deal_password();/ 判斷輸入的密碼是否正確 passcount=0; if(flag3=0)/按第一次確認(rèn) flag3=1; if(flag2=1)/輸入的密碼正確 beek_c=0;/開蜂鳴器 lock_c=1;/開鎖 flag6=1; DisplayListChar(1,0,0, "Opening.");/在液晶的第二行顯示字符&quo

35、t;OPERING TR0=1; flag4=0; error_count=0; while(flag4<=20);/密碼正確開鎖信號(hào)閉合2秒 蜂鳴器響2秒 flag4=0; flag2=0; flag3=0; TR0=0; WriteCommandLCM(0x01,1); /清除顯示一下 beek_c=1;/關(guān)閉蜂鳴器 lock_c=0;/斷開鎖信號(hào)輸出 else if(flag2=2)/輸入的密碼錯(cuò)誤 beek_c=0; TR0=1; flag6=0; error_count+;/密碼輸入錯(cuò)誤后,計(jì)數(shù)器+1 DisplayListChar(1,0,0, "Input Err

36、or TIS"); DisplayOneChar( 1,12,error_count+0x30);/顯示輸入多少次錯(cuò)誤 while(flag4<=5);/密碼輸入錯(cuò)誤蜂鳴器響0.5秒,關(guān)0.5秒的頻率響2次 beek_c=1; flag4=0; while(flag4<=5); beek_c=0; flag4=0; while(flag4<=5); beek_c=1; flag4=0; flag2=0; flag3=0; TR0=0; if(error_count>=3)/如果密碼輸入3次錯(cuò)誤經(jīng)鎖定2.54分鐘或需要重新斷電 DisplayListChar(0

37、,0,0, "Input Error 3 Ts"); DisplayListChar(1,0,0, "locked 3 minutes"); TR0=1; while(flag4<=254);/鎖定時(shí)間過后系統(tǒng)恢復(fù) DisplayListChar(0,0,0, "Electronics Lock"); TR0=0; error_count=0; flag4=0; /* else if(flag3=1)/第二次按確認(rèn) flag2=0; flag3=0; */ WriteCommandLCM(0x01,1); /清除顯示一下 if(

38、keybord_value=12 && flag7=1 )/確認(rèn)修改密碼 for(i=0;i<6;i+) systemflag5-1i=temppassini;/把暫存單元的數(shù)據(jù)傳給對(duì)應(yīng)的開始密碼 temppassini=0;/暫存單元清零,下次修改密碼可以再次利用 write_24c16(); flag7=0;/各種標(biāo)志單元清零 flag2=0; flag3=0; flag5=0; flag6=0; passcount=0; /按鍵次數(shù)計(jì)數(shù)清零 WriteCommandLCM(0x01,1); /清除顯示一下 /*/取消鍵處理程序void cancelkeydeal()

39、 uchar i; _nop_(); if(keybord_value=13 )/判斷是否為取消鍵 if(flag7=0) for(i=0;i<passcount;i+) passini=0; /清零 passcount=0;/按取消鍵后,鍵入按鍵次數(shù)的計(jì)數(shù)單元清零 if(flag3=1)/取消顯示密碼錯(cuò)誤 flag2=0; flag3=0; else if(flag7=1) flag7=0; flag2=0; flag3=0; flag5=0; flag6=0; passcount=0; WriteCommandLCM(0x01,1); /清除顯示一下 uchar deal_passw

40、ord()/輸入密碼和系統(tǒng)碼對(duì)比,看是否符合開鎖條件 uchar i,j,temp2,temp; temp2=0; _nop_(); for(j=0;j<4;j+)/依次判斷4組 temp=0; for(i=0;i<6;i+) if(systemji=passini)temp+;/如果系統(tǒng)密碼和鍵入的密碼對(duì)應(yīng)的位一樣,則暫存單元自加1 if(temp=6) temp2=1; return(1);/如果TEMP為6,證明鍵入的密碼和4組系統(tǒng)密碼中的一組一樣; break;/退出判斷 if(temp2=0)return(2);void read_key(void) uchar key_value,i=1; uchar key_high_value,key_low_value;/定義變量暫存高四位和低四位按鍵的鍵碼 _nop_(); key_port=0xf0;/置按鍵控制口為1,準(zhǔn)備讀入數(shù)據(jù) key_value=key_port & 0x

溫馨提示

  • 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)論