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