智能家居报警系统设计样本_第1页
智能家居报警系统设计样本_第2页
智能家居报警系统设计样本_第3页
智能家居报警系统设计样本_第4页
智能家居报警系统设计样本_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

前言以智能中控主机为核心,采用国际领先室内无线组网技术,实现门禁、空调、地暖、灯光、热水器、家庭影院、窗帘、各类报警器等家庭电子设备与控制主机之间通讯组网,顾客可以通过手机、座机、遥控面板以及互联网通信终端等方式,一键搞定所有家电设备,随时理解家中实时信息,远程完毕对家里各项设备控制。只要手指轻轻一触,家里所有电器都可以通过用手机平板电脑或者遥控面板一键操控,轻松对家居中灯光、电视、空调、窗帘、摄像头等进行实时查看与控制,让你提前享有将来生活,一切变化尽在你指尖!

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图2STC89C52引脚图2.2传感器模块传感器模块重要由红外传感式集发射接受于一体ITR9909。这是一种光电开关。光电开关(光电传感器)是光电接近开关简称,它是运用被检测物对光束遮挡或反射,由同步回路选通电路,从而检测物体有无。物体不限于金属,所有能反射光线物体均可被检测。光电开关将输入电流在发射器上转换为光信号射出,接受器再依照接受到光线强弱或有无对目的物体进行探测。2.3GSM模块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位串行CMOSE2PROM,内部具有256个8位字节。内部有一种16字节页写缓冲器,该器件通过I2CAT24C02支持I2C总线数据传送合同。I2AT24C02通过8个引脚实现数据存储功能,其引脚图如下图3所示。图3AT24C02引脚图2.5液晶键盘模块液晶键盘模块重要由4*4矩阵键盘和LCD1602液晶显示屏构成。4*4矩阵键盘重要提供顾客操作输入功能,是实现人机通信重要控制某些;LCD1602液晶显示屏重要负责显示系统信息,协助顾客操作系统。下面分别简朴简介矩阵键盘和LCD1602液晶显示屏性能和工作原理。2.5.1LCD1602是一种字符型液晶显示模块,是一种专门用于显示字母、数字、符号等点阵式LCD。该液晶显示屏使用以便,功耗小,因而本系统采用LCD1602作为系统显示某些。LCD1602涉及4种工作状态,通过MCU设立RS、RW和E值,可使液晶工作在不同状态。读状态:输入:RS=0,RW=1,E=1输出:D0~D7=状态字写指令:输入:RS=0,RW=0,D0…D7=指令码,E=高脉冲输出:无读数据:输入:RS=1,RW=1,E=1输出:D0~D7=数据写数据:输入:RS=0,RW=1,E=1输出:无2.5.24*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.5GSM模块接口电路设计GSM模块工作重要由单片机通过串口将AT指令发送到GSM模块。串口电路重要由芯片MAX232进行电平转换,实现串口电压与单片机电压转换,保证双方可以互相通信,电路如图8所示。单片机TXD引脚接到MAX232T2IN引脚,单片机RXD引脚接到MAX232T2OUT引脚。图8GSM模块接口电路图3.6存储器模块电路设计存储器模块电路重要由芯片AT24C02构成,存储器模块电路图如图9所示。在本设计中,只有一种AT24C02被总线寻址这三个地址,故输入脚A0A1A2可悬空或连接到Vss图9存储器模块电路图3.7液晶模块电路设计液晶模块电路如图10所示。可调电阻R1调节液晶偏压,RS、RW和EN分别接到单片机P0.5、P0.6、P0.7引脚,通过单片机按相应时序编程控制液晶显示。Data0~Data7为液晶数据位,接到单片机P2引脚。图10液晶模块电路图3.8PCB板设计在本设计中,硬件某些采用PCB板制作。一方面,运用ProtelDXP软件绘制电路图并生成PCB板,运用人工布局,对PCB图进行布线。如果使用自动布线,很容易浮现飞线或者布线错误。因此在布线时,应当先使用自动布线,然后再手动布线,对某些线路进行修改。在布线过程中,调节元器件位置和方向,可以改进电路板布线,减少飞线。生成PCB图如图11所示。图11PCB板图焊接时,需要特别注意避免导致短路。相距很近引线要用万用表测量与否存在通路,若通过也许会导致短路等严重后果。电器元件焊接中应避免烫坏元件.

