找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7550|回复: 3
打印 上一主题 下一主题
收起左侧

建筑物多传感器火灾报警系统设计

[复制链接]
跳转到指定楼层
楼主
ID:288378 发表于 2018-3-6 19:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
毕业设计(论文)
   
    院:                           
    业:                           
    号:                           
学生姓名:                           
指导教师:                           
二〇一八


      
摘 要
基于单片机技术和多传感器技术开发设计了一套火灾自动报警系统设计内容包括软件系统和硬件系统。系统的软件部分包括主程序、按键、温度气体浓度采集、和数码管显示子程序;硬件包括四个部分:单片机最小系统、温度气体浓度检测电路、显示电路和报警电路。选用最常用的AT89S52单片机作为控制处理器,对所采集的数据进行处理;采用DS18B20数字温度传感器将温度信号直接转换成数字信号,传递给单片机;选用MQ-2型半导体可燃气体敏感元件烟雾传感器实现烟雾浓度的检测MQ-2型半导体烟雾传感器电路简单,成本低,同时可设置温度报警值,实现声光报警。CPS3641BR数码管具有灵敏度高、响应快、抗干扰能力强等优点,而且价格低廉,使用寿命长。该火灾自动报警系统结构简单、性能稳定、使用方便、价格低廉,具有一定的实用价值。
关键词:单片机;温度传感器;烟雾传感器;火灾自动报警;结构简单
Abstract
We development and design a set of automatic fire alarm system based on microcontroller technology and sensor technology. This design contain software system and hardware system. The software include main program, key, collecting of temperature gas concentration, subroutine of LED display. Hardware system include microcontroller unit system, detection circuitry of temperature gas concentration, displaying circuits and alarming circuits. This system chose AT89S52 as the control processor and handle with collecting dates. This system chose digital temeperature sensor DS18B20 to transform temperature signal to digital signal and convey it to microcontroller unit. This system chose semiconductor flammable gas sensitive components sensor MQ-2 realize the testing of the density of fog. The circuits of semiconductor smoke sensor MQ-2 are simple and low cost. At the same time it can set panic value and realize audible and visual alarm. Nixie tube CPS3641BR has the merit of high sensitivity, fast response, anti-interference capability. And the price is chip, the lifetime is long. This automatic fire alarm system has a lot of merits such as, simple structure, stable performance, convenient to use, low cost, having practical value and so on.
Keywords: Microcontroller Unit; Temperature sensor; Smoke sensor; Automatic fire alarming system; Simple structure


   




                     
1章 引  言
                                   
1.1 火灾报警器设计的目的和意义
火灾,是指在时间或空间上失去控制的燃烧所造成的灾害。在各种灾害中,火灾是最经常、最普遍地威胁公众安全和社会发展的主要灾害之一。人类能够对火进行利用和控制,是文明进步的一个重要标志。火,给人类带来文明进步、光明和温暖。但是,失去控制的火,就会给人类造成巨大的灾难。对于火灾,在我国古代,人们就总结出防为上,救次之,戒为下的经验。随着社会的不断发展,在社会财富日益增多的同时,导致发生火灾的危险性也在增多,火灾的危害性也越来越大。据统计,我国70年代火灾年平均损失不到2.5 亿元,80 年代火灾年平均损失不到3.2亿元。进入90年代,特别是1993年以来,火灾造成的直接财产损失上升到年均十几亿元,年均死亡2000多人。
实践证明,随着社会和经济的发展,消防工作的重要性就越来越突出。由此,火灾报警器在消防工作就的作用也尤为突出了。我国的火灾自动报警控制系统经历了从无到有、从简单到复杂的发展过程,其智能化程度也越来越高。但目前国内厂家多偏重用于大型仓库、商场、高级写字楼、宾馆等场所大型火灾报警系统的研发,他们采用集中区域报警控制方式,其系统复杂、成本较高。而在居民住宅区、机房、办公室等小型防火单位,需要设置一种单一或区域联网、廉价实用的火灾自动探测报警装置,因此,研制一种结构简单、价格低廉的语音数字联网火灾报警器是非常必要的。
火灾自动报警系统,一般由火灾探测器、区域报警器和集中报警器组成;也可以根据工程的要求同各种灭火设施和通讯装置联动,以形成中心控制系统。即由自动报警、自动灭火、安全疏散诱导、系统过程显示、消防档案管理等组成一个完整的消防控制系统由于在火灾发生的阶段,将伴随产生烟雾、高温格火光这些烟、热和光可以通过探测器转变为电信号报警或使自动灭火系统启动及时扑灭火灾。区域报警器能将所在楼层之探测器发出的信号转换为声光报警,并在屏幕上显示出火灾的房间号;同时还能监视若干楼层的集中报警器(如果监视整个大楼的则设于消防控制中心)输出信号或控制自动灭火系统。集中报警是将接收到的信号以声光方式显示出来,其屏幕上也具体显示出着火的楼层和房间号,机上停走的时钟记录下首次报警时间性,利用本机专用电话,还可迅速发出指示和向消防队报警。此外,也可以控制有关的灭火系统或将火灾信号传输给消防控制室。
本设计是基于多传感器的智能火灾报警系统,能够在火灾初期,将燃烧的烟雾、热量和光辐射等物理量,通过感温、感烟和感光等火灾探测器变成电信号,传输到火灾报警控制器,出现异常情况能够进行报警,起到早期发现火灾和通报火灾的作用。
1.2 火灾报警器的国内外发展情况
许多年前,中国的消防报警产品刚刚起步,无论产品技术含量、产品系列完整性、使用性,还是社会影响程度都是相当低的。国外的产品和品牌一统天下,占领中国的大部分市场。由于中国的建设正在飞速发展,市场大的惊人可幸的是中国企业抓住了机遇,顶住了挑战,先是一批国家的科研院所,后是一批国营企业、民营企业,业内也吸引和凝聚一大批国内的技术和管理精英,花了好多年时间,通过几次产品更新换代,就使自己的产品紧紧跟上了国际水平,并且夺回了大部分国内市场,使得现在大多国外产品只有招架之功,这是典型的自力更生,走自己的路。当然目前而言,我们基本占据的是国内市场,对外还刚启动。中国企业正虎视眈眈,准备进军海外市场。消防报警产品是一个系列产品,包括火灾探测设备、信息传输设备、报警分析控制器、消防控制联动。是物理传感技术、自动控制、计算机技术、数据传输和管理、智能楼宇等技术的综合集成,属于高新技术。依托中国多年的基本建设的发展,这个行业也得到发展,具备了和国外知名企业抗衡的能力。在目前中国许多冠名以高新技术的行业中,中国企业大多做的是下游的制造和服务,分取极少一部分的利润,象消防报警产品那样又拥有自我知识产权,又拥有大量市场的行业其实是很少的。
在消防报警产品的技术含量上,国内产品和国外产品差距不是很大,许多指标已经超越,存在的问题是:类似于国外消防报警产品的大批量规模化的生产才刚起步,有待于积累经验和技术;也因此在产品一致性和长期稳定性上有一些差距;国内正在形成权重的大型企业和集团,这样可以带领国内的各家企业去冲击海外市场,并最终占领海外的消防报警市场。
1.3 本设计研究的主要内容
目的是研究一个由单片机控制的火灾自动报警系统,采用多种传感器,如温度传感器和烟雾传感器,对环境中的温度和烟雾浓度状况进行实时监测,能对周围环境的温度突然升高和烟雾浓度突然的提高进行报警同时通过这个设计提高自己对单片机和传感器的使用能力,了解和掌握单片机、温度传感器和烟雾传感器的使用,巩固自己在大学学习的所有知识,增强自己的实际操作的能力。要求所设计的火灾自动报警系统能够对温度和烟雾进行实时监测,出现异常状况能够进行及时的报警,起到早期出现火灾并及时通报相关人员和及时扑灭火灾,来减少人员及财产的损失。
本火灾智能报警系统包括很多部分:触发电路、报警电路、显示电路、转换电路、数据处理和控制电路等。触发电路由温度传感器和烟雾传感器等组成。报警电路由报警装置蜂鸣器和光报装置LED灯。显示电路由数码管显示模块实现由温度传感器和烟雾传感器所传送过来的数据。采用单片机作为主控芯片来进行数据的处理和控制。
设计包括软件和硬件两部分,软件部分包括主程序、温度和气体的浓度的采集、单片机处理和控制程序及数码管显示子程序;硬件包括单片机最小系统、触发电路、显示电路和报警电路。
    第一章引言部分主要介绍了智能火灾报警器的设计目的与意义以及国内外的发展情况。
