基于单片机的智能楼宇火灾报警系统_本科毕业设计论文 联系客服

发布时间 : 星期日 文章基于单片机的智能楼宇火灾报警系统_本科毕业设计论文更新完毕开始阅读d2da71e5d05abe23482fb4daa58da0116c171fc6

4 软件功能模块设计与实现

上面一节完成了硬件的设计,要想要系统工作还要完成系统的软件设计。这样系统才能正常工作。下面就介绍系统软件的设计与实现。

4.1温度检测模块软件设计与实现

温度检测模块是火灾检测模块重要组成部分之一,它测得数据为系统做出的动作提供依据。

根据DS18B20传感器结构和功能,可以做出以下设计:DS18B20传感器为单线输出,在单片机使用读/写时序来读/写DSl820的数据位和写命令字的位,或取其数据,将数据转换成与之对应的温度值,当被测温度值大于预设温度值时,输出报警信号,反之,则继续检测环境温度。

经过单线接口访问DS18B20的协议初始化与ROM的操作指令如下: (1)初始化

单总线上的所有数据处理都要从初始化起始。初始化包含总线主机发出的复位脉冲,接着由其他元件送出的存在脉冲。 (2)ROM操作指令

一旦总线主机检测到从属器件的存在,它便可以发出器件ROM操作命令之一。所有ROM操作指令都为8位长。指令具体如下:

(a)Read ROM (读ROM)[33H]

此指令允许单片机读取DS18B20温度传感器的系列编码,唯一的产品序列码,及其8位的CRC。这个指令只能在单总线上有一个传感器的情况下使用。若单总线上存在在数个的器件时,那么当全部的芯片同时发送数据时,将会产生数据冲突的情况。

(b)Match ROM(“符合”ROM)[55H]

Match ROM指令。后续以64位的ROM数据序列,允许单片机对多点总线上特定的DS18B20寻址,只有在与64为ROM序列完全相符的DS18B20情况下,才能对后续的存贮器操作指令令做出相应响应。其他与64 位ROM序列完全不符的芯片将会等待复位脉冲。这个命令在单总线上不管有几个元件的情况下都可使用。

(c)Skip ROM(“跳过”ROM)[CCH]

在单总线系统中,此指令允许主机不必提供64位ROM编码而就访问存储器操作来节省时间。假如单总线上设计多个芯片时,那么在Skip ROM命令之后发出读命令,由于多个芯片同时发送数据,单总线上会产生数据冲突现象。

(d)Search ROM(“探索”ROM)[F0H]

当模块工作时,主机可能会不清楚单总线上的元件的个数或其ROM编码。搜索ROM值令会允许主机应用“消去”(elimination)识别单总线上的全部传感器的64位ROM编码。

(e)Alarm ROM(报警搜索)[ECH]

此命令的流程与搜索ROM命令相同。但是,仅在最近一次温度测量出现报警的情况下,DS18B20才对此命令做出响应。报警的条件定义为温度高于TH或低于TL。只要DS18B20一上电,报警条件就保持在设置状态,直到另一次温度测量显示出非报警值,或者改变TH或TL的设置使得测量值再一次位于允许的范围之内。贮存在EEPROM内的触发器值用于报警。 DS18B20的读/写时序如下图4-1所示。

MASTER WRITE “0”SLOT <120us60us1usDS18B20 SAMPLESMIN TYP MAX30us15us15us830us

1us1us15us15us 30us15us图4-1 DS18B20的读/写时序图

单片机时刻发送一个复位脉冲(最短的是480us的低电平信号)接着在时间后释放总线,并且接收状态吓得DSl8B20传感器在检测到单总线有上升沿后,等待大约15-60us接着DS18B20在时间发出存在脉冲(低电平大约持续60-240us)如下图4-2所示。

t015us~60us400us~960ust1t2480us60us~240ust3t4 图4-2初始化的时序图

8

当单总线在时刻从高电平拉到低电平时,就产生写时间隙从时刻开始大约15us之内应将所需写的位送到单总线上的DSl8B20传感器在大致15-60us后对总线采样若低电平写入的位是0若高电平写入的位是连续写2位间的间隙应大于1us,如图4-3所示。

>60us15us >1us>60us45us>1ust015us~60us

t1t015ust1

图4-3 写“0”写“1”电平时序图

流程图如图4-4所示。 开始 判断DS18B20否是否存在? 是 启动温度转换 等待数据 读取温度 数据转换 数据比较否 是 声光报警

结束

图4-4 温度检测模块流程图

部分程序清单如下所示:

int Read_Temperature(void) //读取温度 {

int i; union{

uchar c[2]; int x; }temp; do

i=ds1820_ack(); while(i==0x01);

ds1820_write(0xcc); //跳过Rom

ds1820_write(0x44); //启动ds18b20温度转换 delay(100); do

ds1820_write(0xcc); //跳过Rom

ds1820_write(0xbe); //读取转换后温度值 //for (i=0;i<9;i++) temp.c[0]=ds1820_read(); temp.c[1]=ds1820_read(); return (temp.x); i=ds1820_ack(); while(i==0x01);

}

4.2烟雾检测模块软件设计与实现

首先对单片机A/D进行初始化,然后读取从MQ-2电路采集的电压信号经A/D转换,将模拟量转换成相应的数字量数值,与程序预设好的烟雾浓度数值相比较,从而判定是否输出火灾报警信号。其原理流程如下图4-5所示。