【《基于STC89C52单片机的智能家庭环境监控系统设计(附程序)》15000字(论文)】_第1页
【《基于STC89C52单片机的智能家庭环境监控系统设计(附程序)》15000字(论文)】_第2页
【《基于STC89C52单片机的智能家庭环境监控系统设计(附程序)》15000字(论文)】_第3页
【《基于STC89C52单片机的智能家庭环境监控系统设计(附程序)》15000字(论文)】_第4页
【《基于STC89C52单片机的智能家庭环境监控系统设计(附程序)》15000字(论文)】_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

III基于STC89C52单片机的智能家庭环境监控系统设计摘要本次设计是一个基于STC89C52单片机的智能家庭环境监控系统的设计,本次的为设计的目的是为了构建一个低成本并且能够简单操作,让人能够一眼看出是哪里出现了问题的监控系统,这样可以帮助人们更快的察觉家庭中的异常情况,快速处理,避免危害的情况发生,挽救人们的人身安全以及家庭财产。本次设计可以分为温度湿度检测、烟雾检测、红外人体检测、显示部分和蜂鸣器报警部分。温度湿度检测部分通过DHT11温湿度传感器监控当前环境下的温度湿度,烟雾检测部分通过MQ-2气体传感器监控当前环境下的气体浓度,红外人体检测部分通过HC-SR501模块监控当前环境是否有人,显示部分通过LCD1602液晶显示模块显示当前环境温度湿度、气体浓度等数据资料,蜂鸣器报警部分通过蜂鸣器实现在温度湿度、气体浓度异常以及开启人体检测模块是有人被检测到后开始蜂鸣器鸣叫报警。关键词:红外人体检测;烟雾检测;温湿度检测;STC89C52单片机目录TOC\o"1-3"\h\u31157摘要 I5318Abstract Ⅱ233041绪论 1112831.1课题背景 1202051.2设计依据 1246051.3功能介绍 2195212系统设计方案 3168732.1系统构成 3100252.2方案设计 319043硬件电路设计 7200913.1系统硬件原理图 7148243.2主控电路 934273.3MQ-2烟雾检测模块 1129073.4DHT11温湿度传感器电路 13151473.5人体红外传感器模块 13137633.6LCD1602液晶显示屏电路 14210743.7按键控制电路 1562203.8报警电路 16290183.9电路电源 17111184软件系统设计 1968924.1软件介绍 19273794.2软件主程序框图 21307954.3LCD1602显示流程图 2333754.4温度湿度检测流程图 24143784.5按键流程图 25227714.6报警流程图 25136624.7烟雾传感器流程图 26143285调试 28112755.1硬件调试 28209585.2软件调试 2814644结论 3332731参考文献 3527744附录 36PAGE28-1绪论1.1课题背景随着时代的进步,很多我们以为的遥不可及的高科技正在慢慢变得不再那么神秘。随着人们受教育水平的提升,极大地促进了科学的飞速发展,我们的日常生活逐渐多了许许多多的科技产品,这些产品给我们带来了很多的便捷之处,但是拥有着这些便捷之处不是没有代价的,它们带来了许多安全隐患,比如煤气泄漏、不正当的使用电器造成的火灾等等。于是智能环境监控慢慢进入了大家的视野并且成了大家都很关注的话题。智能家居可以通过网络将我们家庭里面的居家设施(照明、空调、安防等等)连接到一起,从而实现对家用电器的控制、灯光照明的控制、温度湿度的控制、防盗报警等等监控的功能与手段。相对比于普通家居,普通家居有的智能家居也有,普通家居没有的智能家居也有,比如兼备建筑、信息家电、设备自动化等功能。还可以让我们的家庭环境变得更加的高效、便利、环保、安全、舒适,在安排时间上可以更加的方便快速,节约各种资源、成本。在日常生活中无论在何处环境监控系统都是重点关注对象,酒店、电影院、学校、公司都是一样的。通过对温度湿度、气体浓度的监控发现异常立马进行报警来警示人们从而阻止没必要的损失。根据生活中的需求、我个人的经济能力以及所学习的知识相结合,在经过精挑细选,于是就有了本次的设计以及文章。本文先是介绍了智能家具的背景与发展前景,然后介绍本次课题的设计思路,以及各个模块元件的选型以及他们的工作原理,最后再对这次的设计进行总结,各个,模块的电路原理图贴在硬件部分,所有的程序放在附录中。1.2设计依据基于所学知识我采用单片机,芯片则是选用STC89C52芯片,它比AT89C52芯片有着集成度更高、价格更便宜、功能更多更强大的优点,通过I/O口进行操作简单易懂。温度湿度传感器我经过仔细思考过后决定选择DHT11温湿度传感器,它可以同时检测温度和湿度,它的精度为湿度±5%RH,温度±2℃,量程为湿度5-95%RH,温度0~+50℃。红外人体感应模块则是只考虑HC-SR501这一种,它是基于红外线技术的自动控制模块,是一种被动式的红外探测方式,工作环境广泛,抗干扰性强,灵敏度很高,广泛应用于各类自动感应电器设备,尤其是干电池供电的自动控制产品。烟雾传感器则是选择MQ-2烟雾传感器,MQ-2烟雾传感器可用作为家庭和工厂之中检查是否有气体泄漏的装置使用,适宜于液化气、丁烷、丙烷、甲烷、酒精、氢气、烟雾等等的探测。显示模块选用LCD1602液晶显示器,它是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电容元件、结构件和电阻等装配在PCB板上而组成。报警部分选用蜂鸣器进行报警,当检测到温湿度异常、烟雾浓度异常、防盗模式开启时红外人体感应模块感应到有人接近时开始报警,当这些情况恢复到正常之后取消报警。1.3功能介绍(1)通过DHT11温湿度传感器检测环境并且采集数据,然后将采集到的数据传输LCD1602之后在LCD1602液晶显示屏上面显示,方便人们更加直观的观察到数据。如果温度湿度超出上限下限的设定值,则相对应的指示灯亮起同时蜂鸣器开始报警,当温湿度恢复到设定值的范围内时,报警自动关闭指示灯也同时熄灭。(2)通过烟雾探头传感器对环境中的各类烟雾进行检测,它可以对煤气、丁烷、乙烷、甲烷、抽烟产生的烟雾、着火所产生的烟雾等等进行浓度的监控,当浓度超出设定阈值时,相对应的LED指示灯会亮起,蜂鸣器开始报警。在人们得到警示之后进行对烟雾的处理使其浓度低于设定值时,蜂鸣器停止蜂鸣报警并且LED指示灯熄灭。(3)红外人体检测模块在开启防盗模式之后启动,启动后会对七米内的人体进行监控,如果在布防后开启的防盗模式时有人闯入检测范围,这时LED指示灯亮起并且蜂鸣器报警用来警示入侵者,直到人们主动撤防关闭防盗模式才可以解除报警状态。同时STC89C52还具有掉电保存的功能,即使突然停电,在停电过后再次开机不会中断报警,可以继续报警。(4)设置有4个按键,第一个按键K1用来进入设置界面,选择需要设置的目标,返回主界面;第二个按键K2用来向上调整数值;第三个按键K3用来向下调整数值;第四个按键用来防盗模式的布防以及撤防。2系统设计方案2.1系统构成设计涉及主硬件为:蜂鸣器报警电路,LCD1602液晶显示模块,按键设置,MQ-2烟雾传感器,DHT11温湿度传感器,人体红外感应器,STC89C52单片机组成。本研究设计框图如图2-1所示。报警电路烟雾传感器AD转换模块报警电路烟雾传感器AD转换模块液晶显示温湿度传感器液晶显示温湿度传感器主控电路红外人体传感器按键系统红外人体传感器按键系统图2-1系统方框图2.2方案设计2.2.1单片机的选择第一个方案:选用单片机AT89C52。AT89C52单片机是ATMEL公司制作的一款拥有非易失性存储技术生产、高密度、兼容标准MCS-51\t"/item/AT89C52/_blank"指令系统的单片机,单片机自带了可以长久保存数据的Flash\t"/item/AT89C52/_blank"存储单元和通用8位\t"/item/AT89C52/_blank"中央处理器。它是一个高性能,低电压的CMOS8位单片机,这种单片机不需要太好的开发设备,一般不是损坏的设备都可以使用,并且开发时不需要太多的时间。AT89C52单片机可以将程序进行加密处理,开发者们可以放心大胆的将程序保存在单片机里面不用担心有人从中盗取数据。同时,AT89C52非但不贵还相当的便宜,网络市场上面货物充足完全不担心买不到它。AT89C52可以构成单片机的最小系统,这样不仅大大减小了系统的体积还减少了系统的成本,甚至增加了系统的可靠性。只要是程序长度小于8K,用户可以自由支配四个I/O口的使用权。能用5V电压编程,擦写的时间很短,只需要10ms,不但如此它是可以反复擦写的有效的降低了开发成本。AT89C51芯片拥有着三级程序存储器加密,提供了自由便捷而且过硬的加密手段,能完全保证系统或者程序不被意图不轨之人利用。AT89C52拥有着3个程序加密的位置,可以对芯片当中分别为LB1、LB2、LB3的3个加密位进行编程(P)或不编程(U)来得到。当LB1加密位被编程时,处于复位的时候时,会锁存并采样EA端逻辑电平被,如果在通电之后单片机一直没有复位,则会将一个随机的数值作为锁存起的初始值,而且这个随机数值会被一直保存着直到单片机复位。为了能够让单片机可以正常不出差错的运行,所以该引脚当前的逻辑电平必须和被锁存的EA电平值一模一样。此外,想要清除加密位只有擦除整个单片机这一种方法。第二个方案:选用单片机STC89C52,它是一种具有高性能、低功耗的CMOS8位微控制器的单片机,嵌入式控制应用系统在单片机STC89C52的帮助下可以拥有更加有效、更加灵活地解决方案。STC89C52与AT89C52的指令系统基本上是完全一致、完全兼容的,但实际操作我们发现两者的操作以及功能上面有很大的不同。(1)STC89C52拥有ISP,可以在线编程,只需要接上相对应的线即可。而AT89C52没有ISP,需要取下来用编程器。(2)STC89C52单片机自身本来就带有EEPROM,哪怕是关机之后再次开机你之前的程序数据也都还在不会丢失,比如设置好的需要在温度湿度的上限下限报警的设定值,烟雾浓度的阈值等等。AT89C52则没有这样的功能,只有外接扩展存储器才能够实现和STC89C52一样的断电保存功能。(3)在执行指令的速度上STC89C52比起AT89C52快了很多很多,是它的3-30倍,虽然执行速快是好事,但是由于STC89C52和AT89C52的程序是可以通用的,所以有可能在AT89C52上的程序到了STC89C52就运行得不尽人意,尤其是在那些对时序有着严格要求的模块身上表现的最为明显,在STC89C52上使用的时候可能需要加长延时。(4)STC89C52单片机的工作电压为5.5V~3.3V(5V的单片机)/3.8V~2.0V9(3V的单片机),而AT89C52的工作电压为5V。这样对比之下STC89C52对于工作环境的要求并不高,可以应用的环境比AT89C52要多得多。所以在有一个系统使用STC89C52时好用,用AT89C52不好用很有可能是供电的原因。对比了这两种单片机我发现STC89C52的泛用性更强,可以更加方便的实现我所需要的要求,再加上我在学校学习过的数字电路、单片机原理中学习的也是STC89C52、C语言等等课程,以及同学和老师都对STC89C52更加了解,所以我选择了STC89C52作为主控芯片,价格便宜,能够在大部分环境使用,自身就能实现断电保存功能,编程和下载程序更加方便。2.2.2传感器的选择第一个方案:选用DS18B20作为温度传感器模块用来检测环境的温度。DS18B20是一个在单片机制作中经常用到的优秀的数字温度传感器。输出的是数字信号。它拥有成本低,精密度高,接线方便,体积小,抗干扰能力高等特点。DS18B20的温度测量范围在-55℃~+125℃,-10℃~+85℃,误差范围在±0.5℃,最高精度可达0.0625℃。第二个方案:选用DHT11温湿度传感器,它不仅仅可以检测温度还可以检测湿度,所以它可以用作温度和湿度的传感器检测模块。它已经校准数字信号输出。DHT11温湿度传感器的测量范围是,湿度5~95%RH,温度-20~+60℃,而误差范围是,湿度±5%RH,温度±2℃。DHT11拥有着性价比高,功耗低,体积小,响应快,抗干扰能力强等优点。对比两个方案我发现DHT11的精密度虽然不如DS18B20但是DHT11却比DS18B20多了一个湿度检测的功能,而且在温度检测的功能上也不算很差,再加上DHT11比较稳定以及它的高性价比,所以我选择来了DHT11。2.2.3显示屏的选择第一个方案:选用12864液晶屏显示屏。这并不是指某一个型号的液晶显示屏,而是说明这个显示屏有什么样的特性。12864是对于128*64点阵液晶模块所拥有的点阵数的简称。这类显示模块能够很好地显示图形图像以及汉字也可以很好地显示,在它的内部自带了64*256点阵显示RAM、128个字符、以及8192个汉字。该点阵的屏显经常出现在各种小型设备之上,能够很好地匹配这些小型设备,并且相对来说成本也是较低的。第二个方案:选用LCD1602液晶显示屏。它是由M*N个显示单元组成的\t"/item/LCD1602/_blank"点阵图形式液晶。打个比方LCD显示屏有64行,128列,每1个字节的8位对应着显示屏的8列,也就是每行有128位,16个字节,共128个点组成。显示RAM区的1024字节与显示屏上1024个显示单元相互对应,每一个显示单元都和跟他相对应的字节的内容有关,字节内容控制着显示单元的亮与暗。LCD1602还有一些显示效果,比如让字符从左向右依次显示或者从右向左依次显示等等。对比两个显示屏两者之间的功能相差不大,编程的难度方面也基本一致,原理上也是,都是写指令、地址、数据等等。不过12864液晶显示屏显示的东西明显比LCD1602更多更全面。两者都满足本次设计的要求,但是一块12864液晶显示屏最低也要四五十块钱,而LCD1602液晶显示屏只需要五六块钱,从价格上看LCD1602液晶显示屏完胜12864液晶显示屏。所以在我的精打细算之下我选择了便宜的LCD1602液晶显示屏。2.2.4防盗检测的选择对于防盗模块来说HC-SR501人体红外感应器是一个很好的选择。人体正常的体温一般在37度左右,因此人体会发出一种特定的波长,这种特殊的波长是红外线,在10UM左右。这种特殊的波长可以被被动式的红外探头所检测到,所以用这种被动式的红外探头用来检测这种特殊的波长就可以确定是否有人进入检测范围。为了增加这种红外探头对人体的敏感度和增加它的抗干扰性,所以人们用一种特殊的菲涅尔滤光片覆盖在它的辐射照面,减少外来环境带来的误差干扰。这种被动式的红外探头,它的传感器是由两个相互串联或者是并联的热释电元所组成的。并且这两个热释电元他们的极点化的方向是相反的,一般来说环境辐射对这两个热释电元起到的作用是一样的,所以两者的释电效应也是一样的大小,由于两个电极化方向相反所以就会相互抵消,不会发出报警信号。但是人体进入检测范围时,人体所产生的特殊波长被捕捉,在通过部分镜面聚焦之后,产生不同的热量,这就导致两个元件接收到的热量不同从而释放的热释电就不同无法相互抵消,产生报警信号。3硬件电路设计3.1系统硬件原理图我选用的是STC89C52单片机作为控制器,用DHT11温湿度传感器来检测温度湿度是否超出人们的预期,用MQ-2烟雾传感器检测烟雾浓度是否超过阈值,用HC-SR501人体红外感应器来检测是否有人进入布防范围,并且将检测到的数据发送到LCD1602液晶显示屏上面让人们方便观察。在温度湿度和烟雾浓度超出阈值以及有人进入布防范围时发送信号到LED灯和蜂鸣器,接收到不同的报警信号相对应的LED灯会亮起,蜂鸣器则是收到报警信号就会立即报警。此外,本次设计还拥有四个按钮,分别有着进入设置界面/选择/返回主界面、向上调整数值、向下调整数值以及布防/撤防的功能。存储部分:主要由ROM和RAM来对数据进行储存。这个是单片机存储分开设计的一大特色。我们储存较小的数据时用的是RAM,储存较大的数据时用的是ROM。RST:复位。在单片机没有出现异常的情况正常工作时,复位端的复位电压应该是保持低电平的状态,在需要复位的时候可以给复位端一个很短暂的高电平,这样单片机就可以完成复位。这个功能简单易懂,在使用单片机的过程中会经常的用到它。复位按键电路,是将相关按键按下时起到一个等同于上电复位的作用;当按键按下时,RST端经过电阻和5V的电源相连,保证能够拥有足够的阈值电压完成复位。单片机在开机的时候是必须要复位的,复位也可以从另一个角度来理解就是让程序从头开始再跑。单片机的初始化也是一样,让程序从头开始跑起来。打个比方,日常生活中我们的电脑死机要让它恢复的最简单的方法就是重新启动电脑,这样电脑的一切功能都会回到一个初始值,这样程序跑起来基本不会出现问题。其实在我们写程序的时候,我们通常会写一个初始化的代码,这样可以清除掉我们以前放入的程序。所有的单片机都有复位按键,断电后需要复位,程序运行卡死的时候也需要复位,一般有两种方式复位,上电复位和按键复位。本次设计的是按键复位,在程序运行时通过按键使CPU进入复位状态进行复位。相关按键按下时等同于一个上电复位;当按键被按下时,等同于一个上电复位;当按键按下时,RST端经过电阻和5V的电源相连,保证能够拥有足够的阈值电压完成复位。复位电路原理图如图3-2所示。芯片擦除:PEROM阵列的三个锁定位电擦除功能可以通过正确控制不同信号的组合,保持ALE管脚保持低电平10ms来完成此功能。在芯片擦过程中,代码阵列会全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。STC89C52单片机虽然看着很小巧但是该有的功能他是一个不缺,中央处理器,串口通信,32个I/O口,定时器,时钟芯片,RAM闪存器,ROM,FLASH存储器应有尽有。STC89C52最小系统原理图如图3-1所示。图3-1STC89C52最小系统原理图图3-2复位电路原理图3.2主控电路STC89C52是STC公司拥有着低功耗、高性能的CMOS8位的微控制器,STC89C52使用的是MCS-51内核,但是在STC公司的改进下芯片拥有了更多的传统的单片机所没有的功能。他拥有着8K字节容量的程序储存空间,512字节容量的数据储存空间,并且自带EEPRMO储存空间能够容纳4K的字节。不但如此,它还拥有着在线编程的功能和8位的CPU,这就使得STC89C52断电存储数据的功能可以实现在它的身上,不但如此嵌入式控制应用系统在单片机STC89C52的帮助下可以拥有更加有效、更加灵活地解决方案。STC89C52是双列直插式的封装并且拥有40个引脚。单片机的引脚用于连接单片机与外设,只有通过引脚单片机才可以与外设进行信息的交互。不过由于单片机的引脚数量有限,如何合理且高效的运用这些引脚就需要我们仔细的思考研究了。现在通过改善引脚体积和外观,采用双功能或者多功能的引脚可以将单片机的功能拓展,提高单片机可能性。STC89C52单片机的封装引脚图如图3-3所示。图3-3STC89C52单片机封装引脚图下面依据引脚图(1)主电源引脚VCC引脚(40号引脚),是输入电源的正极,输入电压为5VVSS引脚(20号引脚),GND引脚,用来连接电源的负极和起到接地的作用。(2)时钟源XTAL1引脚(19号引脚),用来连接晶振,根据晶振是否为外部震荡有不同的接法,如果是外部震荡的晶振此引脚需要接地。XTAL2引脚(18号引脚),用来连接晶振的另一端,和XTAL1引脚(19号引脚)一样,如果连接外部震荡的晶振需要接地使用。(3)多功能I/O单片机总共拥有32个I/O引脚并且分为4组,分别是P0,P1,P2,P3口,4个I/O口分别拥有着不同的功能,复位后为:P1、P2、P3是准双向口/弱上拉,P0口是漏极开路输出。P0口(32~39引脚),是漏极双向I/O口,在作为I/O口在使用时这些引脚需要外加上拉电阻,不过作为总线扩展的时候则不需要上拉电阻,一般用于连接外接的显示屏。对应单片机的P0到P0.7引脚。P1口(1~8引脚),是准双向I/O口,可以在单片机和外设直接进行双向通信,具有上拉作用,对应单片机的P1.0-P1.7引脚。P2口(21~28引脚)。这8个引脚是准双向I/O口,和P1口一样,也可以在单片机和外设直接双向通信。P3口(10~17引脚)。这8个引脚是具有内部上拉的准双向I/O口,在进行双向通信的同时,还具有变异的特殊功能。EA/Vpp引脚(31号引脚)。它的作用是作为单片机的信号输入输出端口,不管是单片机内部还是外接的存储器都可以连接。但是必须要在输入低电平时才能够有效。内部电路图如图3-4所示。图3-4单片机内部电路图3.3MQ-2烟雾检测模块MQ-2烟雾传感器我们常常把它用于家庭和工厂的气体检测,主要检测煤气、液化气、甲烷、丙烷、乙烷、氢气、酒精等气体。因为二氧化锡半导体是作为制作MQ-2的材料,所以在环境温度200度~300度的时候,MQ-2会吸附空气中的氧用来增加空气的电阻,这样子在MQ-2接触到不同的烟雾之后电导率会发生明显的变化,然后就可以通过这电导率的变化来识别出是什么样的烟雾。当遇到能够被点燃的烟雾的时候,MQ-2会将之前所吸附的氧脱附,并且吸附能够被点燃的烟雾的正离子;在氧脱附的时候会发射电子,MQ-2吸附正离子的时候也会发射电子,于是二氧化锡半导体的带电子的密度就提高了。但如果没有烟雾的时候,二氧化锡半导体开始自动的吸附氧的负离子,让其电阻值变成到起始的时候。综上所述,这就是MQ-2能够检测可燃烟雾的原理。MQ-2的检测范围及其的广泛,它拥有着寿命长、驱动电路简单、稳定性好、响应快、灵敏度高、抗干扰性强等优点。它检测可燃气体与烟雾的范围是100~10000ppm,电路设计电压范围宽泛,24V以下都可以,加热电压为5±0.2V。MQ-2采集到的烟雾信息我们需要数模转换,这就需要ADC0832数模转换器件。ADC0832拥有着8位分辨率,双通道A/D转换,输出输入电平都与CMOS相兼容,工作电压为5V,工作频率高转换时间短等特点。芯片接口说明:CS_片选使能,低电平芯片使能;CH0模拟输入通道0,或作为IN+/-使用;CH1模拟输入通道1,或作为IN+/-使用;GND芯片参考0电位(地);DI数据信号输入,选择通道控制;DO数据信号输出,转换数据输出;CLK芯片时钟输入;Vcc/REF电源输入及参考电压输入(复用)。A/D转换电路如图3-5所示。图3-5A/D转换电路3.4DHT11温湿度传感器电路 本次设计采用的是DHT11温湿度传感器模块,DHT11温湿度传感器模块如同它的名字一样不仅仅能够检测温度还能检测湿度,对于本次设计来说一举两得。DHT11拥有着不错的测量范围,湿度的测量范围是5~95%RH,温度的测量范围是-20~+60℃,并且误差的范围比较小,湿度的误差范围是±5%RH,温度的误差范围是±2℃。DHT11的应用范围也是非常广泛:汽车数据记录仪,气象站,检测与测试的设备,空调,家电,医疗设备,温湿度调节器,除湿器,通暖,消费品自动控制等场景。DHT11拥有着体积小,性价比高,抗干扰能力强,响应快,功耗高等优点。单线制串行接口的设计,让系统集成变得简易快捷。DHT11的体积很小,信号传输距离能够达到20米以上,同时功耗有非常的低,这让它成为了各类应用甚至最为苛刻的应用场景的最佳选择。一般的DHT11为4针单排引脚封装,连接十分的方便,还可以根据客户的要求进行特殊的封装。DHT11温湿度传感器电路图如图3-8所示。1~4引脚的功能分别是:Pin1:(VDD),作为电源引脚使用,其供电电压为3~5.5V。Pin2:(DATA),串行数据,单总线。Pin3:(NC),空脚。Pin4(VDD),接电源负极或者作为接地端。DHT11原理图如图3-6所示。图3-6DHT11原理图3.5人体红外传感器模块红外传感器可以在不接触到人的情况下就检测到人体所散发出来的辐射红外线,并且将它转换成为电信号。传感器不但灵敏度很高,而且它的成本很低。在实际使用的时候是需要在传感器的前端安装菲涅尔透镜的,这样能够极大的提升接受时的灵敏度,正价检测的距离范围。菲涅尔透镜的作用有两点:第一个是聚焦,将热释红外信号折射或者反射在PIR上面。第二个作用是将我们需要检测的区域范围划分成为多个明区暗区,这样就可以在有物体进入检测区域范围的时候在PIR上面产生变化的热释红外信号。经过人们的实验,不安装菲涅尔透镜的红外传感器实际检测距离只有2m;而加装上菲涅尔透镜的红外传感器检测距离可以有10m甚至更远。电路原理图如图3-7所示。图3-7人体红外传感器原理图3.6LCD1602液晶显示屏电路单片机设计中最常用的液晶显示屏那一定是LCD1602,LCD1602是点阵式的LCD,是一种专门用来显示符号、字母、数字等等的LCD,1602指的是现实的内容为16*2,即显示两行,每行可以显示16个字符(1个汉字占用两个字符)。LCD1602引脚主要是以下几个引脚:VDD,VSS是电源引脚;BLA,BLK是背光带电源引脚;数据引脚D0-D7、RS、R/W、EN是数据引脚;VL是偏压信号引脚;其中:VL引脚:它是液晶显示屏的对比度调整端,对比度最弱的时候是接到正电源的时候,而对比度最低的时候就是接地的时候,对比度不能太高否则会产生“鬼影”,可以用一个10K的电位器来调整使用时的对比度;RS引脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器R/W引脚:R/W作为读写信号线使用,读操作的时候为低电平的时候,写操作的时候为高电平的时候。写入显示地址或者指令的时候需要RS和R/W都是低电平的时候,读忙信号则需要二者都为高电平,写入数据时要让RS为高电平R/W为低电平。EN引脚:E端为使能端,在液晶显示屏执行命令的时候,E端则会有高电平跳变成低电平的情况。LCD1602液晶显示屏的原理图如图3-8所示。图3-8LCD1602原理图3.7按键控制电路单片机的按键控制电路由4个开关并联组成,按键开关的检测其实就是高低电平的检测,简单易懂。按键开关由于按下的时间,难免会有一些误差,所以在编写案件程序的时候要去写一个去抖函数,用来减少误差。本次设计的人体红外报警的布防撤防,烟雾浓度的阈值设定,温度湿度的上限下限设定值都是通过按键来实现的。第一个按键K1用来实现进入设置界面,选择需要设置的目标,返回主界面这三个功能;第二个按键K2用来向上调整数值;第三个按键K3用来向下调整数值;第四个按键用来防盗模式的布防以及撤防。按键控制的电路原图如图3-9所示。图3-9按键控制电路3.8报警电路报警电路由蜂鸣器报警电路和LED指示灯电路两者共同组成。当我们设定好温湿度的上下限、烟雾浓度的阈值以及开启防盗模式的时候,单片机正常运行并且反复进行监控。蜂鸣器的工作原理非常简单,供电就进行蜂鸣。蜂鸣器有一个小技巧,把蜂鸣器顶端的纸去掉可以提高蜂鸣的响度。在本次设计中如果单片机检测到温湿度、烟雾浓度超过设定的数值或者人体红外检测到有人蜂鸣器就会蜂鸣报警。蜂鸣器电路如图3-10所示。LED灯是一块电致发光的半导体材料芯片它可以将电能转换为光能,转换成我们可以看见的光。最初的LED作为一起仪表上的指示灯被广泛使用,后来因为能够发出各种颜色的光在交通信号灯和显示屏中得到广泛使用。本次设计中,不同原因引起的警报将会亮起不同颜色的LED灯,让人们更加方便的观察到发生了什么事情。LED电路原理图如图3-11所示。图3-10蜂鸣器电路原理图图3-11LED电路原理图3.9电路电源由于单片机的工作电压一般都是在5V左右,所以采用5V直流供电,电源模块由一个6脚的电源开关和一个3脚的电源座子所组成。电源开关用来控制整个电路的开与关,电源座子则是连接外来的电源插头的必不可少的东西。电源座子的2、3引脚接地并且起到固定的作用,没有其他别的特殊作用,1引脚则是与电源开关的1引脚相连,电源开关的1、3和4、6引脚则是作用相同,用于电源的正极输出。电源开关的2、5引脚是用来作为单片机的接地引脚来使用的,选取哪一个引脚作为接地引脚根据实际情况的不同来选择,使用1、3引脚作为输出的时候就选择5引脚作为接地引脚,同理使用4、6引脚的时候2引脚就接地。电源开关电路如图3-12所示。图3-12电源开关电路原理图