第二章主要进行了对主控芯片的对比和选择以及传感器芯片的对比和选择,并且给出了整体的设计方案。
第三章根据设计的要求,对外围电路进行了设计,主要有温度采集电路和气体浓度采集电路及其显示电路等等。
第四章主要介绍了系统软件设计。主要介绍了系统的主程序流程,及其各模块的流程图等。
                                 
2章 建筑物多传感器火灾报警系统总体方案设计
                                 
2.1 系统的基本方案
根据设计的要求系统硬件部分可分为单片机控制和处理部分、传感器部分、显示电路和报警电路。为实现各模块的功能,分别做了几种不同的方案设计并进行论证。
2.2 主控芯片的选择
方案一:AT89S51是一个低功耗芯片,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,该器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,主要特点如下:
14k Bytes Flash片内程序存储器;
2128 bytes的随机存取数据存储器(RAM);
332个外部双向输入/输出(I/O)口;
45个中断优先级、2层中断嵌套中断;
56个中断源;
6216位可编程定时器/计数器;
72个全双工串行通信口;
8、看门狗(WDT)电路;
9、片内振荡器和时钟电路;
10、与MCS-51兼容;
11、全静态工作:0Hz-33MHz
12、三级程序存储器保密锁定;
13、可编程串行通道;
14、低功耗的闲置和掉电模式。
方案二:AT89S52是一种低功耗、高性能CMOS 8位微控制器,具有8K在系统可编程Flash存储器。使用ATMEL公司高密非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。芯片上Flash允许程序存储器在系统可编程亦适于常规编程器。在单芯片上拥有灵巧的8CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、有效地解决方案。AT89S52具有以下标准功能:8K字节Flash256字节RAM32I/O口线,看门狗定时器,2个数据指针,316位定时器/计数器,8个中断向量源,全双工串行口,片内晶振及时钟电路。另外,AT89S52可降至0Hz静态逻辑操作,可选择节电模式。空闲模式下,CPU停止工作,允许RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止,主要特点如下:
18位字长CPU
2、振荡器和时钟电路,全静态操作:0-33MHz
38KB系统内可编程Flash存储器;
44I/O端口共32线;
5316位定时/计数器;
6、全双工串行口通道;
7ISP端口;
8、定时监视器;
9、双数据指针;
1020多个特殊功能寄存器;
11、电源下降标志。
    通过比较AT89S51AT89S52本质上没有太大的区别,只不过AT89S52AT89S51增强型,成本差不多,电源下降有明显的标志,所以选择AT89S52作为本设计的主控芯片。
2.3传感器的选择2.3.1 温度传感器的选择
方案一:温度传感器DS18B20,它直接能把收集到的温度信号直接转化成单片机识别的数字信号,不需要增加外围电路,直接可以和单片机进行相连接。结构简单,使用起来方便
方案二:温度传感器Pt100是铂热电阻,它的阻值跟温度的变化成正比。它的输入响应时间为1秒同步测量,是一个模拟信号量。
综上所述,DS18B20温度传感器的结构简单,能把采集到的信号直接传送给单片机做处理,然而铂热电阻,需要添加响应的转换电路。相比来说比较麻烦。
2.3.2 烟雾传感器的选择
方案一:烟雾传感器MQ-2,它具有信号输出指示,双路信号的输出,对液化气,天然气,城市煤气有较好的灵敏度。具有长期的使用寿命和可靠的稳定度,快速的响应恢复特性,试用与家庭或工厂的气体泄漏监测装置。
方案二:GQQ0.1烟雾传感器主要用于煤矿井下橡胶、煤尘等因摩擦起热或其它原因产生产生的烟雾进行监测。本传感器只能在无显著摇动和冲击振动的地方,在无足够以腐蚀金属和破坏绝缘的气体和蒸汽的环境中,在无滴水及液体浸入的地方。
综上所述,MQ-2烟雾传感器的寿命长,可靠的稳定度,快速的响应恢复特性,具有信号输出指示,双路信号的输出。所以本设计采用MQ-2作为烟雾传感器。
2.4 ADC芯片选择的论证
A/D转换器的作用是把模拟量转换成数字量,以便于计算机进行处理随着超大规模集成电路技术的飞速发展,A/D转换的新设计思想和制造技术层出不穷。并为满足各种不同的检测及控制任务的需要,大量结构的不同、性能各异的A/D转换芯片应运而生。尽管A/D转换器的种类繁多,但目前广泛应用在单片机应用系统中的有以下几种类型:逐次比较型转换器、双积分型转换器、∑-△式转换器。
方案一:ADC0809转换器
ADC0809采用逐次比较的方法完成A/D转换,由单一的+5V电源供电。片内带有锁存功能的8路选1的模拟开关,由CBA的编码来决定所选的通道。ADC0809完成一次转换需100微秒左右,它可对0-5V的模拟信号进行转换,但是它在精度、速度和价格上都适中。
方案二:ADC0832转换器
ADC08328位分辨率A/D转换芯片,其最高分辨率可达256级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0-5V之间。芯片的转换时间仅为32微秒,具有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性强。
通过比较ADC0832具有较快的转换时间且稳定性能强,选择ADC0832作转换芯片选择。
2.5 显示电路的选择论证
方案LED灯显示
LED按显示方式可分为静态显示和动态显示。静态显示就是显示驱动电路具有输出锁存功能,单片机将要显示的数据送出后就不再控制LED,直到下一次显示时再传送一次新的数据。只要当前显示的数据没有变化,就无需理睬数码管显示。静态显示的数据稳定,占用CPU时间少。静态显示中,每一个显示器都要占用单独具有锁存功能的I/O口,该接口用于笔画段字形代码。这样单片机只要把显示的字型数据代码发送到接口电路,该字段就可以显示要发送的字型。要显示新的数据时,单片机再发送新的字型码。
种方法是动态扫描显示是用接口电路把所有显示器的8个笔画字段(a-gdp)同名端连接在一起,而每一个显示器的公共极各自独立接受I/O线控制。CPU向字段输出端口输出字型码时,所有显示器接收相同的字型码,但究竟使哪一位则由I/O线决定。动态扫描用分时的方法轮流控制每个显示器的公共极,使每个显示器轮流点亮。在轮流点亮的过程中,每位显示器的点亮时间极为短暂,但由于人的视觉暂留现象及发光二级管的余辉效应,给人的印象就是一组稳定的显示数据。
方案LCD显示器
LCD是液晶显示器的缩写,它是一种被动式的显示器,即液晶本身并不发光,而是利用液晶经过处理后能改变光线通过方向的特性,从而达到白底黑字或者黑底白字显示的目的。液晶显示器具有功耗低、抗干扰能力强等优点,因此被广泛应用在仪器仪表和控制系统中。
通过比较LCD是具有很多优点,但是本设计中用LED灯就能实现其很好的功能,且节约成本。所以选择LED
2.6 整体方案
根据基于多传感器的智能火灾报警系统的基本工作原理:当有火灾发生时,环境中的温度和气体的浓度会升高,温度传感器把模拟信号直接转化成数字信号再传送给单片机来处理烟雾传感器把感受的烟雾信号经过放大再经过A/D转换电路把模拟信号转换成数字信号发送给单片机来处理和控制。通过单片机处理过的信号,再与预订的门限值进行对比,达到门限值单片机通知报警电路报警。系统总体方案如图2.1所示。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BB4.tmp.png
   2.1 系统总体方案框图