4.软件设计该系统重要实现功能是:输入密码,密码对的则进入系统。当输入密码错误次数不大于3次时,可以重新输入。当错误次数达到3次,系统便进入自锁状态并通过GSM发送短信告知顾客。成功进入系统后可以选取不同功能:开门、修改系统密码和启动报警系统。选取开门功能。则开门批示灯会亮。选取修改系统密码功能,则按照系统指引输入旧密码、新密码和重复新密码。若输入密码都对的,则修改密码成功。若输入密码错误,则需要重新输入,当错误次数达到3次时,系统也会进入自锁状态和通过GSM发送短信告知顾客。选取启动报警功能,烟雾传感器和红外热释能传感器便开始工作,一旦检测到信号,报警音响并通过GSM发送短信告知顾客。若需要关闭报警功能,只要按关闭报警按键,并对的输入密码后,报警功能就会关闭。主程序流程图如图17所示。4.1传感器模块软件设计在本系统中,LCD1602液晶显示是通过调用voiddisplay(ucharpos,uchar*q)函数实现,其流程图如图12所示。在voiddisplay(ucharpos,uchar*q)函数中,pos是写入位置,q指向要写入数据所在数组。该函数重要调用lcd_wcmd(),lcd_pos()两个函数,先写显示地址,后写显示数据。单片机P2口接LCD1602数据引脚,P0^5、P0^6、P0^7分别接LCD1602RS、RW、EP引脚,通过单片机控制液晶显示图12流程图在本系统中,键盘软件实现通过度时扫描、键盘编码形式来实现,其流程图如图13所示。P1口低4位作为键盘行,高4位作为键盘列。P1口低4位先循环输出0,单片机扫描P1口高4位。如果有键按下,P1口高4位不会全为1。如果读取不到P1口值,例如是干扰,则不做键值解决,返回继续循环下次。图13主程序流程图4.2GSM模块软件设计在本系统中,GSM模块软件设计是通过串口发送AT指令给GSM模块来实现发送短信功能,其流程图如图14所示。一方面串口发送字符串“AT+CMGF=1\r”给GSM模块,设立短信为TXT模式;然后发送“AT+CMGS=\r”,设立收信方手机号码;接着将待发送短信内容发给GSM模块;最后发送十六进制0x1A(回车)确认发送,这样就能通过GSM模块最后实现报警告知顾客功能。程序见附录。图14短信发送流程图在GSM模块和单片机串行通信中,选用定期器T1在工作方式2设定波特率为9600,其初值计算公式如下:已知为11.00592MHz,设波特率控制位SMOD=0,则有故在程序设计时,定期器初值设立为0xFD。4.3存储器模块软件设计在本系统中,AT24C02存储功能重要是通过I2C总线来实现串行读写,其流程图如图15所示。I2C总线在写入和读取一种8位二进制数时,总是高位在前低位在后。在读函数_24C02Read(unsignedcharl_address)中,先向I2C总线发出读取24C02写地址,在完毕I2C串口合同后,写入24C02读地址,再读取存储器相应位置数据。在写函数_24C02Write(unsignedchardat,unsignedcharl_address)中,先向总线发出写24C02地址,在完毕I2C串口合同后,写入24C02写地址,然后写入数据。程序见附录。图15AT24C02读写流程图4.4液晶键盘模块软件设计在本系统中,LCD1602液晶显示是通过调用voiddisplay(ucharpos,uchar*q)函数实现,其流程图如图16所示。在voiddisplay(ucharpos,uchar*q)函数中,pos是写入位置,q指向要写入数据所在数组。该函数重要调用lcd_wcmd(),lcd_pos()两个函数,先写显示地址,后写显示数据。单片机P2口接LCD1602数据引脚,P0^5、P0^6、P0^7分别接LCD1602RS、RW、EP引脚,通过单片机控制液晶显示。程序见附录。图16LCD1602显示流程图在本系统中,键盘软件实现通过度时扫描、键盘编码形式来实现,其流程图如图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密码锁调试系统上电后,液晶显示“Pleaseinputthepassword:”字样,如图24所示。2秒后,系统进入输入状态,此时可通过键盘输入6位密码。在输入状态,当输入错误时,可通过键盘上“Delect”键删除错误位。当输入完毕后来,按“Enter”键确认输入。若输入密码对的,则进入操作系统,液晶显示“Pleasepressthefunctionkey”字样,此时可通过按不同功能键选取不同功能。若输入密码错误,蜂鸣器长鸣同步液晶显示“Error!”,如图26所示。若错误次数不大于3次,2秒后可重新输入密码。若错误次数达到三次,系统进入死锁状态,液晶显示“Tryittomorrow!”,并通过GSM模块发送短信告知顾客,5.2开门功能调试在进入操作系统后,按“Open”键进入开门功能。此时,开门灯亮,液晶显示“Openthedoor.”。5.3修改密码功能调试在进入操作系统后,按“Change”键进入修改密码功能。按照液晶批示“Inputoldpassword”,输入旧密码;然后提示“Inputnewpassword”,输入新密码;最后在提示“Inputitagain!”后重复输入新密码。若输入密码都对的,则修改密码成功,显示“Establishessuccessful!”,如图28所示。若密码有一次错误,则需要从输入旧密码开始重新操作,当错误次数达到3次时,系统也会进入死锁状态。5.4报警功能调试在进入操作系统后,按“Alarm”键进入启动报警功能,此时液晶显示“Systemstartup.”。当烟雾传感器检测到烟雾时,启动中断程序,蜂鸣器报警,液晶显示“Alarm!”和“Onfire!”,并通过GSM发送短信告知顾客,当红外热释能传感器检测到人体时,启动中断程序,蜂鸣器报警,液晶显示“Alarm!”和“Steal!”,并通过GSM发送短信告知顾客。5.5调试存在问题整个设计难点在于调试方面,因而在调试中也遇到了诸多问题,但通过查看资料和细心分析后,最后都能顺利解决。下面总结如下调试过程中浮现问题及解决办法。在制板过程中,难免会浮现各种差错而导致电路短路或断路等现象。为避免此类状况发生影响调试成果,在调试前,先用万用表二极管档将电路板线路都测一下,保证电路正常。调试过程一方面验证LCD1602能否正常运营。先编写简朴LCD1602显示程序,然后通过串口下载HEX格式文献到单片机。上电后,液晶只亮但没有显示,初步怀疑是RS、RW和E控制位设立错误。但通过万用表测试控制引脚电平跳变状况,发现正常,故排除该也许。最后通过重复检查,发现本来是由于单片机P2引脚为倒序排列,在画板图时没有留意,导致接错数据引脚。采用飞线修改后,LCD1602能正常显示。在设计程序时,考虑到存储器AT24C02全新时存储内容为0,此时才写入初始化密码。但通过验证,该设想不实际,故直接写入初始化密码。在设计功能选取时,采用按键获得键值,再依照键值选取不同功能函数方式来实现。在调试时,浮现第一次按键有反映,之后都没有反映现象。通过仔细分析后得知,在每次按键后,程序跳入不同功能函数时要将键值重设初值0xFF,否则会进入死循环。调试过程遇到最大难题是中断问题。刚开始时,传感器没有检测到信号,但单片机却运营中断程序。通过万用表测试中断引脚,发现电平正常。试过更换单片机芯片和将中断引脚接地,问题依然存在。最后使用示波器测试中断引脚,发现存在干扰信号,使得单片机浮现误中断现象。故在程序中加入延时检测中断信号某些后,干扰信号被排除掉,中断正常。编程时要注意规范问题。编程过程中要注意加注释或分割线,否则,在程序过长时容易变得很乱,不便于查找或更改。程序构造要设计合理,避免上下乱调用现象,这样会使程序更加清晰化。编程前要画流程图,这样会使思路清晰。此外,使用循环构造体时要注意有退出循环体出口,避免程序进入死循环。