4软件系统设计4.1软件介绍KeilSoftware公司开发了一个关于51单片机C语言软件开发的系统,那就是KeilC51。C语言在功能上、结构性、可维护性、结构性都有着明显的优势,学习简单使用也方便。ARM作为国内的代理商来提供KeilC51的服务与技术支持。开发KeilC51的目的就是为了解决嵌入式软件开发商所遇到的各种各样的疑难杂症。图4-1KeilC51操作界面

我的电路原理图是用的AltiumDesigner10来绘制的。是一款Altium公司所开发出来的专业化的电子电路pcb制作工具,它的功能十分强大,为用户提供了设计输出、信号完整性分析、拓扑逻辑自动布线、设计输出、PCB绘制编辑和原理图设计等诸多实用功能,AltiumDesigner10操作十分简单方便,这使得设计者在设计电路原理图的时候效率有了很大的提升,让设计者更加轻松更加随心随遇。AltiumDesigner10的亮点有(1)提供了将设计数据管理置于设计流程核心地位的全新桌面平台(2)提供了新的维度,以供器件数据的搜寻和管理,确保输出到制造厂的设计数据具有准确性和可重复性(3)为设计环境提供供应链信息的智能链接,确保对元器件的使用有更好的选择(4)提供了涵盖整个设计与生产生命周期的器件数据管理方案,而结构性的输出流程更是确保了输出信息的完整性图4-2使用AltiumDesigner10绘制的电路原理图