2.7 本章小结
通过控制芯片、传感器、显示部分的对比和分析,对本设计的主要器件进行论述,最终确定了各部分所用的元器件。主控芯片选择AT89S52作为控制核心,DS18B20温度传感器和MQ-2烟雾传感器作为数据搜集电路,并用LED作为显示电路。
                                    
3章 建筑物多传感器火灾报警系统的硬件设计
                                    
3.1 AT89S52单片机简介
    AT89S52是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。
3.2 AT89S52单片机的最小系统电路及其引脚功能说明
AT89S52单片机各个功能部件的运行都以时钟控制信号为基准,有条不紊地一拍一拍地工作。所以在单片机系统设计中,振荡电路的设计是十分重要的一个环节,时钟电路的质量也直接影响单片机系统的稳定。
如图3.1中的时钟电路的电容C1C2的典型值通常采用选择为30pF左右。该电容的大小会影响振荡器频率的高低、振荡器的稳定性和起振的快速性。晶体振荡频率的范围通常是在1.2-12MHz。一般的情况下,单片机的晶体振荡为并联谐振状态,两个电容的取值应该是相同的,或者相差不大,如果相差太大,容易造成谐振的不平衡,容易造成停振或者干脆不起振。输出的信号与单片机的1819脚相连。
复位是单片机初始化的操作,单片机重新启动时都需要进行复位,使得CPU处于准备开始的状态,并且从这个状态开始工作。AT89S52单片机的复位是由外部的复位电路实现的。复位电路通常采用上电自动复位和按钮复位两种方式。上电自动复位是通过外部复位电路的电容充电来实现的。按键手动复位有电平和脉冲两种方式。如图3.1中所示,本设计采用按键手动复位的电平复位电路。
AT89S52单片机的复位引脚RST出现两个机器周期以上的高电平时,单片机执行复位操作。
VCC:电源供电电压。
GND:电源地电平。
XTAL1:当外接晶振时,接外部晶振的一个引脚。片内振荡器由一个单级反相器组成,XTAL1为反相器的输入。当外部振荡器提供时钟信号时,则由XTAL1端输入。
XTAL2:接外部晶振的另一个引脚,片内为单级反相器的输出。当由外部时钟源提供时钟信号时,则本引脚悬空。
P0口:8位并行I/O口,作为输出口时,每个管脚可带8TTL负载。在外扩存储器时,它定义为低8位地址/数据总线。当定义为I/O口时为准双向I/O口,需外接上拉电阻,在写入“1”后就成为高阻抗输入口。在对片内Flash编程时P0口接收字节代码,在程序校验时输出字节代码。程序校验期间应外接上拉电阻。
P1口:内接上拉电阻的8位准双向I/O口,能负担4TTL负载。在Flash编程和校验时定义为8位地址线。
P2口:内接上拉电阻的8位准双向I/O口。能接4TTL负载。当访问外部存储器时定义为高八位地址总线,只需八位地址线时,它将输出特殊功能寄存器中内容。
P3:内接上拉电阻的8位准双向I/O口,能负担4TTL负载。
它的第二变异功能如下。
P3.0 RXD(串行输入口)。
P3.1 TXD(串行输出口)。
P3.2 /INT0(外部中断0)。
P3.3 /INT1(外部中断1)。
P3.4 T0(记时器0外部输入)。
P3.5 T1(记时器1外部输入)。
P3.6 /WR(外部数据存储器写选通)。
P3.7 /RD(外部数据存储器读选通)。
RST:复位信号输入端。当单片机运行时,此引脚加上持续时间大于2个机器周期(24个时钟振荡周期)的高电平时,就可以对单片机完成复位操作。RST引脚上的高电平有效。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVXMOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号不会出现。
/EA/VPP:当/EA保持低电平时,此时外部程序存储器地址为0000H-FFFFH,不管是否有内部程序存储器。加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此时为内部程序存储器。在FLASH编程时,此引脚用来通12V编程电源,即VPP
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BB5.tmp.png
                                3.1 单片机的最小系统电路
3.3 温度采集电路3.3.1 DS18B20的介绍
本设计采用的温度传感器是美国DALLAS公司生产的DS18B20        传感器,它与其他传统的温度传感器不同,DS18B20可以把采集到的温度直接转化成串行数字信号,直接提供给单片机进行处理,它具有耐磨耐碰,体积小,低功耗,高性能,抗干扰能力强,使用方便,适用于各种狭小空间设备数字的测温和控制领域。
通过编程,温度传感器DS18B20可以实现912位的温度读数。信息经过单个引脚送入温度传感器DS18B20或从温度传感器DS18B20的一个引脚送出,因此从单片机到DS18B20仅仅需要连接一个引脚。本身有电源可以支持读、写和执行温度变化所需要的电源,而不需要外接的电源。
每片DS18B20在出厂时都设有唯一的产品序列号,此序列号存放在它的内部ROM中,微处理器通过简单的协议就能识别这些序列号,因此多个DS18B20可以挂接于同一条单线总线上,这允许在许多不同的地方放置温度传感器,特别适合于构成多点温度测控系统。
3.3.2 温度传感器DS18B20的主要特点
1:采用单线技术,与单片机通信只需要一个引脚;
   2:通过识别芯片各自唯一的产品序列号从而实现单线多挂接,简化了分布式温度检测的应用;
   3:实际应用中不需要外部任何器件即可实现测温;
   4:可通过数据线供电,电压范围为35.5V
   5:不需要备份电源;
   6:测量范围为-55+125℃,在-1085℃范围内误差为±0.5℃
   7:数字温度计的分辨率用户可以从9位到12位选择,可配置实现912位的温度读数;
   8:将12位的温度值转换为数字量所需要的时间不超过750MS
   9:用户定义的,非易失性的温度告警设置,用户可自行设定告警的上下限温度;