6.总结该设计在一定限度上解决了老式机械式防盗弊端,运用高科技将防盗报警智能化、自动化,可以减少和避免户主损失。由于该系统重要运用当代移动通信网络作为承载,不需要考虑布线等因素,减少了环境因素对系统影响,提高了该系统可移动性。由于时间关系和考虑到元器件价格等因素,该设计还存在某些局限性地方。例如,该设计存在不够人性化地方,可通过添加实时时钟芯片增长时间功能,并在此基本上加入自动启动和关闭系统功能等等。除此以外,还可以通过增长断电保护电路增强系统安全性。在设计这段时间里,我对这四年学习到知识有了一种全面结识,也因而学到了诸多东西。这一次实训设计,从查找资料、方案拟定、电路设计到PCB制作和调试,整个过程都是我自己亲自去完毕。在整个设计期间,我遇到了诸多问题,但通过仔细分析和其她同窗协助后,最后都把问题解决,我也从中学会理解决问题办法。7.参照文献[1]祁伟,杨事.单片机C5l语言教程与实验[M].北京:北京航空航天大学出版社,.[2]林桂花.基于GSM模块数据传播及实时控制系统[J].计算机与当代化,(2):22~24.[3]李晓辉,等.基于GSM技术汽车防盗系统设计[J].当代电子技术,(3):l9l~193.[4]刘字静.基于GSM远程监控系统数据传播[J].科学技术与工程,(5):10-14.[5]师俊宏.智能家居中安全防范系统[J].上海建设科技,,(05).[6]游燕,随善坤.一种智能家居安防系统设计[J].中华人民共和国科技信息,,(12).[7]陈刚,李叶紫,胡辉.基于GSM车辆防盗抢系统设计与实现[J].电气自动化,,(06)[8]丁元杰.单片微机原理及应用[M].北京:机械工业出版社,:56-69

