基于单片机的GSM家庭防盗门电子锁的设计

2018-12-21 06:52杨晓龙
机械工程与自动化 2018年6期
关键词:主程序户主子程序

杨晓龙

(山西工程技术学院 信息工程与自动化系,山西 阳泉 045000)

0 引言

随着人们生活水平的不断提高,对家庭安全和防盗也越来越重视。防盗最简单直接的办法是安装防盗门。然而目前主流的防盗门锁仍然采用钥匙开启的机械锁,这种锁有两个缺点:一是钥匙携带不便,容易丢失且可以被复制;二是防技术开启的能力很差。虽然目前有些防盗门已经采用了电子密码锁,但老人或小孩防范意识差,在输入密码时容易被别人看到导致密码泄露[1]。本设计在基本电子密码锁的基础上增加了GSM远程控制模块和防盗报警装置,可实现一键拨打户主电话和短信远程开锁,既没有机械锁的缺点,又避免了密码的泄露。该设计成本低,安装方便,功能丰富,除家庭防盗门外,也可用于银行、仓库等存放有贵重物品的场合。

1 防盗门电子锁总体设计

本设计包括单片机、液晶显示器、矩阵键盘、GSM模块、继电器和电磁铁模块、蜂鸣器模块以及金属接触片共7部分[2]。金属接触片是一对,分别置于铰链所在侧的门框和门边上,用于检测门的开闭状态。门处于关闭状态时,电磁铁不通电,弹簧弹出锁舌,门被上锁,液晶显示器的第一行显示“Locked!”。对于防范意识较强知道密码的家庭成员,可以通过键盘输入密码开锁,密码以星号的形式显示在液晶显示器的第二行;对于防范意识较差不知道密码的家庭成员,可以按下键盘上的呼叫键,单片机会控制GSM模块自动拨打户主电话,户主通过电话确认家庭成员身份后,发送一条开锁短信给GSM模块,单片机分析短信指令后给继电器通电,打开门锁。开锁后液晶显示器的第一行显示“Unlock!”。关门时,单片机控制继电器断电,门被自动上锁。此外,连续输错三次密码,键盘会被锁定,液晶显示器第二行显示“Dead Lock!”,此时只能通过户主发送开门短信解锁[3]。若在门开着的状态下按下呼叫键,则进入密码修改模式,首先要求用户输入原密码,验证通过后再输入两次新密码,密码才能修改成功。若通过撬门等非正常手段开门,蜂鸣器会报警,同时向户主发送非法进入短信[4]。

2 硬件设计

本设计采用STC89C516单片机作为主控制器,该单片机拥有64 kB ROM和1 280 B RAM,为下载大型程序和多变量定义提供了保证。

采用LCD1602液晶显示器用于显示门锁的状态和已输入密码位数等信息。LCD1602的8位总线接单片机的P0口,RW、RS和E引脚分别与单片机的P2.5、P2.6和P2.7相连。

3×4矩阵键盘接单片机的P1口,包括0~9共10个数字按键、1个拨打户主电话或修改密码复用按键和1个挂机按键。

GSM模块采用SIMCom公司的工业级四频SIM800C芯片,可以低功耗实现语音、短信服务SMS(Short Message Service)、数据和传真信息的传输。该模块支持TTL电平控制,在共地的前提下,模块上的RXD和TXD可直接与单片机的P3.1(TXD)和P3.0(RXD)相连,单片机通过串行口与GSM模块通信,发送AT控制指令和接收数据。该模块还可以直接与耳机和麦克风相连,实现语音通话。

单片机的P3.5引脚信号经三极管放大后控制继电器的开闭,继电器又控制电磁铁通电或断电。电磁铁通电时,锁舌被吸出扣盒,门被打开;电磁铁不通电时,锁舌被弹簧弹回扣盒,门被锁上。

此外,单片机的P3.4引脚信号经三极管放大后接蜂鸣器,用于报警。金属接触片一端接地,另一端与P3.2相连。

3 软件设计

本设计的程序包括主程序、LCD初始化子程序、串口初始化子程序、发送AT指令子程序、LCD显示子程序、键盘扫描和键值译码子程序、串口中断服务子程序、定时器中断服务子程序和延时子程序等。

3.1 主程序

系统上电或复位后,主程序首先调用初始化子程序和发送AT命令子程序对所用到的资源初始化,设定它们的工作方式。这些资源有定时器、串口、LCD和GSM模块等。之后不断地依次循环判断是否需要扫描键盘、是否需要执行短信指令,并根据门的状态判断是否需要锁门或报警。如果某一项判断结果是否定的,则不做任何操作而继续进行下一项判断。主程序流程图如图1所示。

