楊曉龍
(山西工程技術學院 信息工程與自動化系,山西 陽泉 045000)
隨著人們生活水平的不斷提高,對家庭安全和防盜也越來越重視。防盜最簡單直接的辦法是安裝防盜門。然而目前主流的防盜門鎖仍然采用鑰匙開啟的機械鎖,這種鎖有兩個缺點:一是鑰匙攜帶不便,容易丟失且可以被復制;二是防技術開啟的能力很差。雖然目前有些防盜門已經(jīng)采用了電子密碼鎖,但老人或小孩防范意識差,在輸入密碼時容易被別人看到導致密碼泄露[1]。本設計在基本電子密碼鎖的基礎上增加了GSM遠程控制模塊和防盜報警裝置,可實現(xiàn)一鍵撥打戶主電話和短信遠程開鎖,既沒有機械鎖的缺點,又避免了密碼的泄露。該設計成本低,安裝方便,功能豐富,除家庭防盜門外,也可用于銀行、倉庫等存放有貴重物品的場合。
本設計包括單片機、液晶顯示器、矩陣鍵盤、GSM模塊、繼電器和電磁鐵模塊、蜂鳴器模塊以及金屬接觸片共7部分[2]。金屬接觸片是一對,分別置于鉸鏈所在側的門框和門邊上,用于檢測門的開閉狀態(tài)。門處于關閉狀態(tài)時,電磁鐵不通電,彈簧彈出鎖舌,門被上鎖,液晶顯示器的第一行顯示“Locked!”。對于防范意識較強知道密碼的家庭成員,可以通過鍵盤輸入密碼開鎖,密碼以星號的形式顯示在液晶顯示器的第二行;對于防范意識較差不知道密碼的家庭成員,可以按下鍵盤上的呼叫鍵,單片機會控制GSM模塊自動撥打戶主電話,戶主通過電話確認家庭成員身份后,發(fā)送一條開鎖短信給GSM模塊,單片機分析短信指令后給繼電器通電,打開門鎖。開鎖后液晶顯示器的第一行顯示“Unlock!”。關門時,單片機控制繼電器斷電,門被自動上鎖。此外,連續(xù)輸錯三次密碼,鍵盤會被鎖定,液晶顯示器第二行顯示“Dead Lock!”,此時只能通過戶主發(fā)送開門短信解鎖[3]。若在門開著的狀態(tài)下按下呼叫鍵,則進入密碼修改模式,首先要求用戶輸入原密碼,驗證通過后再輸入兩次新密碼,密碼才能修改成功。若通過撬門等非正常手段開門,蜂鳴器會報警,同時向戶主發(fā)送非法進入短信[4]。
本設計采用STC89C516單片機作為主控制器,該單片機擁有64 kB ROM和1 280 B RAM,為下載大型程序和多變量定義提供了保證。
采用LCD1602液晶顯示器用于顯示門鎖的狀態(tài)和已輸入密碼位數(shù)等信息。LCD1602的8位總線接單片機的P0口,RW、RS和E引腳分別與單片機的P2.5、P2.6和P2.7相連。
3×4矩陣鍵盤接單片機的P1口,包括0~9共10個數(shù)字按鍵、1個撥打戶主電話或修改密碼復用按鍵和1個掛機按鍵。
GSM模塊采用SIMCom公司的工業(yè)級四頻SIM800C芯片,可以低功耗實現(xiàn)語音、短信服務SMS(Short Message Service)、數(shù)據(jù)和傳真信息的傳輸。該模塊支持TTL電平控制,在共地的前提下,模塊上的RXD和TXD可直接與單片機的P3.1(TXD)和P3.0(RXD)相連,單片機通過串行口與GSM模塊通信,發(fā)送AT控制指令和接收數(shù)據(jù)。該模塊還可以直接與耳機和麥克風相連,實現(xiàn)語音通話。
單片機的P3.5引腳信號經(jīng)三極管放大后控制繼電器的開閉,繼電器又控制電磁鐵通電或斷電。電磁鐵通電時,鎖舌被吸出扣盒,門被打開;電磁鐵不通電時,鎖舌被彈簧彈回扣盒,門被鎖上。
此外,單片機的P3.4引腳信號經(jīng)三極管放大后接蜂鳴器,用于報警。金屬接觸片一端接地,另一端與P3.2相連。
本設計的程序包括主程序、LCD初始化子程序、串口初始化子程序、發(fā)送AT指令子程序、LCD顯示子程序、鍵盤掃描和鍵值譯碼子程序、串口中斷服務子程序、定時器中斷服務子程序和延時子程序等。
系統(tǒng)上電或復位后,主程序首先調用初始化子程序和發(fā)送AT命令子程序對所用到的資源初始化,設定它們的工作方式。這些資源有定時器、串口、LCD和GSM模塊等。之后不斷地依次循環(huán)判斷是否需要掃描鍵盤、是否需要執(zhí)行短信指令,并根據(jù)門的狀態(tài)判斷是否需要鎖門或報警。如果某一項判斷結果是否定的,則不做任何操作而繼續(xù)進行下一項判斷。主程序流程圖如圖1所示。