4.2软件主程序框图当硬件部分调试完毕之后紧接着就是要开始对软件部分进行设计编程。在设计系统的时候要有一个清晰的思路,首先先要画一个流程图,然后按照每个模块运行的先后顺序进行设计。首先把所有的硬件初始化,DHT11温湿度传感器,MQ-2烟雾传感器,LCD1602液晶显示屏,人体红外传感器,蜂鸣器,之后各个模块开始工作。不间断的检测温度湿度是否正常,烟雾浓度是否超出设定阈值,是否有人出现在人体红外传感器的检测范围内。按键设置温度湿度的上限下限,烟雾浓度的阈值,防盗模式的布防撤防。当有模块发现有异常发生,模块将信号传输过来,同时蜂鸣器报警,同时相对应的LED灯亮起。主流程图如图4-3所示。图4-3主程序流程图PAGE28-4.3LCD1602显示流程图LCD液晶显示屏通电之后,运行LCD1602子函数,对屏幕进行初始化,清除屏幕上的数据,将内部储存清空。在此之后LCD与单片机进行双向通信,单片机开始进行控制,短暂等待后各个传感器将采集到的数据发送过来并且显示在屏幕上。此外,在使用按键设置温度湿度的上限下限和烟雾浓度阈值时,屏幕实时变化。LCD1602显示流程图如图4-4所示。图4-4LCD1602显示流程图