10:告警寻找命令可以识别和寻址那些温度超出预设告警界限的器件。
3.3.3 温度传感器DS18B20的引脚图和封装及引脚功能说明
DS18B20温度传感器封装如图3.2(a)所示、引脚图如图3.2(b)所示。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BB6.tmp.png          file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BB7.tmp.png            3.2(a) DS18B20封装                  3.2(b) DS18B20引脚图
NC:空引脚,悬空,不使用。
VDD:可选电源脚,电压范围为35.5V。当工作于寄生电源时,此引脚必须接地。
DQ:数据输入/输出脚。漏极开路,常态下高电平。
GND:接地。
3.3.4 DS18B20供电方式
DS18B20有两种供电方式:寄生电源和外部电源。
寄生电源简单说起来是器件从单线数据线中“窃取”电源,在信号线为高电平的时间周期内,把能量存储在内部的电容器中,在单信号线为低电平的时间内断开此电源,直到信号线变为高电平重新接上寄生(电容)电源为止。寄生电源有两个优点:
1可实现远程温度检测而无需本地电源;
2、有正常电源的条件下也可以读ROM
为了使DS18B20能完成准确的温度变换,当温度变换发生时,DQ线上必须提供足够的功率。因为DS18B20的工作电流高达1.5mA4.7K的上拉电阻将使得DQ线没有足够的驱动能力。解决的方法是在发生温度变换时在DQ线上提供强的上拉,比如用MOSFET管把DQ线直接拉到电源电压。当使用寄生电源方式时VDD引脚必须连接到地。
DS18B20的另一种供电方式是将VDD引脚接外部电源(3-5.5V)。这种方法的优点是在DQ线上不要求强的上拉。总线上的主机在温度变换期间不需要一直使DQ线保持高电平。这就允许在变换时间内其它数据在单线上传送。而且,在单线上可以放置多个DS18B20,如果它们都使用外部电源,那么通过发起跳过ROM”命令,接着执行温度变换命令就可以同时完成各自的温度变换。注意,采用外部电源这种方式时,GND引脚不可悬空。
本设计虽然只使用了一片DS18B20,但由于不存在远程温度测量的考虑,所以为了简单起见,仍然采用外部供电的方式。
3.3.5 温度采集模块
    DS18B20是数字式温度传感器,它把采集到的温度信号直接转化成单片机能识别的数字信号,而且本设计中采用的外部供电的方式,所以设计出的温度采集电路如图3.3所示。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BB8.tmp.png
3.3 温度采集电路
3.4 气体浓度采集电路
气体浓度采集模块是能够检测环境中的烟雾等气体的浓度,并将其转换为数字信号传送至主控芯片,其最基本组成部分应包括:气体信号采集电路、模拟放大电路、模数转换电路、单片机控制电路。气体信号采集电路一般由气体传感器和模拟放大电路组成,将烟雾等气体信号转化为模拟的电信号。模数转换电路把从烟雾检测电路送出的模拟信号转换成单片机可以识别的数字信号之后送入单片机中进行处理。
3.4.1 MQ-2传感器介绍
本设计中采用的MQ-2型半导体可燃气体敏感元件烟雾传感器属于气敏传感器,是气-电变换器,它将可燃性气体在空气中的含量(即浓度)转化成电压或者电流信号,通过A/D转换电路将模拟量转换成数字量后送到单片机,进而由单片机完成数据处理、浓度处理及报警控制等工作。
MQ-2型半导体可燃气体敏感元件烟雾传感器具有灵敏度高、响应快、抗干扰性好、使用方便、价格便宜,且不会发生探头阻缓及中毒现象,维护成本较低等优点。因此,本设计采用MQ-2气体传感器作为报警器烟雾信息采集部分的核心。
MQ-2型烟雾传感器属于二氧化锡半导体气敏材料,属于表面离子式N型半导体。当他处于200~300℃温度时,二氧化锡吸附了空气中的氧,从而形成氧的负离子吸附,使得半导体中的电子密度减小,从而使其电阻值增加。当与烟雾接触时,如果晶粒间界处的势垒受到该烟雾的调制而变化,此时就会引起表面电导率的变化。利用这一点,MQ-2型烟雾传感器就可以获得这种烟雾存在的信息。
遇到可燃烟雾(如CH4等)时,原来吸附的氧脱附,而由可燃烟雾以正离子状态吸附在二氧化锡半导体表面;氧脱附放出电子,烟雾以正离子状态吸附也要放出电子,从而使二氧化锡半导体带电子密度增加,电阻值下降。而当空气中没有烟雾时,二氧化锡半导体又会自动恢复氧的负离子吸附,使电阻值升高到初始状态。这就是MQ-2半导体型可燃性烟雾传感器检测可燃烟雾的基本原理。
3.4.2 MQ-2传感器的特性及主要技术指标
MQ-2型传感器的一般特点:对天然气、液化石油气等烟雾有很高的灵敏度,尤其对烷类烟雾更为敏感;具有良好的重复性和长期的稳定性,初始稳定,响应时间短,长时间工作性能好;电路设计电压范围宽,24V以下均可;加热电压5±0.2V
MQ-2型传感器的初期稳定特性:半导体烟雾传感器在不通电状态存放一段时间后,再通电时,器件并不能立即投入正常工作。这是因为烟雾传感器中的二氧化锡在不通电的状态下会吸附空气中的水蒸气,当再次通电时需要预热几分钟使水蒸气蒸发后,气敏电阻才能正常工作。初期稳定时间是指再次通电工作时,气敏电阻值达到稳定时所需要的时间。一般来说,不通电时间越长初期稳定时间也就越长,不通电存放时间达到15天以上,初期稳定时间一般要五分钟以上。
MQ-2半导体烟雾传感器一般要在较高的温度(200~450℃)下工作,需要对其加热。传感器通常是用在易燃易爆环境中,但如果加热丝直接与电源相连,当加热丝短路造成元器件局部过热或放电时,极易引发安全事故。因此必须使用传感器的生产厂家推荐的加热电压,使其工作在安全范围内,以保证操作安全。
3.4.3 气体采集模块
MQ-2传感器输出的模拟信号一般的都比较微弱,需要经过前置电路对其进行放大、滤波、电平调整,才能满足单片机对输入信号的要求。本设计中气体浓度采集系统采用的MQ-2半导体烟雾传感器属于电阻型,因此只需串联一个参考电阻,再经过一个放大电路即可发送给ADC采集。常见的运算放大器中,S8550低电压、大电流、小信号、价格低廉、使用简单等优点,最为普通,所以本设计中的前置放大电路采用S8550作为电路的运算放大器。信号经由S8550运算放大器放大后进入ADC0832模数转换模块,ADC0832可以将输入的模拟信号转换成数字信号,然后再将数字信号传送给单片机处理。经过考虑以上的因素设计出气体浓度采集电路,具体气体浓度采集模块如图3.4所示。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BC9.tmp.png
3.4 气体浓度采集模
3.5 ADC0832转换器3.5.1 ADC0832转换器介绍
ADC0832 8位分辨率的A/D转换芯片,其最高分辨可达256级,适应一般模拟量转换要求。因内部电源输入和参考电压复用,芯片的模拟电压输入应在0-5V之间。芯片的转换时间仅为32μS,它具有双重的数据输出,可作为数据校验,以减少数据错误,具有较快的转换速度和较强的稳定性能。芯片的独立使能输入,使多器件挂接和处理器控制变得方便可行。DI 数据输入端,可以轻松地实现功能的通道选择 ADC0832的封装如图3.5所示。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BCA.tmp.png
3.5 ADC0832封装图
3.5.2 AD0832转换器各引脚功能
/CS:片选使能,低电平芯片使能。   
CH0:模拟输入通道0,或作为IN+/- 使用。   
CH1 模拟输入通道1,或作为IN+/- 使用。   
GND:芯片参考0 电位(地)。   
DI 数据信号输入,选择通道控制。   
DO 数据信号输出,转换数据输出。   
CLK 芯片时钟输入。   
VCC/REF 电源输入及参考电压输入。
3.6 报警电路设计
本设计采用蜂鸣器和LED灯作为报警装置。通过判断所接收到的数据来确定是否报警,所接受到的数据主要来自温度传感器、烟雾传感器和按键。
3.6.1 蜂鸣器
当单片机接收到超额温度信号或气体信号时,输出脚BELL输出高电平,Q1导通,致使蜂鸣器BELL得电工作,发出报警声。具体报警电路如图3.6所示。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BCB.tmp.png
图3.6 报警模块
3.6.2 LED指示灯
本设计共使用了3LED灯,两个状态指示灯和一个电源指示灯。通上电源以后,电源指示灯亮,表明该系统处在工作情况下;绿色的状态指示灯亮,表明该系统为正常工作模式;当单片机接收到超额温度信号或气体信号时,向P0端口发送信号,红色的状态指示灯亮,并且发出报警信号。状态指示灯如图3.7(a)所示、电源指示灯如图3.7(b)所示。
            file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BCC.tmp.png            file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BCD.tmp.png