图1 主程序流程图

3.2 LCD初始化和显示子程序

本设计中,LCD初始化子程序将LCD1602的数据总线设置为8位,双行显示,每字符为5*7的点阵,不显示光标,且写入新数据后隐藏的光标右移屏幕不移,最后完成清屏。

LCD显示函数负责将字符串显示到屏幕相应位置上。第一行显示门的状态,第二行显示星号密码。注意,在某一行显示新字符串前,必须先让该行全部显示空格字符,否则新旧字符串交叠会导致显示混乱。

3.3 串口初始化子程序

串口初始化子程序的主要作用是设置单片机串口的工作方式和波特率,以及开串口中断和允许串口接收数据等。本设计单片机所使用的晶振频率为12 MHz,串口工作在方式1下,由工作在方式2自动置初值的定时器1作为波特率发生器。通过对定时器1置合适的初值,可产生约4 800 Bd的波特率。若要产生没有误差的波特率,可以采用11.059 2 MHz的晶振[5]。

3.4 AT指令和发送AT指令子程序

AT指令是计算机操作GSM模块的指令集。AT指令都以AT开头,以回车符“ ”和换行符“ ”结尾。本设计在对GSM模块初始化时发送了以下4条AT指令[6]:

SendATComm("AT ");

//检测串口通信是否正常

SendATComm("ATE0 ");

//关闭指令回显

SendATComm("AT+CMGF=1 ");

//设置短信为TEXT格式

SendATComm("AT+CNMI=2,2 ");

//收到短信时直接传给单片机

SendATComm是字符串发送函数,每发送一个字符后都要等待发送中断标志位TI变1才能发送下一个字符。AT指令必须放到双引号中作为字符串被发送。

程序中用到的其他AT指令和它们的作用见表1,其中“*”表示电话号码。

表1 程序中用到的其他AT指令及功能

3.5 串口中断服务子程序

串口中断服务子程序用于接收和校验GSM模块收到的短信。GSM模块收到短信后发送给单片机的数据格式如下:

+CMT:"NUM","","TIME", DATA

其中:首尾的“ ”为GSM模块返回数据的固有格式;“+CMT”为收到了短信;“NUM”为短信发送方的电话号码;“TIME”为收到短信的时间;“DATA”为短信内容,因为已将短信初始化为TEXT格式,故只能收发字符短信,不能也没必要收发汉字。另外需要注意的是,在冒号和临近的引号之间有一个空格。串口中断服务子程序流程图如图2所示。

当串口发生中断后,串口中断服务子程序首先判断中断是否由接收引起,若确是接收中断,则软件清零接收中断标志位RI,并开始接收字符,否则返回主程序。保存字符时要滤掉无用的格式控制字符“ ”,从“+”开始保存,直到保存完毕发送方的电话号码(含国家代码),共22个字符,停止保存,然后通过调用字符串比较函数校验已保存的字符串是否户主所发短信。若校验通过,则标记已通过校验,并重新计“ ”的个数。由于已停止保存,所以收到短信的时间“TIME”等无用信息将被跳过。当遇到校验后的第1个“ ”时,保存功能被重新打开,开始保存短信内容“DATA”。当遇到校验后的第2个“ ”时,说明短信内容“DATA”已接收完毕,然后将“DATA”复制到指令数组中,待返回主程序后根据“DATA”的具体内容执行相应操作(如开锁)。若校验未通过,则不接收短信内容,直接返回主程序。

图2 串口中断服务子程序流程图

4 结束语

本设计在普通电子密码锁的基础上增加了GSM模块,既继承了电子密码锁无需携带钥匙、不易被技术开锁的优点,又弥补了其对于防范意识较差的老人或小孩在输入密码时容易被人看到的缺点。既能用键盘开锁,也能短信远程开锁,非法进入时还能远程报警。所使用的硬件成本低廉、安全可靠,在开发板上测试效果后,可完全实现设计功能。

猜你喜欢
主程序户主子程序
自动升级程序在船舶监测系统中的应用
回来(外一首)
浅谈数控铣削技术代码程序的嵌套方式研究
电控冰箱软件模块化设计
时光倒流 换回PotPlayer老图标
浅谈子程序在数控车编程中的应用
子程序在数控车加工槽中的应用探索
西门子840D系统JOG模式下PLC调用并执行NC程序
简化编程与子程序嵌套的应用
汉唐户主资格的变迁*