圖1 主程序流程圖
本設計中,LCD初始化子程序將LCD1602的數(shù)據(jù)總線設置為8位,雙行顯示,每字符為5*7的點陣,不顯示光標,且寫入新數(shù)據(jù)后隱藏的光標右移屏幕不移,最后完成清屏。
LCD顯示函數(shù)負責將字符串顯示到屏幕相應位置上。第一行顯示門的狀態(tài),第二行顯示星號密碼。注意,在某一行顯示新字符串前,必須先讓該行全部顯示空格字符,否則新舊字符串交疊會導致顯示混亂。
串口初始化子程序的主要作用是設置單片機串口的工作方式和波特率,以及開串口中斷和允許串口接收數(shù)據(jù)等。本設計單片機所使用的晶振頻率為12 MHz,串口工作在方式1下,由工作在方式2自動置初值的定時器1作為波特率發(fā)生器。通過對定時器1置合適的初值,可產(chǎn)生約4 800 Bd的波特率。若要產(chǎn)生沒有誤差的波特率,可以采用11.059 2 MHz的晶振[5]。
AT指令是計算機操作GSM模塊的指令集。AT指令都以AT開頭,以回車符“ ”和換行符“ ”結尾。本設計在對GSM模塊初始化時發(fā)送了以下4條AT指令[6]:
SendATComm("AT ");
//檢測串口通信是否正常
SendATComm("ATE0 ");
//關閉指令回顯
SendATComm("AT+CMGF=1 ");
//設置短信為TEXT格式
SendATComm("AT+CNMI=2,2 ");
//收到短信時直接傳給單片機
SendATComm是字符串發(fā)送函數(shù),每發(fā)送一個字符后都要等待發(fā)送中斷標志位TI變1才能發(fā)送下一個字符。AT指令必須放到雙引號中作為字符串被發(fā)送。
程序中用到的其他AT指令和它們的作用見表1,其中“*”表示電話號碼。

表1 程序中用到的其他AT指令及功能
串口中斷服務子程序用于接收和校驗GSM模塊收到的短信。GSM模塊收到短信后發(fā)送給單片機的數(shù)據(jù)格式如下:
+CMT:"NUM","","TIME", DATA
其中:首尾的“ ”為GSM模塊返回數(shù)據(jù)的固有格式;“+CMT”為收到了短信;“NUM”為短信發(fā)送方的電話號碼;“TIME”為收到短信的時間;“DATA”為短信內容,因為已將短信初始化為TEXT格式,故只能收發(fā)字符短信,不能也沒必要收發(fā)漢字。另外需要注意的是,在冒號和臨近的引號之間有一個空格。串口中斷服務子程序流程圖如圖2所示。
當串口發(fā)生中斷后,串口中斷服務子程序首先判斷中斷是否由接收引起,若確是接收中斷,則軟件清零接收中斷標志位RI,并開始接收字符,否則返回主程序。保存字符時要濾掉無用的格式控制字符“ ”,從“+”開始保存,直到保存完畢發(fā)送方的電話號碼(含國家代碼),共22個字符,停止保存,然后通過調用字符串比較函數(shù)校驗已保存的字符串是否戶主所發(fā)短信。若校驗通過,則標記已通過校驗,并重新計“ ”的個數(shù)。由于已停止保存,所以收到短信的時間“TIME”等無用信息將被跳過。當遇到校驗后的第1個“ ”時,保存功能被重新打開,開始保存短信內容“DATA”。當遇到校驗后的第2個“ ”時,說明短信內容“DATA”已接收完畢,然后將“DATA”復制到指令數(shù)組中,待返回主程序后根據(jù)“DATA”的具體內容執(zhí)行相應操作(如開鎖)。若校驗未通過,則不接收短信內容,直接返回主程序。

圖2 串口中斷服務子程序流程圖
本設計在普通電子密碼鎖的基礎上增加了GSM模塊,既繼承了電子密碼鎖無需攜帶鑰匙、不易被技術開鎖的優(yōu)點,又彌補了其對于防范意識較差的老人或小孩在輸入密碼時容易被人看到的缺點。既能用鍵盤開鎖,也能短信遠程開鎖,非法進入時還能遠程報警。所使用的硬件成本低廉、安全可靠,在開發(fā)板上測試效果后,可完全實現(xiàn)設計功能。