3.7(a) 状态指示灯电路图                    3.7(b) 电源指示灯电路图
3.7 数码管显示电路设计
要用单片机构成发射机,就需要一个人机界面。常采用的方式是LED数码管显示结果,用几个小按键执行某些功能,如预置值、改变测量范围。
3.7.1 显示器的工作原理
LED(Light Emitting Diode)显示是用发光二极管显示字段的显示器件,也称数码管。当二极管导通时相应的一个点或一个笔划发光,就能显示出各种字符。 LED 数码显示器有两种结构,分别是:共阳接法:所有发光二极管的阳极连在一起;共阴接法:所有发光二极管的阴极连在一起。本设计所采用的是四位一体共阳极数码管。
点亮LED 显示器分别有静态和动态两种方法。静态显示就是显示某一字符时,相应的发光二极管恒定地导通或截止,这种方法,每一显示位都需要一个8 位的输出口控制,占用硬件比较多,一般仅用于位数较少的显示。动态则一位位点亮各位显示器,每位显示器每隔一段时间点亮一次。显示器的亮度与导通的电流大小有关,也和点亮的时间、间隔的比例有关。动态显示器因为其硬件成本较低,从而得到较为广泛的应用。如需显示字符和数字,要提供显示段码给LED 显示器组成一个“8”字形的7段,再加上一个小数点位,共8所以提供LED 显示器的显示段码为1 个字节。
发光二极管的工作电压为1.53.0伏,工作电流为几毫安到几十毫安,寿命很长。半导体数码管将十位数分成七个字段,每段为一个发光二极管,其字形结构如图所示,选择不同的字段发光,可显示出不同的字型。
共阳极:把发光二极管的阳极连在一起构成共阳极。使用时公共端接Vcc,当某阳极为低电平时,该发光二极管就导通发光。输出一个段码就可以控制LED显示器的字型。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BCE.tmp.png
3.8 数码显示模块
3.8 按键控制电路设计
本设计只要显示周围温度及气体浓度,若超过设定值则发出报警,因此只要四个按键即可实现。其中两个按键为报警温度的设定;剩下的一个为温度与气体浓度显示的转换;另一个为手动报警按键,当有人提前发现火灾隐情时候,可以按动报警按键发出报警信号,以提醒其他人注意安全。
单片机通过检测报警按键所连接端口信号判断按键是否按下。
3.9 本章小结
本章主要完成了单片机简单的外围电路:晶振电路和复位电路。以及还完成了气体的采集电路、报警电路、按键电路等等。并且介绍了DS18B20温度传感器和MQ-2烟雾传感器的主要特点及其DS18B20温度传感器的供电方式。显示器的工作原理。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BCF.tmp.png
3.9 按键控制模块
                           
      
4章 软件系统设计
                                    
4.1 主程序流程图
程序流程图是编写软件的重要前提,它是在图表上直观的体现拟设计的目的及过程。也是编译的重要依据,按照流程图一步一步编写程序,系统主程序流程图如图4.1所示。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BE0.tmp.png
                        4.1 主程序流程图
4.2 串行通讯的实现4.2.1 串行口控制寄存器SCON的设置
单片机的结构和特殊寄存器是编写软件的关键。SBUF 数据缓冲寄存器是一个可以直接寻址的串行口专用寄存器。实际上SBUF 包含了两个独立的寄存器,一个是发送寄存,另一个是接收寄存器,但它们都共同使用同一个寻址地址,即99HCPU 在读SBUF 时会指到接收寄存器,在写时会指到发送寄存器,而且接收寄存器是双缓冲寄存器,这样可以避免接收中断没有及时的被响应,数据没有被取走,下一帧数据已到来,而造成的数据重叠问题。发送器则不需要用到双缓冲,一般情况下在写发送程序时也不必用到发送中断去外理发送数据。
SCON 串行口控制寄存器通常在芯片或设备中为了监视或控制接口状态,都会引用到接口控制寄存器SCON就是52芯片的串行口控制寄存器。它的寻址地址是98H,是一个可以位寻址的寄存器,作用就是监视和控制52芯片串行口的工作状态。52芯片的串口可以工作在几个不同的工作模式下,其工作模式的设置就是使用SCON 寄存器。
REM 为允许接收位,REM 1 时串口允许接收,置0 时禁止接收。REM 是由软件置位或清零。如果在一个电路中接收和发送引脚P3.0P3.1 都和上位机相连,在软件上有串口中断处理程序,当要求在处理某个子程序时不允许串口被上位机来的控制字符产生中断,那么就可以在这个子程序的开始处加入REM=0 来禁止接收该子程序,在子程序结束处加入REM=1 再次打开串口进行接收。
TB8 发送数据位8,在模式2 3 是要发送的第9 位。该位可以用软件根据需要进行置位或者清除,通常这一位在通信协议中作为奇偶位使用;而在多处理机通信中这一位则用于表示是地址帧或数据帧。
RB8接收数据位8,在模式23是已接收的第9位。该位作为奇偶位或者地址/数据标识位。在模式0中,RB8则作为保留位。在模式1中,当SM2=0时,RB8为已接收的停止位。
TI发送中断标识位。在模式0中,由硬件在发送完第8位数据后置位。其它模式中则是由硬件在发送之初置位。TI置位后,申请中断,CPU响应中断之后发送下一帧数据。在任何模式下,TI都必须由软件来清除。
RI接收中断标识位。在模式0中,由硬件在结束第8位接收后置位。其它模式中则是由硬件在接收的半中间置位。RI=1,申请中断,要求CPU 取走数据。但在模式1中,SM2=1时,当未收到有效的停止位,则不会对RI置位。同样RI也必须要靠软件清除。常用的串口模式1是传输10 个位的,1位起始位为08位数据位,低位在先,1位停止位为1。它的波特率是可变的,其速率是取决于定时器1或定时器2的定时值(溢出速率)。
4.2.2 定时器的初始化设置
定时器TMOD初始值为11H初始化代码如下:
void main()
{
        TMOD=0x11;              //定时器0c初始化   
        TH1=(65535-1000)/256;
        TL1=(65535-1000)%256;       
        EA=1;
        ET0=1;
           ET1=1;
        TR0=1;
        TR1=1;
       
        Init_DS18B20();           //温度 芯片初始化
        P0=0xff;                 //初始化  断口   
        P1=0xff;
       
        P3=0xff;
        while(1)
        {
        Scan_Key();
baojin();
value = ReadAdc0832(0);
        }
}
4.2.3 波特率计算
在使用串口通讯时,一个非常重要的参数就是波特率,只有上下位机的波特
率一样时才可进行正常的通讯。波特率是串行端口每秒可以传输的波特数。它是指每秒可以传送9600个二进位,而一个字节要8个二进位,如用串口模式1来传输,那么加上起始位和停止位,每个数据字节就要占用10个二进位,9600 波特率用模式1传输时,每秒传输的字节数是9600÷10=960 字节。51芯片的串口工作模式0的波特率是固定的,为fosc/12,以一个12M的晶振来计算,那么它的波特率可以达到1M。模式2的波特率是固定在fosc/64fosc/32,具体用那一种就取决于PCON寄存器中的SMOD位,如SMOD0,波特率为focs/64SMOD1,波特率为focs/32。模式1和模式3的波特率是可变的,取决于定时器1252 芯片)的溢出速率。可以用以下的公式去计算:
                    file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BE1.tmp.png                4.1
