鄒 健
(湖南科技學(xué)院 智能制造學(xué)院,湖南 永州 425199)
隨著電子技術(shù)的發(fā)展,密碼鎖在生活中隨處可見,以往的機(jī)械鎖只能通過鑰匙開啟,而且存在容易丟失、忘記攜帶鑰匙的缺點(diǎn),給人們的工作和生活帶來不少麻煩[1]。而電子密碼鎖可以通過指紋、藍(lán)牙、卡片、密碼、遠(yuǎn)程、應(yīng)急鑰匙等方式開鎖,不用擔(dān)心因鑰匙遺失、忘帶鑰匙帶來的煩惱。電子密碼鎖是大趨勢(shì),而且安防性能近年也有飛速提升。各種開鎖方式,回歸根本,鎖本身也需要夠堅(jiān)固,材質(zhì)要堅(jiān)固,鎖體要防爆,鎖芯防盜防撬性能高才行。中消協(xié)普及的B級(jí)鎖芯的概念,防撬時(shí)間等都有固定標(biāo)準(zhǔn),市場(chǎng)上現(xiàn)在也有很多遠(yuǎn)遠(yuǎn)超過這個(gè)標(biāo)準(zhǔn)的鎖芯,對(duì)應(yīng)的企業(yè)標(biāo)準(zhǔn)也有超B級(jí)、C級(jí)等。而在開門方式上,卡容易被復(fù)制,密碼容易被偷窺,指紋的安全性能是最高的[2]。指紋識(shí)別的技術(shù)也越來越先進(jìn),從早期的光學(xué)讀頭進(jìn)步到現(xiàn)在的半導(dǎo)體讀頭,讀取的已經(jīng)不是表皮層的紋路而是深入真皮層,而且是活體識(shí)別,所以也適用于指紋淡的人群,也杜絕被復(fù)制[3-4]。
根據(jù)前期對(duì)密碼鎖用戶的調(diào)研,了解到密碼鎖的基本功能需求,現(xiàn)具體闡述如下。本設(shè)計(jì)采用AT89C51單片機(jī)電子鎖系統(tǒng),進(jìn)行初始化設(shè)置,啟動(dòng)密碼鎖功能,密碼輸入顯示屏幕采用了7段數(shù)碼管半導(dǎo)體發(fā)光器件。系統(tǒng)控制指令通過單片機(jī)進(jìn)行實(shí)現(xiàn),單片機(jī)根據(jù)實(shí)際操作情況分配部件工作內(nèi)容,程序操作性強(qiáng)、方便簡(jiǎn)潔。在用戶輸入密碼過程中,單片機(jī)將會(huì)采用矩陣按鍵布局模式記錄當(dāng)前輸入密碼,并將該密碼與系統(tǒng)設(shè)置密碼進(jìn)行比對(duì),若密碼匹配則開啟密碼鎖,若密碼錯(cuò)誤則需要用戶按下刪除鍵重新輸入密碼。當(dāng)用戶輸入密碼錯(cuò)誤次數(shù)超過3次,電子密碼鎖將會(huì)自動(dòng)鎖定,需要用戶切換管理員模式輸入管理員密碼才可解鎖當(dāng)前狀態(tài),并重新輸入解鎖密碼。
根據(jù)設(shè)定好的密碼,采用矩陣式按鍵實(shí)現(xiàn)密碼的輸入功能,當(dāng)密碼輸入正確之后,鎖就打開(即綠燈亮),如果輸入的3次密碼不正確,就鎖定按鍵3 s,同時(shí)報(bào)警(即紅燈亮)。我們將密碼程序存在EPROM中,用戶通過單片機(jī)上P1.0口上的按鍵進(jìn)行選擇。具體操作如下:首先按一下P1.0口上的按鍵,然后再逐漸輸入密碼,最后按#號(hào)確認(rèn)即可。設(shè)置顯示初始符號(hào)“—”,為了幫助用戶確認(rèn)是否有鍵按下,并且防止密碼外泄,在輸入顯示時(shí),并不是顯示用戶按下的數(shù)字符號(hào),而是以一個(gè)特定的字母符號(hào)提醒用戶是否有鍵按下。有鍵按下,就會(huì)顯示字符“F”,沒有鍵按下就是初始狀態(tài)。首先按下P1.0口上的按鍵,然后輸入密碼,正確則綠燈亮,輸入3次都不正確的則紅燈亮。
設(shè)計(jì)思路如下:初始化從EEPROM中讀取密碼,單片機(jī)通電即顯示首頁,按任意鍵進(jìn)入功能選擇界面,可通過按鍵移動(dòng)光標(biāo)選擇直接輸入密碼登錄,或者進(jìn)行修改密碼操作。(1)直接輸入密碼登錄:通過矩陣按鍵輸入6位數(shù)字密碼,并存入數(shù)組,然后通過該數(shù)組與EEPROM讀取的密碼進(jìn)行比對(duì),從而判斷密碼是否正確,如果密碼正確則顯示登錄成功并觸發(fā)流水燈反饋結(jié)果,如果密碼錯(cuò)誤則顯示輸入錯(cuò)誤并觸發(fā)蜂鳴器警告,當(dāng)輸入密碼次數(shù)超過3次則直接返回首頁。(2)進(jìn)行修改密碼操作:提示輸入原密碼,鍵入6位密碼并判斷,當(dāng)輸入密碼正確時(shí)提示輸入新密碼,鍵入6位新密碼后存入EEPROM,重啟或重新登錄時(shí)從EEPROM讀取密碼,此時(shí)使用為新密碼。
硬件設(shè)計(jì)主要由以下幾個(gè)部分構(gòu)成:AT89S52單片機(jī)最小系統(tǒng)、AT24C02數(shù)據(jù)存儲(chǔ)模塊、按鍵模塊、LCD1602顯示+報(bào)警模塊的設(shè)計(jì)與實(shí)現(xiàn),以及電路板的焊接等。主要工作包括電路圖的設(shè)計(jì)、PCB圖的設(shè)計(jì)、電路板的焊接與測(cè)試等。通過編寫C語言程序后,將程序放入KEIL軟件中進(jìn)行調(diào)試,并利用該軟件將C代碼燒錄到單片機(jī)最小控制系統(tǒng)中。以下為本次程序設(shè)計(jì)的編程思路:定義數(shù)值類型,調(diào)用延時(shí)程序,定義數(shù)據(jù)發(fā)送位;按鍵掃描程序;密碼匹配及報(bào)警程序。
1.3.1 EEPROM初始化
將51單片機(jī)的頭文件和i2c.h的頭文件包含進(jìn)來,對(duì)24C02芯片進(jìn)行讀寫操作,調(diào)用At24c02Write函數(shù)將變量、數(shù)據(jù)寫入對(duì)應(yīng)的地址,調(diào)用 At24c02Read 函數(shù)進(jìn)行讀取操作,將從對(duì)應(yīng)地址內(nèi)讀取的值存儲(chǔ)在變量中。
1.3.2 LCD1602初始化
LCD1602驅(qū)動(dòng)的底層協(xié)議中幾個(gè)常用的函數(shù):
(1)LcdWriteCom():寫命令函數(shù),通過此函數(shù)向LCD1602寫命令。比如:清屏LcdWriteCom(0x01);設(shè)置數(shù)據(jù)指針起LcdWriteCom(0x80)。
(2)LcdWriteData():顯示函數(shù),在寫數(shù)據(jù)之前需要通過LcdWriteCom()函數(shù)告訴要寫數(shù)據(jù)的地址,LCD1602的第一行的16個(gè)顯示位地址是0x80到0x8f;第二行的地址是0xc0到0xcf。比如在1602的第一行第一位顯示數(shù)字8:LcdWriteCom(0x80)或LcdWriteData(‘8’)。
(3)showString (unsigned char Coordinate,char ?ptr):ShowString (首地址,字符串)函數(shù)在需要顯示字符串時(shí)使用。比如在第二行第3位開始顯示hello:ShowString (0x13,”hello”)。其中首地址的高四位為0則表示在第一排顯示,為“1”則在第二排顯示。低四位為0則在第0位顯示。
1.3.3 矩陣按鍵掃描
矩陣按鍵P1口的低四位接的4×4矩陣鍵盤的行,高四位接的矩陣鍵盤的列。檢測(cè)矩陣鍵盤是否有按鍵按下時(shí):先將P1端口的低四位置1,高四位清零,檢測(cè)P1端口的狀態(tài),如果高四位不為零,則表示有按鍵按下,并且可以知道是x0-x3哪一列有按鍵按下,比如P1=0x1f;則第一列有按鍵按下。此時(shí)將P1口第四位清零,高四位置1;檢測(cè)P1的狀態(tài),就知道y0-y3哪一行有按鍵按下。結(jié)合xy就可以知道具體是哪個(gè)按鍵按下。
1.3.4 輸入密碼
檢測(cè)按鍵‘0’~‘9’的按下,將鍵入數(shù)字信息保存至輸入密碼數(shù)組,+‘0’因?yàn)樾枰嫒氲氖茿SCII碼,顯示密碼在Lcd顯示屏第2行,可修改傳入值m改變密碼顯示形式,m=0密碼以‘?’顯示,m=1密碼直接顯示,按下return鍵時(shí)返回一步,按下OK鍵時(shí)結(jié)束輸入。
1.3.5 密碼比對(duì)
先判斷密碼長(zhǎng)度,如果不為6位直接跳轉(zhuǎn)密碼錯(cuò)誤反饋,滿足密碼位數(shù),再逐位與EEPROM內(nèi)存的密碼進(jìn)行比對(duì),逐一對(duì)應(yīng)則跳轉(zhuǎn)密碼成功反饋,否則跳轉(zhuǎn)密碼錯(cuò)誤反饋。
本文設(shè)計(jì)實(shí)現(xiàn)的電子密碼鎖,基本達(dá)到了預(yù)期的功能。在整個(gè)設(shè)計(jì)和調(diào)試過程中,遇到的問題總結(jié)如下。實(shí)驗(yàn)調(diào)試過程中,由于數(shù)據(jù)的錄入和顯示會(huì)出現(xiàn)各種狀況,在實(shí)現(xiàn)修改密碼功能的調(diào)試過程中,由于統(tǒng)一使用字符型,需要與int型進(jìn)行轉(zhuǎn)換,可能會(huì)出現(xiàn)密碼錄入EEPROM后出現(xiàn)矩陣鍵盤無法輸入的字符或其他非法字符,此時(shí)由于無法輸入正確密碼而需要反復(fù)調(diào)試將會(huì)增加很多麻煩,此時(shí)解決方法可以使用語句:At24c02Write(0,0);清除內(nèi)存,初始化,將密碼重置到888888,用于調(diào)試時(shí)可對(duì)EEPROM存入密碼初始化。調(diào)試成功后可將此語句注釋,恢復(fù)單片機(jī)重啟后依然可以讀取上次錄入的新密碼的功能。