何凡:基于单片机的火灾报警系统设计
3.2.7 状态指示灯电路
图 3-10 状态指示灯
AD转换器输出的数字信号传输给P0口,读取P0口的内容跟设定的值进行判定,如果大于设定值,P2.3、P2.4输出高电平,P2.2输出低电平,控制黄色发光二级管的发光,说明发生火灾。如果小于设定值,P2.2、P2.3输出高电平,P2.4输出低电平,控制绿色发光二级管的发光,说明正常,没有火灾发生。如果出现异常情况,P2.2、P2.4输出高电平,P2.3输出低电平,控制红色发光二级管的发光。
3.2.8 数码管显示电路
数据采集进来并被成功地由模拟量转化为数字量后,就被传送到系统的显示模块,让人们更直接地观察到相关数据。在本系统中,对LED进行的是动态扫描,除了给显示器提供段的输入之外,还要对显示器进行位控制。
本系统显示用的4位七段数码管由数码管专用驱动芯片ICM7218A驱动,分别接数码管的a、b、c、d、e、f、g,DIGIT1、DIGIT2、 DIGIT3、 DIGIT4为位选,分别控制4位数码管的亮灭,ID0-7为数据线,接单片机P1口。WRITE、MODE是写控制位和模式控制位,分别接单片机P3.6、P2.5。如上图3-11所示。
24
四川理工学院本科毕业设计(论文)
图3-11 数码管显示电路
25
何凡:基于单片机的火灾报警系统设计
第4章 火灾报警器的软件设计
4.1 软件开发环境
本次系统采用的是C语言。因为C语言的描述由函数组成,是一种结构化的程序设计语言,所以更容易实现模块化,而且具有可读性好,易于移植等优点,同时还有汇编语言一样的位操作功能的硬件详细控制指令[11]。数据结构方面,可以使用结构体和数组,能够处理复杂的数据,可用于实时处理系统。
本系统的软件编程使用的是美国Keil Software公司出品的Keil C51,是51系列兼容单片机C语言软件开发系统。 Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能 体现高级语言的优势。
C51工具包的整体结构中,μVision与Ishell分别是C51 for Windows和C51for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及A51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经C51连接定位生成绝对目标文件(ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真软件Proteus使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。
4.3 主程序流程
火灾报警系统控制器上采用80C51作为主控芯片,其主要功能包括:控制IO端口、逻辑判断处理、驱动外部电路、语音报警和A/D采样等,该部分是火灾报警系统智能化的集中体现。
为了便于系统维护,在火灾报警系统的软件设计中采用了模块化程序设计方法,系统各个模块的具体功能都是通过子程序调用实现的。既使得程序结构清晰,又便于以后进一步扩展其功能。本系统主要包括主程序、温度烟雾数据采集子程序、
26
四川理工学院本科毕业设计(论文)
火灾判断与报警子程序等。
主程序是一个无限循环体,其流程是:首先在上电之后系统的各部分包括单片机输出输入端口的设置、数据存储电路、外围驱动电路等完成初始化,接下来执行火灾报警系统的数据采集程序、火灾判断、报警程序。系统初始化后,80C51的P2.4为低电平,P2.2、P2.3为高电平,所以只有绿灯亮,红灯、黄灯不亮,蜂鸣器不报警。
4.2 主程序初始化流程图
主程序初始化流程图如图4-2所示。这部分实现的功能包括各种I/O输入输出状态的设定、寄存器初始化、中断使能等。首先设定定时器工作方式,然后开系统中断,以便响应中断定时,及时对气体浓度和温度进行采样。然后关闭蜂鸣器,开启绿灯,设置报警限初值。
开始 定时器初始化 开中断 关闭蜂鸣器 打开绿灯 是否报警 Y 设定初值 N 返回 图4-2 主程序初始化流程图
27
何凡:基于单片机的火灾报警系统设计
4.3 数据采集子程序
数据采集是火灾报警系统中的重要环节。为了降低误报率,系统设计时对温度烟雾采用了两次采集、两次判断的方法。每次采集温度烟雾数据后,将数据存入单片机的寄存器,然后在火灾判断程序中,将采集的数据与设定的阈值进行比较,判断现场是否发生火灾。
具体流程是:系统和程序初始化后,驱动ADC0809的IN0对温度信号进行A/D转换,单片机接受转换好的数据,存入寄存器,由INT0中断服务程序完成;系统延时10ms,驱动ADC0809的IN1对烟雾信号进行A/D转换,转换完成后存入寄存器。系统延时50ms,进行第二次温度烟雾信号采集,将转换好的数据存入寄存器中。单片机每次驱动A/D转换后等待外部中断,当ADC0809的EOC端变为1时,说明A/D转换已经完成,再通过中断服务程序读取转换得到的数据。
由于设计采用的是模块化设计,系统实现报警功能是通过调用子程序实现的。在数据采集子程序中,一次温度烟雾信号采集延时10ms,是让ADC0809准备好进行下一次信号转换。当系统采集2次温度烟雾信号后,转换好的数据存入单片机的寄存器中,系统再调用火灾判断子程序。
系统温度烟雾信号采集程序流程图如图4-3所示:
28