4.4温度湿度检测流程图开启电源开关后,温湿度传感器开始工作,将空气中的温度温度转换成电信号输出,单片机接收信号并且根据一定的算法进行计算,之后将计算后得到的数据显示在LCD1602液晶显示屏上。温度湿度检测流程图如图4-5所示。子程序入口子程序入口启动信号启动信号读取温湿度读取温湿度发送给单片机发送给单片机返回返回、图4-5温度湿度检测流程图

4.5按键流程图设置按键是否按下设置按键是否按下子程序入口返回Y加减NY图4-6按键流程图4.6报警流程图主函数执行之后,一直检测是否有中断发生,首先通过按键设置温度湿度的上限下限,烟雾浓度的阈值,布防开启防盗模式。然后不断地检测温度湿度是否超出上下限,烟雾浓度是否超过阈值,人体红外检测范围内是否有人。当检测到异常发生,蜂鸣器立刻蜂鸣报警,同时相应的LED指示灯亮起。报警流程图如图4-7所示。图4.7报警流程图4.7烟雾传感器流程图当传感器采集到烟雾数据信息之后,传感器将数据传输给ADC0832进行处理,ADC0832初始化后进行读取数据,一个字节8位,一位一位读取,把读取的数据信息转换为数字量,进行换算,换算出电压值。烟雾传感器流程图如图4.8所示。

