资源描述
四川师范大学成都学院物联网实训设计报告前言以智能中控主机为核心,采用国际领先的室内无线组网技术,实现门禁、空调、地暖、灯光、热水器、家庭影院、窗帘、各类报警器等家庭电子设备与控制主机之间的通讯组网,用户可以通过手机、座机、遥控面板以及互联网通信终端等方式,一键搞定所有家电设备,随时了解家中的实时信息,远程完成对家里各项设备的控制。只要手指轻轻一触,家里所有电器都可以通过用手机平板电脑或者遥控面板一键操控,轻松对家居中的灯光、电视、空调、窗帘、摄像头等进行实时查看与控制,让你提前享受未来生活,一切变化尽在你的指尖!1.总体设计方案1.1 基于GSM安全系统简介GSM安全系统是基于移动通信网络的监控报警技术,彻底解决了普通防盗器、监控器无法解决的远程报警和易于破解的难题。利用通信加密技术,让用户的家居安全无忧,是继单向防盗器、双向防盗器后的新一代防盗产品。GSM智能防盗器,是利用最新材料技术、最新信息技术、最新人工智能设计让防盗器具备智慧灵魂,使人与财产的安全保障突破时空限制。在性能上必须要在各种情况条件下的高可靠性,在功能上必须既要让用户有不可破解的最高安全等级,又要让用户操作方便,甚至系统为用户自动服务。GSM网络智能防盗器符合全能的防盗技术特点:及时通知:全球范围最高安全:杜绝解码操作方便:手动自动实用功能:防盗防火GSM防盗被喻为继第一代机械锁,第二代电子式防盗锁,第三代芯片式数码防盗器,第四代GPS防盗之后的第五代防盗器。本系统充分运用GSM移动通讯网络,结合数字通讯技术,实现对家居进行状态监控、调度、防盗报警、防火报警等功能。GSM网络防盗主要是突破了无距离的限制。无服务费、无月租、房屋遇到入侵,5秒钟通知到户主,户主可以第一时间制止盗窃行为的发生,防止火灾蔓延。1.2 基于GSM安全系统现状与发展趋势城市规模迅速扩大,外来人口大量涌入,使本来就复杂的城市管理更加复杂。家庭被盗,住户被抢,常有发生。对此,公安部门虽作了大量投入,仍不尽人意。其原因大体是:(1)有的家庭被盗,损失数目极少,公安部门没有用常规的方法立案侦察。(2)有的住户虽然损失严重,但法律意识浅薄,不能将当时的情况和线索作一个明确的表述,自然增加了破案难度。(3)作案人诡计多端,狡猾、飘忽不定,没有固定的着落和去处。(4)公安部门时时有很多大案要案要办,使破案周期变长,破案率下降。综上所述,GSM家庭防盗系统是一个尖端科技的安防产品,性能可靠操作简单,具有深远的发展意义。2.设计正文随着生活水平的提高,提别是物质生活水平的不断提高,人们对自己的个人安全和家庭财产安全越来越重视,安全已成为一种市场需求;同时经济的飞速发展伴随着城市流动人口的急剧增加,给家庭防控增加了新的难题和提出了新的课题,传统的人防物防的形式已难以适应社会形式发展的需求。科学技术的进步和普遍应用,进一步同动了智能化家庭的建设步伐,家庭安全技术防范系统已经从本地向远程监控发展,从社会的周边防范向家庭内部防控逐渐靠拢,家庭防盗报警系统在人们对美好生活的追求中迅速崛起。一个完善的职能家庭,具有便捷、安全、舒适、高档的生活环境,确保每一个家庭住户的声明财产安全,是建设本系统的最大意义和根本目的。GSM模块将GSM射频芯片、基带处理芯片、存储器、功放器件等集成在一块线路板上,具有独立的操作系统、GSM射频处理、基带处理并提供标准接口的功能模块。因此,GSM模块具有发送SMS短信,语音通话,GPRS数据传输等基于GSM网络进行通信的所有基本功能。简单来讲,GSM模块加上键盘、显示屏和电池,就是一部手机。目前,GSM模块依然在广泛的工业应用领域使用,在更行各业都能看到GSM模块应用的产品。例如,在车载监控领域,使用GSM模块将车辆行驶的GPS数据传输到车辆管理中心;在电力、水务系统,通过GSM模块实现了远程智能抄表,可以实时监控用户的用电和用水量;在测绘行业,为很多偏僻的测绘点安装了GSM模块实现了实时的监控,不必再人工收集数据;在家庭,可以安装无线报警系统,一旦发生火情或盗窃行为,可以立即通知户主和报警;在国外,很多老人小孩带了个人跟踪器,防止老人和小孩走失或意外发生,里面也是集成了GSM模块。可以说,随着GSM的网络建设的完善,GSM模块的应用范围也越来越广。通过手机终端接收报警短信,并且可以发送命令短信异地遥控系统实现各种操作。利用各种传感器对可能出现的煤气泄露、火灾、家中门窗被打开并有人闯入等意外情况进行,并通过短信发送特定报警信息于预先设定好的手机号码,通知事主做出相应措施。通过GSM 网络,即使远在千里之外也能对家中发生的各种突发意外情况了如指掌,使生活更安全更智能。 2.1 基于GSM的安全系统简介GSM安全系统是基于移动通信网络的监控报警技术,彻底解决了普通防盗器、监控器无法解决的远程报警和易于破解的难题。利用通信加密技术,让用户的家居安全无忧,是继单向防盗器、双向防盗器后的新一代防盗产品。GSM智能防盗器,是利用最新材料技术、最新信息技术、最新人工智能设计让防盗器具备智慧灵魂,使人与财产的安全保障突破时空限制。在性能上必须要在各种情况条件下的高可靠性,在功能上必须既要让用户有不可破解的最高安全等级,又要让用户操作方便,甚至系统为用户自动服务,系统设计如图1图1 系统设计图2.1 单片机控制模块单片机控制模块主要采用STC89C52单片机作为主控制芯片。STC89C52作为普通51单片机已广泛应用于各种产品中,其接口简单,方便使用,且功能强大。 STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使STC89C52为众多嵌入式控制应用系统提供高灵活、有效的解决方案。STC89C52具有以下标准功能:8K字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。其引脚图如图2所示。图2 STC89C52引脚图2.2 传感器模块传感器模块主要由红外传感式集发射接收于一体的ITR9909。这是一种光电开关。光电开关(光电传感器)是光电接近开关的简称,它是利用被检测物对光束的遮挡或反射,由同步回路选通电路,从而检测物体有无的。物体不限于金属,所有能反射光线的物体均可被检测。光电开关将输入电流在发射器上转换为光信号射出,接收器再根据接收到的光线的强弱或有无对目标物体进行探测。2.3 GSM模块GSM模块主要采用SIEMENS公司的TC35模块,通过串口接入电路与单片机控制模块相连,主要负责实现远距离报警的功能。采用GSM的短信功能,可以使某些控制达到“零距离”。由于短信息的费用低廉,可以取代传统的无线遥控。因此本系统采用单片机控制GSM模块发送GSM短信,实现远距离报警的功能。TC35模块是SIEMENS公司为嵌入式设备设计的GSM双频通讯核心模块,TC35T内含TC35/SIM卡座/电源/天线/RS232接口,是可独立使用的通讯终端。TC35支持标准的AT命令集,通过AT指令可实现发送短信功能。模块有AT命令集接口,支持文本和PDU模式的短消息、第三组的二类传真、以及2.4K、4.8K、9.6K的非透明模式。TC35模块主要由GSM基带处理器、GSM射频模块、供电模块(ASIC)、闪存、ZIF连接器、天线接口六部分组成。作为TC35的核心,基带处理器主要处理GSM终端内的语音、数据信号,并涵盖了蜂窝射频设备中的所有的模拟和数字功能。在不需要额外硬件电路的前提下,可支持FR、HR和EFR语音信道编码。设置以下AT指令,GSM模块可以发送短消息:AT+CMGF=1回车(采用文本格式发送,如用PDU格式,则AT+CMGF=0)AT+CMGS=“+8613xxxxxxxxx”回车输入短消息。Crtl+Z结束并发送。2.4 存储器模块为了实现对密码的存储,防止不法分子切断电源造成密码丢失,本系统采用了AT24C02存储器对密码进行存储。AT24C02是一个2K位串行CMOS E2PROM,内部含有256个8位字节。内部有一个16字节页写缓冲器,该器件通过I2C总线接口进行操作,有一个专门的写保护功能。AT24C02支持I2C总线数据传送协议。I2C总线协议规定,任何将数据传送到总线的器件为发送器。任何从总线接收数据的器件为接收器。数据传送是由产生串行时钟和所有起始停止信号的主器件控制的。主器件和从器件都可以作为发送器或接收器,但由主器件控制传送数据(发送或接收)的模式。 AT24C02通过8个引脚实现数据的存储功能,其引脚图如下图3所示。图3AT24C02引脚图2.5 液晶键盘模块液晶键盘模块主要由4*4矩阵键盘和LCD1602液晶显示器组成。4*4矩阵键盘主要提供用户操作输入功能,是实现人机通信的主要控制部分;LCD1602液晶显示器主要负责显示系统信息,协助用户操作系统。下面分别简单介绍矩阵键盘和LCD1602液晶显示器的性能和工作原理。2.5.1 LCD1602液晶显示器LCD1602是一种字符型液晶显示模块,是一种专门用于显示字母、数字、符号等点阵式的LCD。该液晶显示器使用方便,功耗小,因此本系统采用LCD1602作为系统的显示部分。LCD1602包括4种工作状态,通过MCU设置RS、RW和E值,可使液晶工作在不同的状态。读状态:输入:RS0,RW1,E1输出:D0D7状态字写指令:输入:RS0,RW0,D0D7=指令码,E高脉冲输出:无读数据:输入:RS1,RW1,E1输出:D0D7=数据写数据:输入:RS0,RW1,E1输出:无2.5.2 4*4矩阵键盘在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,从而节省I/O资源,因此在本设计中采用4*4矩阵键盘。矩阵式键盘中,行、列线分别连接到按键开关的两端,行线通过上拉电阻接到+5V上。当无键按下时,行线处于高电平状态;当有键按下时,行、列线将导通,此时,行线电平将由与此行线相连的列线电平决定。对于矩阵式键盘,按键的位置由行号和列号唯一确定,因此可分别对行号和列号进行二进制编码,然后将两值合成一个字节,高4位是行号,低4位是列号。编码相互转换可通过计算或查表的方法实现。3.硬件设计3.1 系统硬件电路设计系统硬件电路主要由单片机控制模块电路、报警模块电路、GSM模块电路、存储器模块电路、液晶键盘模块电路和传感器模块电路组成。系统硬件电路如图4所示。图4 系统电路图3.2 单片机控制模块电路设计单片机电路主要包括晶振电路、复位电路、P0口的上拉电阻等组成,电路如图7所示。接口P3为单片机P0引脚的上拉电阻,接口P2为矩阵键盘的接入口。在晶振电路中,晶振频率选为11.0592MHz,原因是使初值为整数,从而产生精确的波特率,如图5 图5 单片机控制模块电路图3.3 传感器模块电路设计在本设计中,为了提高传感器的精确度和方便性,传感器都通过引线连接到相应的接口上,而非直接焊接到电路板上。由于传感器的信号为弱电平信号,容易造成单片机的误操作。为保证系统具有较高的灵敏度,故加入由LM324组成的放大电路,电路如图8所示。接口P6为烟雾传感器的接口;接口P7为人体感应传感器的接口。通过分别调整可变电阻R2和R7,可以改变烟雾传感器和人体感应传感器信号的放大倍数。由于单片机的中断方式为低电平中断,所以经放大器放大后的信号要先接入反相器,才能再连接到单片机的中断引脚上如图6。图6 传感器模块电路图3.4 报警模块电路设计由于单片机STC89C52提供的工作电流只有20mA,而蜂鸣器正常工作电流一般比较大,片机的I/O口是无法直接驱动的,因此需要一个外部的驱动电路,提供正常工作所需要的电流。报警模块电路图如图7所示,在该电路中,speaker连接在单片机引脚上,接口P4为蜂鸣器,晶体管工作在饱和状态,相当于一个开关。图7 报警模块电路图3.5 GSM模块接口电路设计GSM模块的工作主要由单片机通过串口将AT指令发送到GSM模块。串口电路主要由芯片MAX232进行电平转换,实现串口电压与单片机电压的转换,确保双方可以相互通信,电路如图8所示。单片机的TXD引脚接到MAX232的T2IN引脚,单片机的RXD引脚接到MAX232的T2OUT引脚。图8GSM模块接口电路图3.6 存储器模块电路设计存储器模块电路主要由芯片AT24C02构成,存储器模块电路图如图9所示。在本设计中,只有一个AT24C02被总线寻址这三个地址,故输入脚A0 A1 A2 可悬空或连接到Vss。串行时钟SCL和串行数据/地址引脚SDA分别接到单片机引脚P3.6和P3.7上,通过单片机编程控制存储器的读写。图9存储器模块电路图3.7 液晶模块电路设计液晶模块电路如图10所示。可调电阻R1调节液晶偏压,RS、RW和EN分别接到单片机的P0.5、P0.6、P0.7引脚,通过单片机按相应时序编程控制液晶显示。Data0Data7为液晶数据位,接到单片机P2引脚。图10 液晶模块电路图3.8 PCB板设计在本设计中,硬件部分采用PCB板制作。首先,利用Protel DXP软件绘制电路图并生成PCB板,利用人工布局,对PCB图进行布线。如果使用自动布线,很容易出现飞线或者布线错误。所以在布线时,应该先使用自动布线,然后再手动布线,对部分线路进行修改。在布线过程中,调整元器件的位置和方向,可以改善电路板布线,减少飞线。生成的PCB图如图11所示。图11 PCB板图焊接时,需要特别注意避免造成短路。相距很近的引线要用万用表测量是否存在通路,若通过可能会造成短路等严重的后果。电器元件焊接中应避免烫坏元件。4.软件设计该系统主要实现的功能是:输入密码,密码正确则进入系统。当输入密码错误次数小于3次时,可以重新输入。当错误次数达到3次,系统便进入自锁状态并通过GSM发送短信通知用户。成功进入系统后可以选择不同的功能:开门、修改系统密码和开启报警系统。选择开门功能。则开门的指示灯会亮。选择修改系统密码功能,则按照系统指引输入旧密码、新密码和重复新密码。若输入的密码都正确,则修改密码成功。若输入的密码错误,则需要重新输入,当错误次数达到3次时,系统也会进入自锁状态和通过GSM发送短信通知用户。选择开启报警功能,烟雾传感器和红外热释能传感器便开始工作,一旦检测到信号,报警音响并通过GSM发送短信通知用户。若需要关闭报警功能,只要按关闭报警的按键,并正确输入密码后,报警功能就会关闭。主程序流程图如图17所示。4.1 传感器模块软件设计在本系统中,LCD1602液晶显示是通过调用void display(uchar pos,uchar *q)函数实现的,其流程图如图12所示。在void display(uchar pos,uchar *q)函数中,pos是写入的位置,q指向要写入的数据所在的数组。该函数主要调用lcd_wcmd(),lcd_pos()两个函数,先写显示地址,后写显示数据。单片机P2口接LCD1602的数据引脚,P05、P06、P07分别接LCD1602的RS、RW、EP引脚,通过单片机控制液晶显示图12 流程图在本系统中,键盘的软件实现通过分时扫描、键盘编码的形式来实现,其流程图如图13所示。P1口低4位作为键盘的行,高4位作为键盘的列。P1口低4位先循环输出0,单片机扫描P1口高4位。如果有键按下,P1口高4位不会全为1。如果读取不到P1口的值,比如是干扰,则不做键值处理,返回继续循环下次。图13主程序流程图4.2 GSM模块软件设计在本系统中,GSM模块软件设计是通过串口发送AT指令给GSM模块来实现发送短信的功能,其流程图如图14所示。首先串口发送字符串“AT+CMGF=1r”给GSM模块,设置短信为TXT模式;然后发送“AT+CMGS=13760727792r”,设置收信方的手机号码;接着将待发送短信的内容发给GSM模块;最后发送十六进制的0x1A(回车)确认发送,这样就能通过GSM模块最终实现报警通知用户的功能。程序见附录。图14 短信发送流程图在GSM模块和单片机的串行通信中,选用定时器T1在工作方式2设定波特率为9600,其初值计算公式如下:已知为11.00592MHz,设波特率控制位SMOD=0,则有故在程序设计时,定时器初值设置为0xFD。4.3 存储器模块软件设计在本系统中,AT24C02的存储功能主要是通过I2C总线来实现串行读写,其流程图如图15所示。I2C总线在写入和读取一个8位二进制数时,总是高位在前低位在后。在读函数_24C02Read(unsigned char l_address)中,先向I2C总线发出读取24C02的写地址,在完成I2C串口协议后,写入24C02的读地址,再读取存储器对应位置的数据。在写函数_24C02Write(unsigned char dat,unsigned char l_address)中,先向总线发出写24C02的地址,在完成I2C串口协议后,写入24C02的写地址,然后写入数据。程序见附录。图15 AT24C02读写流程图4.4 液晶键盘模块软件设计在本系统中,LCD1602液晶显示是通过调用void display(uchar pos,uchar *q)函数实现的,其流程图如图16所示。在void display(uchar pos,uchar *q)函数中,pos是写入的位置,q指向要写入的数据所在的数组。该函数主要调用lcd_wcmd(),lcd_pos()两个函数,先写显示地址,后写显示数据。单片机P2口接LCD1602的数据引脚,P05、P06、P07分别接LCD1602的RS、RW、EP引脚,通过单片机控制液晶显示。程序见附录。图16 LCD1602显示流程图在本系统中,键盘的软件实现通过分时扫描、键盘编码的形式来实现,其流程图如图17所示。P1口低4位作为键盘的行,高4位作为键盘的列。P1口低4位先循环输出0,单片机扫描P1口高4位。如果有键按下,P1口高4位不会全为1。读取P1口的值,查表获得相应的16进制值存放l_key变量中,退出循环。如果读取不到P1口的值,比如是干扰,则不做键值处理,返回继续循环下次。程序见附录。图17 键盘扫描流程图4.5 密码锁软件设计在本系统中,密码锁的软件实现是通过比较输入密码值和实际密码值是否一样来进行的,其流程图如图18所示。如果密码正确,则进入下一步操作。如果密码错误,则需要重新输入密码,直到密码正确为止。每输错一次密码,错误次数记录变量times就会加1。一旦times增加到3,则调用GSM程序发短信,并且系统进入死锁状态。程序见附录。图18 密码锁设置流程图5.调试与结果电路板焊接成功后就可以进行调试,在调试之前,应先将已编好的程序下载到芯片STC89C52。编写好程序后,将文件加载到工程中,然后“build”,生成“*.hex”文件,将AT89S52芯片插到下载开发板中,然后打开下载软件,通过它导入“*.hex”运行编译,载入到芯片即可。5.1 密码锁调试系统上电后,液晶显示“Please input the password:”字样,如图24所示。2秒后,系统进入输入状态,此时可通过键盘输入6位密码。在输入状态,当输入错误时,可通过键盘上的“Delect”键删除错误位。当输入完成以后,按“Enter”键确认输入。若输入的密码正确,则进入操作系统,液晶显示“Please press the function key”字样,此时可通过按不同的功能键选择不同的功能。若输入的密码错误,蜂鸣器长鸣同时液晶显示“Error!”,如图26所示。若错误次数小于3次,2秒后可重新输入密码。若错误次数达到三次,系统进入死锁状态,液晶显示“Try it tomorrow!”,并通过GSM模块发送短信通知用户,5.2 开门功能调试在进入操作系统后,按“Open”键进入开门功能。此时,开门灯亮,液晶显示“Open the door.”。5.3 修改密码功能调试在进入操作系统后,按“Change”键进入修改密码功能。按照液晶指示“Input old password”,输入旧密码;然后提示“Input new password”,输入新密码;最后在提示“Input it again!”后重复输入新密码。若输入的密码都正确,则修改密码成功,显示“Establishes successful!”,如图28所示。若密码有一次错误,则需要从输入旧密码开始重新操作,当错误次数达到3次时,系统也会进入死锁状态。5.4 报警功能调试在进入操作系统后,按“Alarm”键进入开启报警功能,此时液晶显示“System startup.”。当烟雾传感器检测到烟雾时,启动中断程序,蜂鸣器报警,液晶显示“Alarm!”和“On fire!”,并通过GSM发送短信通知用户, 当红外热释能传感器检测到人体时,启动中断程序,蜂鸣器报警,液晶显示“Alarm!”和“Steal!”,并通过GSM发送短信通知用户。5.5 调试存在问题整个设计的难点在于调试方面,因此在调试中也遇到了很多问题,但经过查看资料和细心分析后,最终都能顺利解决。下面总结以下调试过程中出现的问题及解决方法。在制板过程中,难免会出现各种差错而导致电路短路或断路等现象。为避免此类情况的发生影响调试结果,在调试前,先用万用表二极管档将电路板的线路都测一下,确保电路正常。调试过程首先验证LCD1602能否正常运行。先编写简单的LCD1602显示程序,然后通过串口下载HEX格式文件到单片机。上电后,液晶只亮但没有显示,初步怀疑是RS、RW和E控制位设置错误。但通过万用表测试控制引脚电平跳变情况,发现正常,故排除该可能。最后经过反复检查,发现原来是因为单片机P2引脚为倒序排列,在画板图时没有留意,导致接错数据引脚。采用飞线修改后,LCD1602能正常显示。在设计程序时,考虑到存储器AT24C02全新时存储内容为0,此时才写入初始化密码。但经过验证,该设想不实际,故直接写入初始化密码。在设计功能选择时,采用按键获得键值,再根据键值选择不同功能函数的方式来实现的。在调试时,出现第一次按键有反应,之后都没有反应的现象。经过仔细分析后得知,在每次按键后,程序跳入不同功能函数时要将键值重设初值0xFF,否则会进入死循环。调试过程遇到的最大难题是中断问题。刚开始时,传感器没有检测到信号,但单片机却运行中断程序。通过万用表测试中断引脚,发现电平正常。试过更换单片机芯片和将中断引脚接地,问题依然存在。最后使用示波器测试中断引脚,发现存在干扰信号,使得单片机出现误中断现象。故在程序中加入延时检测中断信号部分后,干扰信号被排除掉,中断正常。编程时要注意规范问题。编程过程中要注意加注释或分割线,否则,在程序过长时容易变得很乱,不便于查找或更改。程序的结构要设计的合理,避免上下乱调用的现象,这样会使程序更加清晰化。编程前要画流程图,这样会使思路清晰。此外,使用循环结构体时要注意有退出循环体的出口,避免程序进入死循环。6.总结该设计在一定程度上解决了传统机械式防盗的弊端,利用高科技将防盗报警智能化、自动化,可以减少和避免户主的损失。由于该系统主要利用现代移动通信网络作为承载,不需要考虑布线等因素,减少了环境因素对系统的影响,提高了该系统的可移动性。由于时间的关系和考虑到元器件的价格等因素,该设计还存在一些不足的地方。例如,该设计存在不够人性化的地方,可通过添加实时时钟芯片增加时间功能,并在此基础上加入自动开启和关闭系统的功能等等。除此以外,还可以通过增加断电保护电路增强系统的安全性。在设计的这段时间里,我对这四年学习到的知识有了一个全面的认识,也因此学到了很多东西。这一次的实训设计,从查找资料、方案确定、电路设计到PCB制作和调试,整个过程都是我自己亲自去完成。在整个设计期间,我遇到了很多问题,但经过仔细的分析和其他同学的帮助后,最终都把问题解决,我也从中学会了解决问题的方法。217.参考文献1 祁伟,杨事单片机C5l语言教程与实验M北京:北京航空航天大学出版社,20062 林桂花基于GSM模块的数据传输及实时控制系统J计算机与现代化,2006(2):22243 李晓辉,等基于GSM技术的汽车防盗系统的设计J现代电子技术,2008(3):l9l 1934 刘字静基于GSM的远程监控系统数据传输J科学技术与工程,2007(5):10-145 师俊宏智能家居中的安全防范系统J上海建设科技,2006,(05)6 游燕,随善坤一种智能家居安防系统的设计J中国科技信息,2005,(12)7 陈刚,李叶紫,胡辉基于GSM的车辆防盗抢系统设计与实现J电气自动化,2005,(06)8 丁元杰单片微机原理及应用M北京:机械工业出版社,2001:56-69附录:#include #include #include #include key.h#include lcd1602.h#include gsm.h#include at24c02.hsbit door=P00 ; /定义P00 为门锁控制标志位sbit speaker=P01; /定义P01为喇叭控制标志位sbit alarm=P03; /定义P03为人体热释能检测标志位sbit int1=P33;sbit int0=P32;uchar pswd6=0; /存储 输入键值uchar pswd_flash6=0; /存储密码uchar pswd_new6=0; /暂存新密码uchar correct_old=0; /检测旧密码标志位uchar correct_new=0; /检测新密码标志位uchar correct_old_change=0; /检测修改旧密码标志位uchar times; /每次输入密码错误次数uchar test; /存储器检测int i=0; /密码位 bit change=0; /修改密码控制标志位bit set=0; /设定控制标志位bit delect; /删除控制吧标志位bit ok; /确定控制标志位bit cancle; /取消控制标志位voidsend_message(void) /发送彩信函数void input(void); /输入函数void pswd_error(void); /密码错误函数void onfire(void); /火灾报警函数void steal(void); /盗窃报警函数void function(void); /功能选择函数void change_f(void); /修改密码函数void alarm_f(void); /报警功能函数#include#include#include#include#include#include#include#define Buf1_Max 500 /串口1缓存长度sbit Yellow_LED = P15;/LED1黄色指示灯sbit Green_LED = P16;/LED2绿色指示灯sbit Red_LED = P17;/LED3红色指示灯sbit IGT = P25; /启动TC35I信号sbit K1 = 0xC1;/继电器unsigned char Buf_First_SerialBuf1_Max;unsigned char runxun_ser1 = 0,Flag_Buf1_Rec = 0;unsigned int Start_weizi,End_weizi;unsigned int First_Int = 0,Second_Int = 0;unsigned char Timer0_Start = 0;unsigned int Times = 0,shijian = 0,Count_time = 0;/发送换行回车函数void Send_LR(void)Send_Hex(0x0D);Send_Hex(0x0A);/清除串口1缓存数据函数void CLR_Buf1(void)unsigned int k; for(k=0;kBuf1_Max;k+) /将缓存内容清零 Buf_First_Serialk = 0x30; First_Int = 0; /接收字符串的起始存储位置/判断缓存中是否含有指定的字符串函数unsigned char Hand(unsigned char *a) if(strstr(Buf_First_Serial,a)!=NULL) return 1;elsereturn 0;/定位字串+32符位置void Find_dw_TEXT(void)unsigned int k;for(k=0;kBuf1_Max;k+)if(Buf_First_Serialk=+&Buf_First_Serialk+1=3&Buf_First_Serialk+2=2)Start_weizi = k+6;break;for(k=0;kBuf1_Max;k+)if(Buf_First_Serialk=O&Buf_First_Serialk+1=K)End_weizi = k-5;break;/送命令函数/不允许出错void Second_AT_Command(unsigned char *b,unsigned int wait_time) unsigned char i;unsigned char *c;c = b;/保存字符串地址到cCLR_Buf1(); i = 0;while(i = 0) if(!Hand(OK) if(Timer0_Start = 0)b = c;/将字符串地址给b for (b; *b!=0;b+) Send_Hex(*b);Send_LR();Times = 0;shijian = wait_time;Timer0_Start = 1; elsei = 1;Timer0_Start = 0;CLR_Buf1(); /发送命令函数/允许出错void Second_AT_ERROR(unsigned char *b,unsigned int wait_time) unsigned char i;unsigned char *c;c = b;/保存字符串地址到cCLR_Buf1(); i = 0;while(i = 0) if(!Hand(OK)&(!Hand(ERROR) if(Timer0_Start = 0)b = c;/将字符串地址给b for (b; *b!=0;b+) Send_Hex(*b);Send_LR();Times = 0;shijian = wait_time;Timer0_Start = 1; elsei = 1;Timer0_Start = 0;CLR_Buf1(); void Set_Text_Mode(void)Second_AT_Command(ATE0,3);/取消回显Second_AT_Command(AT+CNMI=2,1,3);/新短信到来时提示Second_AT_Command(AT+CMGF=1,3);/PDU模式Second_AT_Command(AT+CSDH=0,3);/TEXT显示模式/Second_AT_Command(AT+CSCS=GSM,3);/使用GSM字符集/Second_AT_Command(AT+CSMP=17,167,0,8,3);/设置PDU模式参数Second_AT_Command(AT+CPMS=SM,SM,SM,3);/所有操作都在MT(模块终端)中进行;Second_AT_ERROR(AT+CMGD=1,10);void Check_Message_rec(void)unsigned int k;if(strstr(Buf_First_Serial,+CMTI)!=NULL) /若缓存字符串中含有+CMTI就表示有新的短信Delay_ms(500);CLR_Buf1(); /while(!Hand(OK)&(!Hand(ERROR)/ /CLR_Buf1(); Send_ASCII(AT+CMGR=1); /发送读取信息指令 Send_LR(); Delay_ms(10000); /Find_dw_TEXT();for(k=Start_weizi;k=End_weizi;k+)Second_Serial_Port_Send(Buf_First_Serialk);if(strstr(Buf_First_Serial,onled1)!=NULL)Yellow_LED = 0;else if(strstr(Buf_First_Serial,offled1)!=NULL)Yellow_LED = 1;else if(strstr(Buf_First_Serial,onled3)!=NULL)Red_LED = 0;else if(strstr(Buf_First_Serial,offled3)!=NULL)Red_LED = 1;else if(strstr(Buf_First_Serial,onrelay)!=NULL)K1 = 1;else if(strstr(Buf_First_Serial,offrelay)!=NULL)K1 = 0;/Second_AT_Command(AT+CMGD=1,10);Second_AT_ERROR(AT+CMGD=1,10);CLR_Buf1(); void Wait_CREG(void)unsigned char i;unsigned int k;i = 0;CLR_Buf1(); while(i = 0) CLR_Buf1(); Send_ASCII(AT+CREG?);Send_LR();Delay_ms(5000); for(k=0;k= 60000)Count_time = 0;if(Timer0_Start = 1)Times+;if(Times (40*shijian)Timer0_Start = 0;Times = 0;TH0 = 0x4C;/设置溢出一次为50msTL0 = 0x00;TR0 = 1;/开启定时器0/串口1中断处理函数void Serial_Int(void) interrupt 4 ES = 0; /关串口中断,防止中断嵌套if(TI) /如果是发送中断,则不做任何处理TI = 0; /清除发送中断标志位if(RI) /如果是接送中断,则进行处理RI = 0; /清除接收中断标志位Buf_First_SerialFirst_Int = SBUF; /将接收到的字符串存到缓存中First_Int+; /缓存指针向后移动if(First_Int Buf1_Max) /如果缓存满,将缓存指针指向缓存的首地址First_Int = 0;ES = 1; /开启串口中断/*/void input(void) int k=0; lcd_wcmd(0x01); /清屏 while(k6) ReadKey(); if(l_key=6) ReadKey(); if(l_key=14)/确定 ok=1; l_key=0xff; break; void pswd_error(void) code uchar sms=Alarm! someone has inputed wrong password three times.; int t,j; speaker=0; t=times; lcd_wcmd(0x01); display(0x00,Error!); longdelay(10); if(t=3) /错误输入3次后自锁 lcd_wcmd(0x01); display(0x00,Try it tomorrow!); gsm(sms); for(j=0;j=0;j+) /自锁 for(j=0;j=0;j+) ; return;void function(void) display(0x00,Please press the); display(0x40,function key); while(1) ReadKey(); if(l_key=10) /开门 lcd_wcmd(0x01); display(0x00,Open the door.); door=0; longdelay(10); door=1; l_key=0xff; break; else if(l_key=11) /修改密码 l_key=0xff; change_f(); break; else if(l_key=13) /启动防盗系统 alarm_f(); break; void change_f(void) lcd_wcmd(0x01); display(0x00,Input old passwo); display(0x40,rd:); longdelay(10); input();for(i=0,correct_old_change=0;i6;i+) correct_old_change=pswdi-pswd_flashi+correct_old_change; if(correct_old_change=0) /旧密码正确,输入新密码 speaker=1;times=0;lcd_wcmd(0x01);display(0x00,Input new passwo);display(0x40,rd:);longdelay(10);input();for(i=0;i=6;i+)
展开阅读全文