上式中如设置PCON 寄存器中的SMOD 位为1,就可以把波特率提升至两倍。通常会用定时器1工作在模式2下,此时TL1作为计数,会自动重装值 ,这个定时模式下定时器溢出后,TH1的值会自动装载到TL1,接着计数,这样就可以使得定时更为准确。在这个模式下,定时器1溢出速率可用如下公式:
                   file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BE2.tmp.png             4.2
上式中的计数速率跟晶体振荡器的频率相关。在52芯片中,定时器启动后,每一个机器周期内定时寄存器TH 的值就增加1,而1个机器周期等于12个振荡周期,所以51 芯片的计数速率为晶体振荡器频率的1/12,那么一个12M 的晶振用在51 芯片上的计数速率就为1M。通常用11.0592M 晶体是为了得到标准的无误差的波特率,代入公式:
11.0592M
9600=(2÷32)×((11.0592M/12)/(256-TH1))
TH1=250
12M
9600=(2÷32)×((12M/12)/(256-TH1))
TH1≈249.49
上面的计算可以看出使用12M晶体的时候计算出来的TH1不为整数,而TH1的值只能取整数,这样它就会有一定的误差存在,而不能产生精确的9600 波特率。当然一定的误差在使用中是可以接受的,就算使用11.0592M的晶体振荡器也会因晶体本身所存在的误差而使得波特率产生误差,但晶体本身的误差对波特率的影响是非常小的,甚至可以忽略不计。
4.3 主程序初始化流程图
这部分实现的功能包括各种I/O输入输出状态的设定、寄存器初始化、中断使能等。首先设定定时器工作方式,然后开系统中断,以便响应中断定时,及时对气体浓度和温度进行采样。然后关闭蜂鸣器,开启绿灯,设置报警限初值。主程序初始化流程图如图4.2所示。
4.4 滤波子程序
当在对气体浓度进行采样时,可能会遇到尖脉冲干扰的现象,会引起烟雾浓度采样值的偏差,所以,采用去极值平均滤波法,即先对N个采样数据进行比较,然后去掉最大值和最小值,最后计算余下的N-2个采样数据的算术平均值。这种方法既可以滤去小的随机干扰,又可以滤去脉冲干扰,保证了烟雾检测浓度的准确性,大大降低了误报、错报的可能性。滤波子程序如图4.3所示。
4.5 单片机处理子程序
当温度或烟雾浓度超过报警限设定值时,蜂鸣器发出报警,对应的红灯亮,提醒人们采取安全对策或者采取相关措施,从而保障生命财产的安全。为防止误报,在程序设计上,需对烟雾浓度和温度进行快速重复检查和延时报警,以便区别出烟雾的产生原因,防止误报。单片机处理子程序流程图如图4.4所示。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BE3.tmp.png
4.2 主程序初始化流程图
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BE4.tmp.png
                            4.3 滤波子程序
4.6 按键处理子程序
通过单片机会判断是否有键值,当有键按下时就会有键值,然后调用键盘处理子程序。按键处理子程序流程图如图4.5所示。
4.7 本章小结
本章主要完了串口通讯的实现,并给出波特率的计算,还有主程序的流程图以及单片机处理子程序的流程图、按键处理程序等等。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BE5.tmp.png
4.4 单片机处理子程序流程
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BE6.tmp.png
    4.5 按键处理子程序流程
                                   
                     
结束语
  
火灾自动报警系统可保障生产与生活的安全,避免火灾和爆炸事故以及煤气中毒的发生,它是防火、防爆和安全生产所必备的仪器,具有广阔的市场空间与发展前景。
本设计的火灾自动报警系统主要由单片机最小系统、温度气体浓度检测电路、显示电路部分和报警控制部分构成。根据设计要求、使用环境、成本等因素,选用DS18B20数字温度传感器、MQ-2型半导体电阻式烟雾传感器和AT89S52单片机。温度传感器采用DS18B20数字温度传感器,由可组网数字温度传感器芯片封装而成,具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域等优点。MQ-2型半导体可燃气体敏感元件烟雾传感器属于气敏传感器,是气-电变换器,它将可燃性气体在空气中的含量(即浓度)转化成电压或者电流信号,通过A/D转换电路将模拟量转换成数字量后送到单片机,进而由单片机完成数据处理、浓度处理及报警控制等工作。MQ-2型半导体可燃气体敏感元件烟雾传感器具有灵敏度高、响应快、抗干扰性好、使用方便、价格便宜,且不会发生探头阻缓及中毒现象,维护成本较低等优点。AT89S52是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,工具多,易上手,片源广,价格低,编程灵活,控制简单,很适合我们所要制作的火灾自动报警系统。
在本设计研制的报警系统的基础上,可以再做适当的功能扩展,使火灾自动报警系统的功能更加完善,安全性更高,使用更加方便等,例如增加消防联动装置,在火灾发生时可以直接对火灾进行控制,降低火灾的损失。
这次的毕业设计总的来说还是成功的,自己不仅从中学到了很多,也发现了不少问题。一开始看到这个题目的时候,很茫然,不知道从哪做起,不知道怎么样才能做出来,后来在李老师的耐心指导下,才弄清楚怎么开始做。然后自己开始找相关资料,并结合李老师提供的一些资料,学习AT89S52芯片、数码显示管、时钟电路、控制电路、复位电路的设计原理。通过本次的设计我从中学习到了很多的知识,也明白了很多道理,无论干什么都要细心,只要努力相信一定会成功。
     
                  
参考文献
                       