开始开始ADC0832初始化ADC0832初始化产生时钟信号产生时钟信号选择数据通道0选择数据通道0NN判断ADC是否转换完毕判断ADC是否转换完毕YY读取字节读取字节一位一位读取数据一位一位读取数据结束,计算当前电压值结束,计算当前电压值通过当前电压,得到转换数据,显示当前烟雾浓度通过当前电压,得到转换数据,显示当前烟雾浓度返回返回图4.8通信模块流程图

5调试5.1硬件调试调试过程中第一步是先检查所购买的元器件的外观是否完好,之后检测硬件电路设计的是否正确、能不能达到自己预期的效果。在焊接好电路之后,认真的检查焊接完后的成品是不是有没有焊接上的。再然后对买来的元器件的电路进行检查,确认每个元器件都可以正常使用,达到它们该有的程度。调试的时候也发现了许多的问题:(1)选件的时候完全是一头雾水,不知道该从什么地方获得各种原件的资料,以及要用什么样的元件才能更好的完成这次的设计,不过在参考了当初学习用的学习板子对这方面的认知多了不少,然后顺藤摸瓜选出了元器件,最后把看中的元器件进行对比确定,算是顺利的解决了这个问题。(2)烟雾传感器的数值一直很高,起初以为元器件损坏,在查询资料以及卖家的指点下发现烟雾传感器初次使用需要通电几个小时才可以正常使用。图5.1单片机正反面5.2软件调试在将硬件部分调试完毕之后开始进行软件部分的调试。首先我先给单片机录入已经写好的程序代码,通电然后进行各个硬件的初始化,最为直观的就是液晶显示屏了,我可以清楚的看到液晶屏亮起并且显示出我所期待的界面。之后便是其他各个传感器以及报警电路是否能够正常运行了。进过测试温度湿度和烟雾浓度在显示屏上显示的数据基本上与环境一致,当有异常发生报警电路也可以正常运行进行报警。图5.2单片机初始化图5.3防盗模式下有人接近报警图5.4超过温度上限报警图5.5超过温度下限报警图5.6超过湿度上限报警图5.7超过湿度下限报警图5.8超过烟雾上限报警结论历经一个月的努力,我的毕业设计顺利完成了。从零开始完成一个设计是真的不容易,从当初的题目选择到之后的元器件的选择,再到调试焊接,最后的软件编程以及软件调试这都让我收获颇丰。我从这次的毕业设计了解到了许多我们在课堂上没有接触过的知识,挑选元器件的时候各种各样的元器件让我眼花缭乱,不知道该从哪下手,找对了能够完成设计的元器件之后还要挑选最适合自己的那一个进行设计。选好元器件之后还需要考虑它们与单片机之间的连接,单片机一共有40个引脚,需要合理分配这些引脚,把各个元器件正确无误的连接到单片机上。为了避免元器件的浪费,我们就需要在AltiumDesigner10上面来绘制它们的原理图,按照绘制好的原理图就可以清晰的知道元器件是应该怎么样连线。最后就是按照已经绘制好的,连好线的图纸进行元器件的焊接工作。焊接的时候就需要准备相关的焊接设备,不过宿舍里面的同学有这样的设备,并且我们对于焊接有一定的基础。在自己焊接的时候,有时候不知道应该如何焊接,就可以去问问同学,在同学的帮助下可以更好地完成焊接工作,实在是不知道怎么弄得也可以询问老师,老师也会竭尽所能的教我们。通过这次的设计,同学们之间互帮互助,老师也是倾囊相授大家的关系也是更近了一步。没有他们的帮助我是完成不了这次的设计的,同时我也知道了自己还有许多地方不足,还需要继续努力来完善自己让自己变得更加的优秀。

