楊曉龍
(山西工程技術(shù)學(xué)院 信息工程與自動(dòng)化系,山西 陽(yáng)泉 045000)
隨著人們生活水平的不斷提高,對(duì)家庭安全和防盜也越來(lái)越重視。防盜最簡(jiǎn)單直接的辦法是安裝防盜門(mén)。然而目前主流的防盜門(mén)鎖仍然采用鑰匙開(kāi)啟的機(jī)械鎖,這種鎖有兩個(gè)缺點(diǎn):一是鑰匙攜帶不便,容易丟失且可以被復(fù)制;二是防技術(shù)開(kāi)啟的能力很差。雖然目前有些防盜門(mén)已經(jīng)采用了電子密碼鎖,但老人或小孩防范意識(shí)差,在輸入密碼時(shí)容易被別人看到導(dǎo)致密碼泄露[1]。本設(shè)計(jì)在基本電子密碼鎖的基礎(chǔ)上增加了GSM遠(yuǎn)程控制模塊和防盜報(bào)警裝置,可實(shí)現(xiàn)一鍵撥打戶(hù)主電話(huà)和短信遠(yuǎn)程開(kāi)鎖,既沒(méi)有機(jī)械鎖的缺點(diǎn),又避免了密碼的泄露。該設(shè)計(jì)成本低,安裝方便,功能豐富,除家庭防盜門(mén)外,也可用于銀行、倉(cāng)庫(kù)等存放有貴重物品的場(chǎng)合。
本設(shè)計(jì)包括單片機(jī)、液晶顯示器、矩陣鍵盤(pán)、GSM模塊、繼電器和電磁鐵模塊、蜂鳴器模塊以及金屬接觸片共7部分[2]。金屬接觸片是一對(duì),分別置于鉸鏈所在側(cè)的門(mén)框和門(mén)邊上,用于檢測(cè)門(mén)的開(kāi)閉狀態(tài)。門(mén)處于關(guān)閉狀態(tài)時(shí),電磁鐵不通電,彈簧彈出鎖舌,門(mén)被上鎖,液晶顯示器的第一行顯示“Locked!”。對(duì)于防范意識(shí)較強(qiáng)知道密碼的家庭成員,可以通過(guò)鍵盤(pán)輸入密碼開(kāi)鎖,密碼以星號(hào)的形式顯示在液晶顯示器的第二行;對(duì)于防范意識(shí)較差不知道密碼的家庭成員,可以按下鍵盤(pán)上的呼叫鍵,單片機(jī)會(huì)控制GSM模塊自動(dòng)撥打戶(hù)主電話(huà),戶(hù)主通過(guò)電話(huà)確認(rèn)家庭成員身份后,發(fā)送一條開(kāi)鎖短信給GSM模塊,單片機(jī)分析短信指令后給繼電器通電,打開(kāi)門(mén)鎖。開(kāi)鎖后液晶顯示器的第一行顯示“Unlock!”。關(guān)門(mén)時(shí),單片機(jī)控制繼電器斷電,門(mén)被自動(dòng)上鎖。此外,連續(xù)輸錯(cuò)三次密碼,鍵盤(pán)會(huì)被鎖定,液晶顯示器第二行顯示“Dead Lock!”,此時(shí)只能通過(guò)戶(hù)主發(fā)送開(kāi)門(mén)短信解鎖[3]。若在門(mén)開(kāi)著的狀態(tài)下按下呼叫鍵,則進(jìn)入密碼修改模式,首先要求用戶(hù)輸入原密碼,驗(yàn)證通過(guò)后再輸入兩次新密碼,密碼才能修改成功。若通過(guò)撬門(mén)等非正常手段開(kāi)門(mén),蜂鳴器會(huì)報(bào)警,同時(shí)向戶(hù)主發(fā)送非法進(jìn)入短信[4]。
本設(shè)計(jì)采用STC89C516單片機(jī)作為主控制器,該單片機(jī)擁有64 kB ROM和1 280 B RAM,為下載大型程序和多變量定義提供了保證。
采用LCD1602液晶顯示器用于顯示門(mén)鎖的狀態(tài)和已輸入密碼位數(shù)等信息。LCD1602的8位總線(xiàn)接單片機(jī)的P0口,RW、RS和E引腳分別與單片機(jī)的P2.5、P2.6和P2.7相連。
3×4矩陣鍵盤(pán)接單片機(jī)的P1口,包括0~9共10個(gè)數(shù)字按鍵、1個(gè)撥打戶(hù)主電話(huà)或修改密碼復(fù)用按鍵和1個(gè)掛機(jī)按鍵。
GSM模塊采用SIMCom公司的工業(yè)級(jí)四頻SIM800C芯片,可以低功耗實(shí)現(xiàn)語(yǔ)音、短信服務(wù)SMS(Short Message Service)、數(shù)據(jù)和傳真信息的傳輸。該模塊支持TTL電平控制,在共地的前提下,模塊上的RXD和TXD可直接與單片機(jī)的P3.1(TXD)和P3.0(RXD)相連,單片機(jī)通過(guò)串行口與GSM模塊通信,發(fā)送AT控制指令和接收數(shù)據(jù)。該模塊還可以直接與耳機(jī)和麥克風(fēng)相連,實(shí)現(xiàn)語(yǔ)音通話(huà)。
單片機(jī)的P3.5引腳信號(hào)經(jīng)三極管放大后控制繼電器的開(kāi)閉,繼電器又控制電磁鐵通電或斷電。電磁鐵通電時(shí),鎖舌被吸出扣盒,門(mén)被打開(kāi);電磁鐵不通電時(shí),鎖舌被彈簧彈回扣盒,門(mén)被鎖上。
此外,單片機(jī)的P3.4引腳信號(hào)經(jīng)三極管放大后接蜂鳴器,用于報(bào)警。金屬接觸片一端接地,另一端與P3.2相連。
本設(shè)計(jì)的程序包括主程序、LCD初始化子程序、串口初始化子程序、發(fā)送AT指令子程序、LCD顯示子程序、鍵盤(pán)掃描和鍵值譯碼子程序、串口中斷服務(wù)子程序、定時(shí)器中斷服務(wù)子程序和延時(shí)子程序等。
系統(tǒng)上電或復(fù)位后,主程序首先調(diào)用初始化子程序和發(fā)送AT命令子程序?qū)λ玫降馁Y源初始化,設(shè)定它們的工作方式。這些資源有定時(shí)器、串口、LCD和GSM模塊等。之后不斷地依次循環(huán)判斷是否需要掃描鍵盤(pán)、是否需要執(zhí)行短信指令,并根據(jù)門(mén)的狀態(tài)判斷是否需要鎖門(mén)或報(bào)警。如果某一項(xiàng)判斷結(jié)果是否定的,則不做任何操作而繼續(xù)進(jìn)行下一項(xiàng)判斷。主程序流程圖如圖1所示。
圖1 主程序流程圖
本設(shè)計(jì)中,LCD初始化子程序?qū)CD1602的數(shù)據(jù)總線(xiàn)設(shè)置為8位,雙行顯示,每字符為5*7的點(diǎn)陣,不顯示光標(biāo),且寫(xiě)入新數(shù)據(jù)后隱藏的光標(biāo)右移屏幕不移,最后完成清屏。
LCD顯示函數(shù)負(fù)責(zé)將字符串顯示到屏幕相應(yīng)位置上。第一行顯示門(mén)的狀態(tài),第二行顯示星號(hào)密碼。注意,在某一行顯示新字符串前,必須先讓該行全部顯示空格字符,否則新舊字符串交疊會(huì)導(dǎo)致顯示混亂。
串口初始化子程序的主要作用是設(shè)置單片機(jī)串口的工作方式和波特率,以及開(kāi)串口中斷和允許串口接收數(shù)據(jù)等。本設(shè)計(jì)單片機(jī)所使用的晶振頻率為12 MHz,串口工作在方式1下,由工作在方式2自動(dòng)置初值的定時(shí)器1作為波特率發(fā)生器。通過(guò)對(duì)定時(shí)器1置合適的初值,可產(chǎn)生約4 800 Bd的波特率。若要產(chǎn)生沒(méi)有誤差的波特率,可以采用11.059 2 MHz的晶振[5]。
AT指令是計(jì)算機(jī)操作GSM模塊的指令集。AT指令都以AT開(kāi)頭,以回車(chē)符“ ”和換行符“ ”結(jié)尾。本設(shè)計(jì)在對(duì)GSM模塊初始化時(shí)發(fā)送了以下4條AT指令[6]:
SendATComm("AT ");
//檢測(cè)串口通信是否正常
SendATComm("ATE0 ");
//關(guān)閉指令回顯
SendATComm("AT+CMGF=1 ");
//設(shè)置短信為T(mén)EXT格式
SendATComm("AT+CNMI=2,2 ");
//收到短信時(shí)直接傳給單片機(jī)
SendATComm是字符串發(fā)送函數(shù),每發(fā)送一個(gè)字符后都要等待發(fā)送中斷標(biāo)志位TI變1才能發(fā)送下一個(gè)字符。AT指令必須放到雙引號(hào)中作為字符串被發(fā)送。
程序中用到的其他AT指令和它們的作用見(jiàn)表1,其中“*”表示電話(huà)號(hào)碼。
表1 程序中用到的其他AT指令及功能
串口中斷服務(wù)子程序用于接收和校驗(yàn)GSM模塊收到的短信。GSM模塊收到短信后發(fā)送給單片機(jī)的數(shù)據(jù)格式如下:
+CMT:"NUM","","TIME", DATA
其中:首尾的“ ”為GSM模塊返回?cái)?shù)據(jù)的固有格式;“+CMT”為收到了短信;“NUM”為短信發(fā)送方的電話(huà)號(hào)碼;“TIME”為收到短信的時(shí)間;“DATA”為短信內(nèi)容,因?yàn)橐褜⒍绦懦跏蓟癁門(mén)EXT格式,故只能收發(fā)字符短信,不能也沒(méi)必要收發(fā)漢字。另外需要注意的是,在冒號(hào)和臨近的引號(hào)之間有一個(gè)空格。串口中斷服務(wù)子程序流程圖如圖2所示。
當(dāng)串口發(fā)生中斷后,串口中斷服務(wù)子程序首先判斷中斷是否由接收引起,若確是接收中斷,則軟件清零接收中斷標(biāo)志位RI,并開(kāi)始接收字符,否則返回主程序。保存字符時(shí)要濾掉無(wú)用的格式控制字符“ ”,從“+”開(kāi)始保存,直到保存完畢發(fā)送方的電話(huà)號(hào)碼(含國(guó)家代碼),共22個(gè)字符,停止保存,然后通過(guò)調(diào)用字符串比較函數(shù)校驗(yàn)已保存的字符串是否戶(hù)主所發(fā)短信。若校驗(yàn)通過(guò),則標(biāo)記已通過(guò)校驗(yàn),并重新計(jì)“ ”的個(gè)數(shù)。由于已停止保存,所以收到短信的時(shí)間“TIME”等無(wú)用信息將被跳過(guò)。當(dāng)遇到校驗(yàn)后的第1個(gè)“ ”時(shí),保存功能被重新打開(kāi),開(kāi)始保存短信內(nèi)容“DATA”。當(dāng)遇到校驗(yàn)后的第2個(gè)“ ”時(shí),說(shuō)明短信內(nèi)容“DATA”已接收完畢,然后將“DATA”復(fù)制到指令數(shù)組中,待返回主程序后根據(jù)“DATA”的具體內(nèi)容執(zhí)行相應(yīng)操作(如開(kāi)鎖)。若校驗(yàn)未通過(guò),則不接收短信內(nèi)容,直接返回主程序。
圖2 串口中斷服務(wù)子程序流程圖
本設(shè)計(jì)在普通電子密碼鎖的基礎(chǔ)上增加了GSM模塊,既繼承了電子密碼鎖無(wú)需攜帶鑰匙、不易被技術(shù)開(kāi)鎖的優(yōu)點(diǎn),又彌補(bǔ)了其對(duì)于防范意識(shí)較差的老人或小孩在輸入密碼時(shí)容易被人看到的缺點(diǎn)。既能用鍵盤(pán)開(kāi)鎖,也能短信遠(yuǎn)程開(kāi)鎖,非法進(jìn)入時(shí)還能遠(yuǎn)程報(bào)警。所使用的硬件成本低廉、安全可靠,在開(kāi)發(fā)板上測(cè)試效果后,可完全實(shí)現(xiàn)設(shè)計(jì)功能。