[1] 沙占友.集成化智能传感器原理与应用[M].北京:电子工业出版社,2004:125-127.
[2] 余锡存,曹国华.单片机原理及接口技术[M].西安:西安电子科技大学出版社,2002:266-268.
[3] 张志良.单片机原理与控制技术(第2版)[J].计算机信息 ,2006,12(9):222-223.
[4] 陈章其,吴冲岩.火灾传感器[J].电子器件,2005,18(1):55-58.
[5] 熊杰.单片机与PC机的串行通信[M].江西:江西环境工程学院,2010:15-17.
[6] 揭景耀,刘激扬.传感器在预防火灾中的应用[J]. 传感器技术,2006,6(2):46-48.
[7] 徐小涛.基于AT89系列单片机的串行通信[M].北京:电子工业出版社,2010:89-91.
[8] 张忠华.单片机与PC机串行通信的实现 [M].北京:北京外国语大学信息技术中,2009:95-97.
[9] Daniel T.Gottuk,Michelle J.Peatross.  Advanced fire detection using multi-signature alarm algorithms[J]. Fire Safety Journal,2002,37(11):381-394.
[10] 张鑫.单片机原理及应用[M].北京:电子工业出版社,2005:67-77.
[11] 林继光,吴明光.PC机和单片机串行通信程序设计[M].浙江:浙江大学工业控制研究所,2001.
[12] 汪道辉.单片机系统设计与实践[J].现代电子技术,2006,12(2):59-64.
[13] Vaughn Bradshaw. The Building Environment: Active and Passive  Control Systems[M]. John Wiley & Sons,2006.
[14] 王玮.52单片机与PC机串行通信接口的设计[J]. 湖北孝感学院物理与电子信息工程,2009,2(1):33-42.
[15] 李华.AT89S5x系列单片机应用接口技术[M].北京:航空航天大学出版社,1993:34-43.
[16] 孙育才. AT89S5x系列单片微型计算机及应用[M].南京:东南大学出版社,2006:59-67.
[17] 刘文涛.单片机应用开发实例[M].北京:清华大学出版社,2005:32-36.
[18] 刘军.单片机原理与接口技术[M].上海:华东理工大学出版社,2006:40-44.
[19] 彭喜元,姜守达,乔立岩.新编AT89系列单片机应用设计[M].哈尔滨:工业大学出版社,2003:90-94.
[20] OGATA K. Modern control engineering [M]. Beijing,China:Publishing House of Electronics Industry,2006:7-23.
[21] 李海涛.关于如何提高单片机系统可靠性的探讨[J].宁夏机械,2005,2(3):22-28.
[22] 张培仁.基于C语言编程AT89S52单片机原理与应用[M].北京:清华大学出版社,2003:55-57.
[23] Yeager Brent.  How to troubleshoot your electronic scale[J].  Powder and Bulk Engineering ,2005,3(1):33-38.
[24] 赖寿宏.微型计算机控制技术[M]. 北京:机械工业出版社,2009:27-30.
[25] 杨中华,汪蕙,刘润生.模拟集成电路的自动综合方法[M].杭州:科学出版社,2007:132-136.
[26] 石明江,顾亚雄.单片机原理与应用课程教学改革与实践[J]. 计算机教育,2011,2(6):12-22.
[27] 张洪润.单片机应用技术教程[M].北京:清华大学出版社,2009:88-91.
[28] 何立民.单片机高级教程——应用与设计[M].北京:航空航天大学出版社,2003:65-69.
[29] 胡汉才.单片机原理及其接口技术(第3版)[M].北京:清华大学出版社,2010:21-26.
[30] Chan K,Ito H,Inaba H.Remote sensing system for near-infrared differential absorption of gas using low-loss optical fiber link[J].  ApplOpt,2004:10-23.  
                                      
                   
                     
时光飞逝,转眼大学四年学习即将结束。回首大学学习期间的校园学习生活,在知识的海洋里汲取营养和体味获取知识的充实与喜悦,不禁感慨万千。
四年的校园生活即将划上句号,而这对于我的人生来说只是一个分号,我将面对又一次新征程。四年的求学生涯在老师、同学、朋友的关爱支持下,走得辛苦却也收获满囊,在设计即将完成之际,我感慨甚多,心情亦是那样无法平静。我们从小就崇拜名人、伟人,但是现在,我觉得我更是想把我的敬意和感谢献给我的导师——黑龙江工程学院的李静老师。您最出色的学生不是我,但我最尊敬的老师却是您。您治学严谨,学识渊博,思想深邃,视野雄阔,处世态度认真,使我感受到了一种良好的精神氛围和努力的态度。授人以鱼不如授人以渔,您不仅让我接受了全新的思想观念,更让我改变了基本的思考方式,锻炼了自我动手的能力,拓宽了未来的发展目标。从设计题目的选定到开题报告、参考文献、外文翻译,一直到设计写作的指导,都是您悉心的点拨,耐心的讲解,再经思考后的领悟,才使得我走到现在这成功的一步。您广博的学识、深厚的学术素养、严谨的治学精神和一丝不苟的工作作风使我终生受益,我在此表示真诚地感谢和深深的谢意。感谢您在百忙之中对我毕业论文从选题到最后定稿所付出的辛劳,感谢您在我最后大学生涯对我人生方向的指引。
在设计即将完成之际,我的心情久久无法平静下来,从开始进入选题,到开题,最后到现在设计的顺利完成,有许许多多可敬的师长、亲爱的同学、热心的朋友给了我无数的帮助,请在这里接受我诚挚谢意!
同时也感谢黑龙江工程学院我的母校为我提供良好的做毕业设计的环境。最后一次感谢所有在毕业设计中曾经帮助过我的良师益友,以及在设计中被我参考的论著的作者。
                       
   A
                       
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8BF6.tmp.png
                            系统硬件原理图
                        
                                 
   B
                                 