参考文献[1]陈权昌,李兴富.单片机原理及应用[M].广州:华南理工大学出版社,2007.8.[2]李庆亮.C语言程序设计实用教程[M].北京:机械工业出版社,2005.3.[3]杨志忠.数字电子技术[M].北京:高等教育出版社,2003.12.[4]及力.Protel99SE原理图与PCB设计教程[M].北京:电子工业出版社,2007.8.[5]徐江海.单片机实用教程[M].北京:机械工业出版社,2006.12.[6]胡宴如.模拟电子技术[M].北京:高等教育出版社,2008.6.[7]刘宁.单片机多功能时钟的设计[M].浙江:浙江海洋学院,2009.[8]汪文,陈林.单片机原理及应用[M].湖北:华中科技大学出版社,2007.[9]康华光.电子技术基础数字部分[M].北京:高等教育出版社,2008.[10]任向民.卢惠林.汇编语言程序设计使用教程[M].北京:清华大学出版社,2009.[11]赵德安.单片机原理与应用[M].北京:机械工业出版社,2009.[12]刘文楷,苏宁宁,戴澜.霍尔传感器读出电路的低噪声运算放大器设计[J].电子世界,2016(17).[13]许瑞庆.脉搏检测系统设计及其信号处理算法研究[D].南京信息工程大学,2008.[14]仝兆景,时俊岭,李月,等.基于无线通讯技术脉搏检测仪的设计与实现[J].计算机测量与控制,2017.附录#include<reg52.h>#include<intrins.h>#include<absacc.h>#include<math.h> //包含头文件#include"0832.h"#defineucharunsignedchar#defineuintunsignedint //宏定义#include"eeprom52.h" //包含stc单片机内部EEPROM函数sbitDATA=P3^7;//温湿度sbitE=P2^5; //1602使能引脚sbitRS=P2^7; //1602数据/命令选择引脚sbitRW=P2^6;sbitK1=P1^3;//设置键sbitK2=P1^4;//加sbitK3=P1^5;//减sbitK4=P1^7;//人体sbitK5=P1^6;//布防撤防按键sbitLED1=P3^1; //烟雾报警sbitLED2=P3^2; //温度上限sbitLED3=P3^3; //温度下限sbitLED4=P3^4; //湿度上限sbitLED5=P3^5; //湿度下限sbitLED6=P3^6; //红外报警sbitalarm=P3^0; //蜂鸣器ucharU8FLAG,U8temp,U8comdata,U8RH_data_H_temp,U8RH_data_L_temp,U8T_data_H_temp,U8T_data_L_temp,U8checkdata_temp;ucharU8RH_data_H,U8RH_data_L,U8T_data_H,U8T_data_L,U8checkdata; //定义全局变量用于读取温湿度ucharMode,humidity,temperature,smog; //定义模式变量,湿度,温度,烟雾变量bitBJ_LED1=1,BJ_LED2=1,BJ_LED3=1,BJ_LED4=1,BJ_LED5=1,BJ_LED6=1; //定义LED报警变量bitbdataFlagStartRH; //开启读取标志位ucharflag;//记录当前设置状态uintcount; //计数变量//定时器0初始化voidTimer0_Init(){ ET0=1;//允许定时器0中断 TMOD=0x11;//定时器工作方式选择 TL0=0xB0; TH0=0x3C;//定时器赋予初值 TH1=0xD8; TL1=0xF0; ET1=1; TR0=1;//启动定时器}//定时器0中断voidTimer0_ISR(void)interrupt1using0{ ucharRHCounter; TL0=0xB0; TH0=0x3C;//定时器赋予初值 RHCounter++;if(RHCounter>=20) //定时到1秒{FlagStartRH=1; //开启读取ad值报警 RHCounter=0; //变量清零}}voidDelay1(uintj) //延时函数,大约延时30us{uchari;for(;j>0;j--){ for(i=0;i<27;i++);}}voiddelay_ms(uintz)//延时函数{ uintx,y; for(x=z;x>0;x--) for(y=121;y>0;y--); //约1ms}voidDelay_10us(void) //大约延时10us{uchari;i--;i--;i--;i--; i--;i--;} voidCOM(void) //温湿度读取函数{uchari;for(i=0;i<8;i++) { U8FLAG=2; while((!DATA)&&U8FLAG++); Delay_10us(); Delay_10us(); Delay_10us(); U8temp=0;if(DATA)U8temp=1; U8FLAG=2; while((DATA)&&U8FLAG++); //超时则跳出for循环 if(U8FLAG==1)break; //判断数据位是0还是1 //如果高电平高过预定0高电平值则数据位为1 U8comdata<<=1; U8comdata|=U8temp;//0}//rof}////温湿度读取子程序////以下变量均为全局变量//温度高8位==U8T_data_H//温度低8位==U8T_data_L//湿度高8位==U8RH_data_H//湿度低8位==U8RH_data_L//校验8位==U8checkdata//调用相关子程序如下//Delay();,Delay_10us();,COM();//ucharRH(void){//主机拉低18msDATA=0; Delay1(180);//原来为5 DATA=1; //总线由上拉电阻拉高主机延时20us Delay_10us(); Delay_10us(); Delay_10us(); Delay_10us(); //主机设为输入判断从机响应信号 DATA=1; //判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行 if(!DATA) //T! { U8FLAG=2; //判断从机是否发出80us的低电平响应信号是否结束 while((!DATA)&&U8FLAG++); U8FLAG=2; //判断从机是否发出80us的高电平,如发出则进入数据接收状态 while((DATA)&&U8FLAG++); //数据接收状态 COM(); U8RH_data_H_temp=U8comdata; COM(); U8RH_data_L_temp=U8comdata; COM(); U8T_data_H_temp=U8comdata; COM(); U8T_data_L_temp=U8comdata; COM(); U8checkdata_temp=U8comdata; DATA=1; //数据校验 U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); if(U8temp==U8checkdata_temp) { U8RH_data_H=U8RH_data_H_temp; U8RH_data_L=U8RH_data_L_temp; U8T_data_H=U8T_data_H_temp; U8T_data_L=U8T_data_L_temp; U8checkdata=U8checkdata_temp; } return1; } else//传感器不响应 { return0; }}/*****************************************************************文件名:液晶1602显示.c*描述:该程序实现了对液晶1602的控制。****************************************************************//*****************************************************************名称:delay()*功能:延时,延时时间大概为140US。*输入:无*输出:无****************************************************************/voiddelay(){ inti,j; for(i=0;i<=10;i++) for(j=0;j<=2;j++);} /*****************************************************************名称:enable(uchardel)*功能:1602命令函数*输入:输入的命令值*输出:无****************************************************************/voidwrite_1602com(uchardel) //括号内为输入参数,也就是指令{ P0=del; //输入数据 RS=0; //RS拉低 E=1; //EN拉高 delay(); //延时 E=0; //EN拉低 delay(); //延时}/*****************************************************************名称:write(uchardel)*功能:1602写数据函数*输入:需要写入1602的数据*输出:无****************************************************************/voidwrite_1602dat(uchardel) //写数据{ P0=del; RS=1; E=1; delay(); E=0; delay();}/*****************************************************************名称:L1602_init()*功能:1602初始化,请参考1602的资料*输入:无*输出:无****************************************************************/voidL1602_init(void){ write_1602com(0x38);//设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据 write_1602com(0x0c);//开显示不显示光标 write_1602com(0x06);//整屏不移动,光标自动右移 write_1602com(0x01);//清屏要放在最后 delay_ms(2);}voiddisplay() //显示函数{write_1602com(0x83); //选中第一行第三个位置write_1602dat(temperature%100/10+0x30);//将温度数据取余100再除以10得到温度的十位数,加0x30得到该数字对应的字符码,用于液晶显示write_1602dat(temperature%100%10+0x30);//同上write_1602com(0x8c); write_1602dat(humidity%100/10+0x30);write_1602dat(humidity%100%10+0x30);write_1602com(0xc3); //液晶的第一行开始地址是0x80,第二行开始是0x80+0x40,也就是0xc0write_1602dat(smog%100/10+0x30);write_1602dat(smog%100%10+0x30); write_1602com(0x85); //选中温度显示位置 write_1602dat(0xdf); //显示温度的符号度 }voiddisplay_1() //显示设置界面{write_1602com(0x83); //选中位置,注释略同上面的显示函数write_1602dat(TH%100/10+0x30);write_1602dat(TH%100%10+0x30);write_1602com(0x8c);write_1602dat(TL%100/10+0x30);write_1602dat(TL%100%10+0x30);write_1602com(0xc3);write_1602dat(HH%100/10+0x30);write_1602dat(HH%100%10+0x30);write_1602com(0xcc);write_1602dat(HL%100/10+0x30);write_1602dat(HL%100%10+0x30);}voidwrite_string(uchar*str) //发送字符串函数{while(*str){write_1602dat(*str);str++;}}/***按键函数***/voidKEY(){if(K1==0) //按键1按下{Delay1(200); //延时去抖if(K1==0) //再次判断{ flag++; //模式变量加,也就是设置哪个报警值 if(flag==1) //设置温度上限时{ write_1602com(0x80); //进入设置状态显示 write_string("TH:CTL:C"); //设置状态第一行显示 write_1602com(0xc0); //选中第二行 write_string("HH:%HL:%"); //设置状态第二行显示 write_1602com(0x85); //选中温度显示位置 write_1602dat(0xdf); //显示度符号 write_1602com(0x8e); write_1602dat(0xdf); display_1(); //调用设置状态时显示温湿度上下限数据 write_1602com(0x84); write_1602com(0x0f); //显示对应位置 } elseif(flag==2) //设置下限 write_1602com(0x8d); elseif(flag==3) //选中哪个位置就哪个位置闪烁 write_1602com(0xc4); elseif(flag==4) write_1602com(0xcd); elseif(flag==5) { //设置烟雾报警值 write_1602com(0xc0); //选中第二行 write_string(""); //空显示 write_1602com(0x80); //第一行 write_string("Sg:mg/m3"); //显示烟雾报警值界面 write_1602com(0x83); //选中第一行 write_1602dat(SM/10+0x30); //显示烟雾报警值 write_1602dat(SM%10+0x30); write_1602com(0x84); //烟雾报警值位置闪烁 } else //设置完最后一个报警值烟雾值后跳出设置界面 { write_1602com(0x80); //回复到正常测量模式 write_string("Te:CHu:%"); write_1602com(0xc0); if(bufang==1) write_string("Sg:mg/m3B"); else write_string("Sg:mg/m3"); write_1602com(0x85);write_1602dat(0xdf);display(); write_1602com(0x0c); flag=0; write_eeprom(); //将报警值保存到单片机内部eeprom } while(!K1); //按键释放,按键如果一直按下,取反后就一直是1,while一直是真就一直执行后面的分号,什么时候按键松开,就会跳出这个循环}}if(K2==0) //按键2按下{Delay1(200);if(K2==0){switch(flag){ /*以下的程序就是判断是设置哪个报警值,就让哪个报警值加,同时显示对应的报警值*/ case1:TH++;if(TH>99)TH=TL+1;write_1602com(0x83);write_1602dat(TH/10+0x30);write_1602dat(TH%10+0x30);write_1602com(0x84);break; case2:TL++;if(TL>=TH)TL=0;write_1602com(0x8c);write_1602dat(TL/10+0x30);write_1602dat(TL%10+0x30);write_1602com(0x8d);break; case3:HH++;if(HH>99)HH=TL+1;write_1602com(0xc3);write_1602dat(HH/10+0x30);write_1602dat(HH%10+0x30);write_1602com(0xc4);break; case4:HL++;if(HL>=HH)HL=0;write_1602com(0xcc);write_1602dat(HL/10+0x30);write_1602dat(HL%10+0x30);write_1602com(0xcd);break; case5:SM++;if(SM>255)SM=0;write_1602com(0x83);write_1602dat(SM/100+0x30);write_1602dat(SM%100/10+0x30);write_1602dat(SM%10+0x30);write_1602com(0x85);break; }while(!K2); //按键释放}}if(K3==0) //按键3按下,就是减按键{Delay1(200);if(K3==0){switch(flag){/*以下的程序就是判断是设置哪个报警值,就让哪个报警值减,同时显示对应的报警值*/ase1:TH--;if(TH<=TL)TH=99;write_1602com(0x83);write_1602dat(TH/10+0x30);write_1602dat(TH%10+0x30);write_1602com(0x84);break; case2:TL--;if(TL<0)TL=TH-1;write_1602com(0x8c);write_1602dat(TL/10+0x30);write_1602dat(TL%10+0x30);write_1602com(0x8d);break; case3:HH--;if(HH<=HL)HH=99;write_1602com(0xc3);write_1602dat(HH/10+0x30);write_1602dat(HH%10+0x30);write_1602com(0xc4);break; case4:HL--;if(HL<0)HL=HH-1;write_1602com(0xcc);write_1602dat(HL/10+0x30);write_1602dat(HL%10+0x30);write_1602com(0xcd);break; case5:SM--;if(SM<0)SM=255;write_1602com(0x83);write_1602dat(SM/100+0x30);write_1602dat(SM%100/10+0x30);write_1602dat(SM%10+0x30);write_1602com(0x85);break;}while(!K3);}} if(K5==0) //布防按键按下 { Delay1(200); if(K5==0&&flag==0) // { if(bufang==2||bufang==1) //布防状态或者是报警状态时 { bufang=0; //撤防 count=0; //变量清零 TR1=0; //关闭定时器 write_eeprom(); //将布防信息存储到单片机内部eeprom write_1602com(0xcf); //显示空白 write_1602dat(''); } else //撤防状态时按下按键 { TR1=1; //打开定时器 write_1602com(0xcf); //显示字母Z,代表正在布防 write_1602dat('Z'); bufang=2; //布防状态置2 } while(K5==0); } }}voidOnealarm() //报警函数{

温馨提示

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

评论

0/150

提交评论