潘雪峰 李臘元,2 楊威棣
(武漢生物工程學院計算機與信息工程系1,湖北 武漢 430415;武漢理工大學計算機科學與技術學院2,湖北 武漢 430063)
安全問題是現(xiàn)代社會各界普遍關注的焦點之一。目前,常見的安全產品有指紋識別系統(tǒng)、IC卡辨識系統(tǒng)以及紅外防盜系統(tǒng)等。這些系統(tǒng)一般用于保密要求較高或供個人使用的保險箱(或保險柜)。雖然產品的安全性高,但由于其生產成本高,攜帶、安裝及使用不方便等缺點,在一定程度上限制了這類產品的普及和推廣[1-2]。針對這些缺點,基于單片機的電子密碼鎖使用8051單片機來實現(xiàn)多功能密碼模塊。這種電路設計具有加密更快速、可靠性更高、成本更低的特點,特別適用于家庭、辦公室、學生宿舍及賓館等場所,具有很強的社會推廣價值。
傳統(tǒng)電子密碼鎖的基本功能要求有:①一定的密碼位數(shù)與取值范圍,密碼位數(shù)決定鎖體健壯程度;②用戶自行設定和修改密碼;③按鍵時有相應提示,若輸入的開鎖密碼不正確,則需另行處理;④開鎖密碼錯誤次數(shù)超過限制則報警;⑤鍵入正確開鎖密碼后開鎖;⑥硬件成本低廉,軟件簡潔可靠,易于批量生產。
智能電子鎖的功能擴展要求有:①功能多樣化;②計算機及網絡通信擴展智能電子鎖的功能;③與智能現(xiàn)場儀器和中央監(jiān)控系統(tǒng)連接;④模塊高度集成,結構簡單可靠,操作方便;⑤人機界面智能化、友善化;⑥智能識別系統(tǒng),擴展信號提取技術[3-5]。
本設計基于單片機實現(xiàn)傳統(tǒng)電子密碼鎖基本功能,并引入嵌入式技術,減少了電子密碼鎖外圍元器件,硬件電路簡單;以C語言進行程序設計,簡化了源程序結構及代碼,降低了ROM空間的占用。
中央處理單元采用Intel 8051,其具有4個8位準雙向I/O口,只需1個晶振和2個電容即可工作。其結構簡單、運行可靠[6-8]。Intel 8051內置4 kB的程序ROM以及128 B的數(shù)據RAM[9-10]。為了降低成本,沒有外接存儲器,而是直接使用片內的存儲空間。由于鍵盤輸入密碼采用的是中斷方式,因而采用74LS21四輸入與非門作為單片機的中斷源。
用戶通過矩陣式鍵盤中斷輸入密碼,中斷后系統(tǒng)調用密碼驗證函數(shù)。如果密碼輸入正確,單片機輸出開鎖信號開鎖。同時,實現(xiàn)鍵盤的中斷控制還要為鍵盤的擴展功能留出CPU時間。當用戶發(fā)現(xiàn)輸入錯誤時,可以清除重新輸入。此外,當密碼輸入后,可通過驗證程序進行判斷。如果密碼錯誤,則啟動出錯提示。當密碼錯誤次數(shù)達到一定次數(shù),系統(tǒng)將鎖定鍵盤,一段時間內禁止輸入。
1.3.1 單片機引腳的分配
在進行數(shù)據交換時,基于單片機的電子密碼鎖采用的是 Intel 8051 的4 個8 位 I/O 口,其中 P2.0~ P2.4作為掃描的輸入輸出口使用,而P3.2則作為輸出口使用。
1.3.2 存儲分配
用戶通過鍵盤進行輸入,需要為鍵盤分配一個用來存儲鍵入數(shù)據的緩沖區(qū)。由于密碼位數(shù)一般在10位以內,因此,分配10 B給該緩沖區(qū)。
在進行密碼驗證過程中,需要使用密碼表來存放密碼,因此,分配一個256 B的密碼表并存放在code區(qū),同時,code區(qū)用來存代碼。
1.3.3 電路設計
Intel 8051通過8根數(shù)據線直接與鍵盤連接,其中4根作為行掃描線,掃描輸入高電平;另外4根與8051直接連接的是列掃描線,列掃描輸出線置低電平。當鍵盤按下時,將在中斷輸入產生一個上升沿的跳變,觸發(fā)中斷進入中斷處理程序。該信號通過四輸入與門發(fā)送給8051。8051電子密碼鎖原理如圖1所示。
圖1 8051電子密碼鎖原理圖Fig.1 Principle schematic of 8051 electronic cryptogram lock
目前,國內使用較多的是Hi-Tech的Hi-Tech PICC編譯器,且目前的單片機仿真器也支持Hi-Tech PICC編譯格式。因此,本文采用Hi-Tech C編譯器的格式編寫程序模塊。
程序模塊包括鍵盤接收模塊、加密模塊和驗證密碼模塊這3部分。在功能模塊之前,還要加上密碼格式定義的內容。該內容用于對密碼的長度和格式類型進行定義。密碼長度定義為10,類型定義為unsigned char。
鍵盤接收模塊由兩個程序組成,分別是中斷例程和讀取鍵盤鍵值程序。中斷例程是一個中斷服務程序。該程序可記錄下按鍵次數(shù);讀取鍵盤程序則是將輸入的鍵值記錄下來。
2.1.1 中斷例程
中斷例程的主要功能是當按下鍵盤任意一按鍵時產生中斷,此時執(zhí)行中斷程序aa(void)。該程序首先將外部中斷位清0,然后調用讀取鍵值的程序readbyte(),記錄下按鍵次數(shù),并判斷相應位數(shù)是否為10,最后將外部中斷位置1。程序代碼如下。
2.1.2 讀取鍵盤鍵值程序
讀取鍵盤鍵值程序的主要功能是根據單片機P2口相應引腳電平的變化情況,返回一個相應的鍵值。其程序代碼如下。
加密模塊首先獲取系統(tǒng)時間,然后借助系統(tǒng)時間產生隨機數(shù),通過循環(huán)初始化生成一個密碼矩陣。接著,程序會打開一個文件,如果文件成功打開,則將矩陣寫入該文件中;如果文件無法打開,則返回。在將矩陣寫入文件時,先寫入數(shù)組頭;然后格式化數(shù)組串,將矩陣分行寫入文件,每行尾部加上換行,寫入最后一個文件并加上數(shù)組結尾;加密模塊最后給出關閉文件句柄,并將寫好的文件關閉。其程序代碼如下。
在進行密碼驗證的過程中,主要是核對輸入的信息和存儲的信息是否一致,在此使用scanf_s()函數(shù)進行驗證。如果信息一致,即給出密碼驗證成功的提示;如果不一致,則給出相應編號。其程序代碼如下。
常用的電路仿真軟件有Multisim、Protel、Proteus、Pspice這4種。由于Mulstisim在模擬器件和一些分離器件的仿真方面功能較強,因此,在電路仿真測試中選用的是 Multisim 11.0。
使用Multisim 11.0時,可以借助特殊功能寄存器窗口對寄存器進行監(jiān)控,同時還可以借助IRAM窗口對變量進行跟蹤。通過仿真測試,可觀測到flag變量地址為20H,值為0H。由于密碼長度被定義為10,因此用戶鍵盤的緩沖區(qū)的地址范圍為10 B,地址是從21H到2AH。在未按下任何按鍵時,該緩沖區(qū)的值均為0。
在鍵盤上按下預定的10位密碼后,中斷程序即進行響應,并執(zhí)行讀鍵程序和判斷程序;驗證正確后,在開鎖控制端給出高電平。為了使試驗更直觀,在開鎖控制端接一個燈泡,根據燈泡是否發(fā)光來判斷試驗是否成功。
在仿真測試的過程中,當按鍵符合預設時,燈泡變亮,同時緩存區(qū)的數(shù)據顯示為11H,并將緩存區(qū)指針復位,測試結果與設計相符。
在完成系統(tǒng)功能測試的同時,在密碼輸入過程中對密碼驗證模塊進行了測試,使用6組不同的十六進制值來測試相應單元,測試值分別為 12h、34h、01h、bfh、21h和1dh。這6組不同的值,在仿真測試中均可以生成密碼,并能夠將驗證密碼模塊中的提示“密碼驗證成功!”逐個顯示。這就說明模塊完成了編譯運行工作[11-15]。
為降低密碼鎖的成本,設計了基于8051單片機的密碼鎖加密模塊。由于該模塊具有8位操作數(shù),故能夠十分方便地移植到8位的8051上并高速、正確運行。同時,該系統(tǒng)模塊中的程序簡短,不需額外的存儲器來存放程序,為整個系統(tǒng)節(jié)省了成本。
[1]鄭詩程,朱虹,武衛(wèi)華.FPGA與AVR單片機的通訊與智能監(jiān)控系統(tǒng)研究[J].自動化與儀表,2009,44(11):13-17.
[2]周功明.基于AT89C2051單片機的防盜自動報警電子密碼鎖系統(tǒng)的設計[J].綿陽師范學院學報,2007(5):112-115.
[3]郭海英.基于單片機的電子安全密碼鎖的設計[J].現(xiàn)代電子技術,2005,28(13):95-97.
[4]魏學海.基于MULTISIM10的單片機系統(tǒng)仿真研究[J].計算機仿真,2010,27(1):246-248.
[5]曹建國,王威,王丹.基于VHDL語言的電子密碼鎖的設計與實現(xiàn)[J].沈陽大學學報,2006,18(4):77-79.
[6]潘永雄.單片機控制程序加密策略探索與應用[J].計算機工程與設計,2010,31(11):2466-3469.
[7]劉振海.一種基于單片機和串行E2PROM的智能密碼鎖[J].微計算機信息,2007,23(35):133-134.
[8]楊亭.單片機C51程序功能設計教程與實驗[M].北京:北京航空航天大學出版社,2004:99-109.
[9]王幸之,王雷,鐘愛琴,等.單片機應用系統(tǒng)電磁干擾與抗干擾技術[M].北京:北京航空航天大學出版社,2006:88-99.
[10]何立民.MCS-51系列單片機應用系統(tǒng)設計系統(tǒng)配置與接口技術[M].北京:北京航空航天大學出版社,1992:42-47.
[11]沈建華,楊艷琴.MSP430系列16位超低功耗單片機實踐與系統(tǒng)設計[M].北京:清華大學出版社,2005:2-10.
[12]胡大可.MSP430系列單片機C語言程序設計與開發(fā)[M].北京:北京航空航天大學出版社,2003:2-5.
[13]錢峰.EZ-USB FX2單片機原理、編程及應用[M].北京:北京航空航天大學出版社,2006:20-27.
[14]吳振宇,常玉保,馮林.基于FPGA和USB2.0的高速數(shù)據采集系統(tǒng)[J].儀器儀表學報,2006,27(z1):1-3.
[15]謝運祥,歐陽森.電力電子單片機控制技術[M].北京:機械工業(yè)出版社,2007.