#include<reg52.h>
#include "18b20.h"
#include "display.h"
#include "adc0832.h"
#define laddata =P0;
unsigned char value=1;
unsigned char count=0;
unsigned char code duanma[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x89,0xc7};
unsigned char code duanma1[]=
{0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0xBF};
//共阳数码管带小数点段码表    "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
unsigned char code tab[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char code tabw[]={0x24,0xaf,0xe0,0xa2,0x2b,0x32,0x30,0xa7};
extern unsigned char  id=0;
extern unsigned char value;
unsigned char  level=0;
bit h_temp=0, l_temp=0;                       // 定义闪烁标志位
                                                                                                          //timecount用于5000d定时记数   时间到取反标志位     RE re_disp   
int temp,temph=45,templ=3;
int flag=1;
float nongdu;
unsigned char ad_data1,ad_data2,ad_data3;
unsigned int data dis[4]={0x00,0x00,0x00,0x00};   //定义3个显示数据单元和一个数据存储单元
sbit beep= P1^0;
sbit alarm = P3^0;
sbit SET = P3^1;
sbit UP = P3^2;
sbit DOWN = P3^5;
unsigned char tempFlag=0,nongduFlag=0,buttonFlag=0;
sbit ledNorm = P3^3;
sbit ledAlarm = P3^4;
unsigned char displayFlag=0;
sbit wdu1 = P2^5;                     //温度十位
sbit wdu2 = P2^6;                     //不显示
sbit wdu3 =P2^7;                      //小数点
sbit wdu4 = P2^4;                     //温度各位
sbit DQ = P2^3;
void Delay(int num)
{                                     //--延时函数 2uS/   
        while(num--);
}
void Init_DS18B20(void)               //初始化ds1820
{
        unsigned char x=0;
        DQ = 1;                           //DQ复位
        Delay(8);                         //稍做延时
        DQ = 0;                           //单片机将DQ拉低
        Delay(80);                        //精确延时 大于 480us
        DQ = 1;                           //拉高总线
        Delay(14);
        x=DQ;            //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
        Delay(20);
}
/******************************************************************************/
unsigned char ReadOneChar(void)         //读一个字节
{
        unsigned char i=0;
        unsigned char dat = 0;
        for (i=8;i>0;i--)
        {
                DQ = 0;                           // 给脉冲信号
                dat>>=1;
                DQ = 1;                          // 给脉冲信号
                if(DQ)
                dat|=0x80;
                Delay(4);
        }
        return(dat);
}
/******************************************************************************/
void WriteOneChar(unsigned char dat)       //写一个字节
{
        unsigned char i=0;
        for (i=8; i>0; i--)
        {
                DQ = 0;
                DQ = dat&0x01;
                Delay(5);
                DQ = 1;
                dat>>=1;
        }
}
/******************************************************************************/
unsigned int ReadTemperature(void)       //读取温度
{
        unsigned char a=0;
        unsigned char b=0;
        unsigned int t=0;
        float tt=0;
        Init_DS18B20();
        WriteOneChar(0xCC);                 // 跳过读序号列号的操作
        WriteOneChar(0x44);                 // 启动温度转换
        Init_DS18B20();
        WriteOneChar(0xCC);                  //跳过读序号列号的操作
        WriteOneChar(0xBE);                 //读取温度寄存器
        a=ReadOneChar();                    //读低8
        b=ReadOneChar();                    //读高8
        t=b;
        t<<=8;
        t=t|a;
        tt=t*0.0625;
        t= tt*10+0.5;                       //放大10倍输出并四舍五入      
        return(t);
}
void delay_ms(unsigned char ms)        // 延时毫秒@12M,ms最大值255   
{   
    unsigned char i;   
    while(ms--)   
        for(i = 0; i < 100; i++);   
}
void display_temp(void)//显示函数   
{
                EA = 0;
                temp = ReadTemperature();
                EA = 1;
                if((temp/10)>=temph)
                        {       
                                  tempFlag =1;
                        //        ledAlarm=0;
                        //        ledNorm=1;
                        }                             //温度高于或等于上限值,报警
                else
                        {
                                tempFlag=0;
                        }
        dis[2]=value/51;                //AD值转换为3BCD码,最大为5.00V
    dis[3]=value%51;                  //余数暂存
    dis[3]=dis[3]*10;                 //计算小数第一位
    dis[1]=dis[3]/51;
    dis[3]=dis[3]%51;
    dis[3]=dis[3]*10;                  //计算小数第二位
    dis[0]=dis[3]/51;   
        nongdu = dis[2]*1.0+dis[1]*0.1+dis[0]*0.01;
        //        P0 = duanma[value/100];
                P0 = duanma1[10];                //显示百位1
                wdu1 = 0;
                delay_ms(1);
                P2 = 0xff;       
               
                if(nongdu<0.50)
                {
                        level=1;
                        nongduFlag=0;
                }
                else if(0.50<=nongdu<0.75)
                {
                        level=2;
                        nongduFlag=0;
                }
                 else if(0.75<=nongdu<1.00)
                  {
                        level=3;
                        nongduFlag=1;
                  }
                 else if(1.00<=nongdu<1.10)
                  {
                        level=4;
                        nongduFlag=1;
                  }
                 else if(1.10<=nongdu)
                  {
                        level=5;
                        nongduFlag=1;
                  }
        //三级以上报警
            P0 = duanma[level];    //显示等级分1234级,两级以上报警
                wdu2 = 0;
                delay_ms(1);
                P2 = 0xff;
        //        P0 = duanma[(value/10)-(value/100)*10];
                P0 = duanma[temp/100];               //显示十位2
                wdu4 = 0;
                delay_ms(1);
                P2 = 0xff;       
        //        P0 = duanma[value%10];
            P0 = duanma[(temp-(temp/100)*100)/10];  //显示各位3
                wdu3 = 0;
                delay_ms(1);
                P2 = 0xff;
}
void displaySet(void)                     //显示函数
{
                                EA = 0;
                temp = ReadTemperature();
                EA = 1;
       
                if((temp/10)>=temph)
                        {       
                                  tempFlag =1;
                        //        ledAlarm=0;
                        //        ledNorm=1;
                        }                           //温度高于或等于上限值,报警
                else
                        {
                                tempFlag=0;
                        }
                P0 = duanma[temph/10];         //显示十位2
                wdu1 = 1;
                delay_ms(1);
                P2 = 0xff;       
                P0 = duanma[temph/10];         //显示十位2
                wdu2 = 1;
                delay_ms(1);
                P2 = 0xff;       
        //        P0 = duanma[(value/10)-(value/100)*10];
                P0 = duanma[temph/10];          //显示十位2
                wdu4 = 0;
                delay_ms(1);
                P2 = 0xff;       
        //        P0 = duanma[value%10];
            P0 = duanma[temph%10];            //显示各位3
                wdu3 = 0;
                delay_ms(1);
                P2 = 0xff;
}
void display(void)
{
        if(!displayFlag)
        {
                display_temp();
        }
        else
        {
                displaySet();
        }
}
void Set_id(unsigned char id_number,unsigned char one_or_zero)
{
        if(id_number==1)
        {
                if(one_or_zero==0)
                        {       
                                if(temph++>99)
                                temph=99;
                        }
                else
                {
                        if(--temph<templ)
                        temph=templ;
                }
        }
}
void id_case_key(void)
{
        display();
        if(displayFlag)
        {
                if(DOWN == 0)                    //减少按键  
                {
                        delay_ms(20);
                        if(DOWN == 0)
                        {
                                Set_id(1,0);
                        }
                        while(DOWN == 0);              //释放按键
                }
                if(UP == 0)
                {
                        delay_ms(20);
                        if(UP == 0)
                        {
                                Set_id(1,1);
                        }
                        while(UP ==0);
                }
        }
}
void Scan_Key(void)
{
        display();
        if(SET == 0)
        {
                delay_ms(20);
                if(SET == 0)
                {
                        displayFlag = ~displayFlag;
                }
                while(SET == 0);
        }
        id_case_key();
        if(alarm ==0)
        {
                delay_ms(20);
                if(alarm == 0)
                {
                        buttonFlag = ~buttonFlag;
                }
                while(alarm == 0);
        }
        id_case_key();
}
void baojin(void)
{
        if(tempFlag|buttonFlag|nongduFlag)
        {
                                beep=0;
                                 ledAlarm=0;
                                 ledNorm=1;
        }
        else
        {
                                beep=1;
                                 ledAlarm=1;
                                 ledNorm=0;       
        }
}
void main()
{
        TMOD=0x11;                            //定时器0c初始化   
        TH1=(65535-1000)/256;
        TL1=(65535-1000)%256;       
        EA=1;
        ET0=1;
           ET1=1;
        TR0=1;
        TR1=1;
       
        Init_DS18B20();                        //温度 芯片初始化
        P0=0xff;                               //初始化  断口   
        P1=0xff;
       
        P3=0xff;
        while(1)
        {
                Scan_Key();
baojin();
                value = ReadAdc0832(0);
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:320685 发表于 2018-5-2 20:50 | 只看该作者
电路图呢,没有呀
回复

使用道具 举报

板凳
ID:320685 发表于 2018-5-2 20:50 | 只看该作者
电路图呢没有呀
回复

使用道具 举报

地板
ID:1074288 发表于 2023-4-27 09:29 | 只看该作者
一张图都没有?原理图、电路图、仿真都去哪了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表