附录:#include<reg52.h>#include<math.h>#include<stdio.h>#include"key.h"#include"lcd1602.h"#include"gsm.h"#include"at24c02.h"sbitdoor=P0^0; //定义P0^0为门锁控制标志位sbitspeaker=P0^1;//定义P0^1为喇叭控制标志位sbitalarm=P0^3;//定义P0^3为人体热释能检测标志位sbitint1=P3^3;sbitint0=P3^2;ucharpswd[6]={0}; //存储输入键值ucharpswd_flash[6]={0}; //存储密码ucharpswd_new[6]={0}; //暂存新密码ucharcorrect_old=0; //检测旧密码标志位ucharcorrect_new=0; //检测新密码标志位ucharcorrect_old_change=0; //检测修改旧密码标志位uchartimes;//每次输入密码错误次数uchartest;//存储器检测inti=0; //密码位bitchange=0; //修改密码控制标志位bitset=0; //设定控制标志位bitdelect; //删除控制吧标志位bitok; //拟定控制标志位bitcancle; //取消控制标志位void

send_message(void)//发送彩信函数

voidinput(void); //输入函数voidpswd_error(void); //密码错误函数voidonfire(void); //火灾报警函数voidsteal(void); //盗窃报警函数voidfunction(void); //功能选取函数voidchange_f(void); //修改密码函数voidalarm_f(void); //报警功能函数#include<STC_NEW_8051.h>#include<string.h>#include<intrins.h>#include<UART1.h>#include<UART2.h>#include<Delay_ms.h>#include<Init_Timer0.h>#defineBuf1_Max500 //串口1缓存长度sbitYellow_LED=P1^5; //LED1黄色批示灯sbitGreen_LED=P1^6; //LED2绿色批示灯sbitRed_LED=P1^7; //LED3红色批示灯sbitIGT =P2^5; //启动TC35I信号sbitK1=0xC1; //继电器unsignedcharBuf_First_Serial[Buf1_Max];unsignedcharrunxun_ser1=0,Flag_Buf1_Rec=0;unsignedintStart_weizi,End_weizi;unsignedintFirst_Int=0,Second_Int=0;unsignedcharTimer0_Start=0;unsignedintTimes=0,shijian=0,Count_time=0;//发送换行回车函数voidSend_LR(void){ Send_Hex(0x0D); Send_Hex(0x0A); }//清除串口1缓存数据函数voidCLR_Buf1(void){ unsignedintk;for(k=0;k<Buf1_Max;k++)//将缓存内容清零{ Buf_First_Serial[k]=0x30; }First_Int=0;//接受字符串起始存储位置}//判断缓存中与否具有指定字符串函数unsignedcharHand(unsignedchar*a){if(strstr(Buf_First_Serial,a)!=NULL) return1; else return0;}//定位字串"+32"符位置voidFind_dw_TEXT(void){ unsignedintk; for(k=0;k<Buf1_Max;k++) { if(Buf_First_Serial[k]=='+'&&Buf_First_Serial[k+1]=='3'&&Buf_First_Serial[k+2]=='2') { Start_weizi=k+6; break; } } for(k=0;k<Buf1_Max;k++) { if(Buf_First_Serial[k]=='O'&&Buf_First_Serial[k+1]=='K') { End_weizi=k-5; break; } }}//送命令函数//不容许出错voidSecond_AT_Command(unsignedchar*b,unsignedintwait_time){ unsignedchari; unsignedchar*c; c=b; //保存字符串地址到c CLR_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; }} else { i=1; Timer0_Start=0; } } CLR_Buf1();}//发送命令函数//容许出错voidSecond_AT_ERROR(unsignedchar*b,unsignedintwait_time){ unsignedchari; unsignedchar*c; c=b; //保存字符串地址到c CLR_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; }} else { i=1; Timer0_Start=0; } } CLR_Buf1();}voidSet_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); }voidCheck_Message_rec(void){ unsignedintk; 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_Serial[k]); } if(strstr(Buf_First_Serial,"onled1")!=NULL) { Yellow_LED=0; } elseif(strstr(Buf_First_Serial,"offled1")!=NULL) { Yellow_LED=1; } elseif(strstr(Buf_First_Serial,"onled3")!=NULL) { Red_LED=0; } elseif(strstr(Buf_First_Serial,"offled3")!=NULL) { Red_LED=1; } elseif(strstr(Buf_First_Serial,"onrelay")!=NULL) { K1=1; } elseif(strstr(Buf_First_Serial,"offrelay")!=NULL) { K1=0; } //Second_AT_Command("AT+CMGD=1",10); Second_AT_ERROR("AT+CMGD=1",10); CLR_Buf1(); }}voidWait_CREG(void){ unsignedchari; unsignedintk; i=0; CLR_Buf1();while(i==0) { CLR_Buf1(); Send_ASCII("AT+CREG?"); Send_LR(); Delay_ms(5000); for(k=0;k<Buf1_Max;k++) { if(Buf_First_Serial[k]==':') { if((Buf_First_Serial[k+4]=='1')||(Buf_First_Serial[k+4]=='5')) { i=1; break; } } } }}voidmain(void){ P4M1=0x00; //P40-P43设立为推挽输出 P4M0=0x0f; P4=0x00; Delay_ms(100); IGT=0; Delay_ms(5000); IGT=1; Timer0_init(); //定期器0初始化Serial_Init(); //第一种串口初始化 Second_Serial_Port_Initial(); Wait_CREG(); Set_Text_Mode(); Green_LED=0; while(1) { Check_Message_rec(); Delay_ms(1000); Green_LED=0; Delay_ms(1000); Green_LED=1; }}//定期器0中断解决函数voidTimer0(void)interrupt1{ TR0=0; //停止定期器0 Count_time++; if(Count_time>=60000) { Count_time=0; } if(Timer0_Start==1) Times++; if(Times>(40*shijian)) { Timer0_Start=0; Times=0; } TH0=0x4C; //设立溢出一次为50ms TL0=0x00; TR0=1; //启动定期器0}//串口1中断解决函数voidSerial_Int(void)interrupt4{ ES=0; //关串口中断,防止中断嵌套 if(TI) //如果是发送中断,则不做任何解决 { TI=0; //清除发送中断标志位 } if(RI) //如果是接送中断,则进行解决 { RI=0; //清除接受中断标志位 Buf_First_Serial[First_Int]=SBUF; //将接受到字符串存到缓存中 First_Int++; //缓存指针向后移动 if(First_Int>Buf1_Max) //如果缓存满,将缓存指针指向缓存首地址 { First_Int=0; } } ES=1; //启动串口中断}/*****/voidinput(void){ intk=0; lcd_wcmd(0x01);//清屏while(k<6) {ReadKey();if(l_key<=9) //输入数字0-9 {pswd[k]=l_key+0x30; display(0x00+k,"*"); l_key=0xff; k++; } if(l_key==12) //删除 {delect=1; k--; display(0x00+k,""); l_key=0xff; } } while(k>=6) { ReadKey(); if(l_key==14) //拟定 { ok=1; l_key=0xff; break; } }}voidpswd_error(void){codeucharsms[]={"Alarm!someonehasinputedwrongpasswordthreetimes."};intt,j;speaker=0;t=times;lcd_wcmd(0x01);display(0x00,"Error!");longdelay(10);if(t>=3) //错误输入3次后自锁 {lcd_wcmd(0x01);display(0x00,"Tryittomorrow!"); gsm(sms); for(j=0;j>=0;j++) //自锁 for(j=0;j>=0;j++);}return;}voidfunction(void){display(0x00,"Pleasepressthe");display(0x40,"functionkey");while(1){ReadKey();if(l_key==10)//开门 { lcd_wcmd(0x01); display(0x00,"Openthedoor."); door=0; longdelay(10); door=1; l_key=0xff; break; }elseif(l_key==11)//修改密码 { l_key=0xff; change_f(); break; }elseif(l_key==13)//启动防盗系统 { alarm_f(); break; }}}voidchange_f(void){lcd_wcmd(0x01);display(0x00,"Inputoldpasswo"); display(0x40,"rd:"); longdelay(10); input(); for(i=0,correct_old_change=0;i<6;i++) correct_old_change=pswd[i]-pswd_flash[i]+correct_old_change; if(correct_old_change==0) //旧密码对的,输入新密码 { speaker=1; times=0; lcd_wcmd(0x01); display(0x00,"Inputnewpasswo"); display(0x40,"rd:"); longdelay(10); input(); for(i=0;i<=6;i++) pswd_new[i]=pswd[i]; lcd_wcmd(0x01); display(0x00,"Inputitagain!"); longdelay(10);input(); for(i=0,correct_new=0;i<6;i++) correct_new=pswd[i]-pswd_new[i]+correct_new; if(correct_new==0) //新密码对的,修改密码成功 { speaker=1; times=0; for(i=0;i<6;i++)_24C02Write(pswd_new[i],0x00+i);//将新六位密码写入E2PRAM,AT24C02 lcd_wcmd(0x01); display(0x00,"Establishessucc"); display(0x40,"essful!"); longdelay(10); change=0; } else //新密码不对的 { times++; pswd_error(); } } else //旧密码不对的 { times++; pswd_error(); } }voidalarm_f(void){l_key=0xff;lcd_wcmd(0x01);display(0x00,"Systemstartup.");longdelay(10);EX0=1;EX1=1;EA=1;while(1) { ReadKey(); if(l_key==15) //关闭防盗系统 { lcd_wcmd(0x01); display(0x00,"Shutdownthesys"); display(0x40,"tem."); longdelay(10); EA=0; break; } }}voidmain(){InitCom();int1=0;//while(1);IT0=1;EX0=1;IT1=1;EX1=1;EA=0;times=0; //错误次数清零_24C02Write('5',0x05); //写入初始密码012345_24C02Write('4',0x04);_24C02Write('3',0x03);_24C02Write('2',0x02);_24C02Write('1',0x01);_24C02Write('0',0x00);while(1){lcd_init(); //lcd初始化display(0x00,"Pleaseinputthe");display(0x40,"password:");longdelay(10); for(i=0;i<6;i++)pswd_flash[i]=_24C02Read(0x00+i); delay(200);input(); for(i=0,correct_old=0;i<6;i++) //输入密码与实际密码比较correct_old=pswd[i]-pswd_flash[i]+correct_old; if(correct_old==0)//密码对的 { speaker=1; times=0; lcd_wcmd(0x01); display(0x00,"Correct!"); longdelay(10); lcd_wcmd(0x01); while(1) { if(l_key==15) { l_key=0xff; break; } function(); } } else//密码不对的 { times++; pswd_error(); }}}voidsteal()interrupt2{codeucharsms[]={"Alarm!Someonehasinterruptyourhouse!"};delay(200);if(int1==0){ speaker=0; lcd_wcmd(0x01); display(0x00,"Alarm!"); display(0x40,"Steal!"); gsm(sms); EX1=0;}}#define_at24c02_H#include<reg52.h>#include<intrins.h>#include"lcd1602.h"#define W24C02 0xA0 //存储器写地址#defineR24C02 0xA1 //存储器读地址sbitSDA=P3^7; //AT24C02串行数据 sbitSCL=P3^6; //AT24C02串行时钟 unsignedchar_24C02Read(unsignedcharl_address);//24C02读函数void_24C02Write(unsignedchardat,unsignedcharl_address);//24C02写函数voidI2C_write(unsignedchartmp)//I2C写入一种8位二进制数,高位在前低位在后{ unsignedchari; for(i=0;i<8;i++){ SCL=0; _nop_(); _nop_(); _nop_(); SDA=(bit)(tmp&0x80); tmp<<=1; _nop_();_nop_();_nop_();_nop_();_nop_(); SCL=1; _nop_();_nop_();_nop_();_nop_();_nop_(); } SCL=0;}unsignedcharI2C_read(void)////I2C读取一种8位二进制数,也是高位在前低位在后{ unsignedchari,tmp; tmp=0; for(i=0;i<8;i++){ SCL=0; _nop_(); _nop_(); _nop_(); //加入空指令增长稳定性,这关系到频率问题 SDA=1; _nop_();_nop_();_nop_();_nop_();_nop_(); SCL=1; _nop_();_nop_();_nop_();_nop_();_nop_(); tmp<<=1; if(SDA==1) tmp++; } SCL=0; returntmp; }voidI2C_ACK(bittmp) //依照tmp1、0来决定应答信号{ SDA=tmp; _nop_();_nop_();_nop_();_nop_();_nop_(); SCL=1; _nop_();_nop_();_nop_();_nop_();_nop_(); SCL=0; }voidI2C_start(void) //看看I2C开始波形,再相应SDA、SCL输出{ SDA=1; _nop_(); SCL=1; _nop_(); SDA=0; _nop_(); SCL=0; _nop_();}voidI2C_stop(void) //I2C结束{ SDA=0; _nop_(); SCL=1; _nop_(); SDA=1; _nop_(); SCL=0; _nop_();}unsignedchar_24C02Read(unsignedcharl_address){ unsignedchartmp=0; I2C_start(); //I2C读数据开始,到下面结束是读一地址整个过程, I2C_write(W24C02); //向I2C总线发出读取24C02地址 I2C_ACK(0); //下面就得你们自己结合I2C串口合同进行,先看看24C02数据手册是怎么讲I2C合同 I2C_write(l_address);//先写入地址, I2C_ACK(1); I2C_stop(); I2C_start(); //再开始读取数据 I2C_write(R24C02); I2C_ACK(0); tmp=I2C_read(); I2C_ACK(1); I2C_stop(); //读取一种地址数据结束 delay(20); returntmp;}void_24C02Write(unsignedchardat,unsignedcharl_address){ I2C_start(); //下面是写一地址数据过程 I2C_write(W24C02); //先向总线发出写24C02地址 I2C_ACK(0); I2C_write(l_address); //写入地址 I2C_ACK(0); I2C_write(dat); //然后写入数据 I2C_ACK(1); I2C_stop(); delay(20);}#endif#define_gsm_H#include<reg52.h>#include"lcd1602.h"ucharsms1[]={"AT+CMGF=1\r"};ucharsms2[]={"AT+CMGS=\r"};ucharsms3=0x1A;voidInitCom(void);voidgsm(uchar*sms);//初始化串行口voidInitCom(void){ucharTHTL;THTL=0xFD;ET1=0;SCON=0x40;//串口方式1,TMOD=0x20;//定期器1定期方式2TH1=THTL;TL1=THTL;TI=0;TR1=1;//启动定期器} voidgsm(uchar*sms){ uchari=0,j=0,k=0; //InitCom(); longdelay(10); while(sms1[i]!='\0') {SBUF=sms1[i]; while(!TI); TI=0; i++; } longdelay(10); while(sms2[j]!='\0') { SBUF=sms2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论