摘要
随着家用电器的普及,家庭火灾发生的频率逐年上升,烟雾报警器在预防火灾中的作用日益凸显。本文设计了一种基于AT89S52单片机的温度烟雾控制系统,该系统结合了MQ-2烟雾传感器和DS18B20温度传感器,能够实时检测环境烟雾浓度和温度,实现声光报警、浓度显示和温度显示等功能。本文详细介绍了系统的组成部分、功能、接口连接方式以及软件设计,展示了一种结构简单、性能稳定、使用方便、价格低廉且智能化的烟雾报警系统。
一、引言
随着科技的进步和人们生活水平的提高,家用电器越来越普及,家庭用电量逐年上升,火灾风险也随之增加。因此,开发一种高效、可靠的烟雾报警系统对于预防家庭火灾具有重要意义。本文基于单片机技术,结合烟雾传感器和温度传感器,设计了一种温度烟雾控制系统,旨在提高报警的灵敏度和准确率。
二、系统设计
- 硬件设计
本系统以AT89S52单片机为核心控制器,通过MQ-2烟雾传感器和DS18B20温度传感器实时检测环境中的烟雾浓度和温度。单片机接收到传感器的信号后,进行数据处理,并根据预设的阈值判断是否触发报警。系统还包括声光报警模块、浓度显示模块和温度显示模块,用于向用户提供直观的报警信息和环境参数。
- 软件设计
系统软件主要包括数据采集、数据处理、报警判断和显示控制等模块。数据采集模块负责从传感器读取烟雾浓度和温度数据;数据处理模块对采集到的数据进行处理和分析;报警判断模块根据处理后的数据判断是否触发报警;显示控制模块则负责控制浓度显示和温度显示模块的工作。
三、系统实现与测试
- 系统实现
根据系统设计方案,我们完成了硬件电路的搭建和软件程序的编写。硬件电路包括单片机最小系统、传感器接口电路、声光报警电路、显示电路等部分。软件程序采用模块化设计,便于调试和维护。
- 系统测试
我们对系统进行了多次测试,包括不同烟雾浓度和温度条件下的测试。测试结果表明,系统能够准确检测环境中的烟雾浓度和温度,并在达到预设阈值时触发报警。同时,系统的声光报警和显示功能也表现良好,能够为用户提供及时、准确的报警信息。
四、结论
本文设计了一种基于单片机的温度烟雾控制系统,该系统结合了烟雾传感器和温度传感器,能够实时检测环境烟雾浓度和温度,实现声光报警、浓度显示和温度显示等功能。系统结构简单、性能稳定、使用方便、价格低廉,具有一定的实用价值。未来,我们将进一步优化系统的性能,提高报警的灵敏度和准确率,为预防家庭火灾做出更大的贡献。
#include <reg52.h>
#include <intrins.h>
#include <key.h>
#include "DS18B20.h"
#define uint unsigned int
#define uchar unsigned char //宏定义
#define BEEP P3_4 //定义蜂鸣器
#define hujiao P1_3
sbit BEEP=P3^4;
sbit hujiao=P1^3;
sbit RS=P2^5;
sbit RW=P2^6;
sbit EN=P2^7;
sbit led_h=P1^4;
sbit led_l=P1^5;
sbit JDQ=P2^0;
sbit ADCS = P3^7;
sbit ADCLK = P3^5;
sbit ADDI = P3^6;
sbit ADDO = P3^6;
bit shanshuo_st; //闪烁间隔标志
bit beep_st; //蜂鸣器间隔标志
bit flag=0;//紧急呼叫标志
sbit DIAN = P2^5; //小数点
uint abc;
uchar x=4; //计数器
signed char m; //温度值全局变量
uchar n; //温度值全局变量
uchar data disdata[5];
uchar code LEDData[]={0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,0xea,0x20,0xa0};
uchar code table[8]={0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00}; // 摄氏温度符号
/*****初始化定时器0*****/
void InitTimer(void)
{
TMOD=0x1;
TH0=0x4c;
TL0=0x00; //50ms(晶振11.0592M)
}
/*****定时器0中断服务程序*****/
void timer0(void) interrupt 1
{
TH0=0x4c;
TL0=0x00;
x++;
}
/*****读取温度*****/
void check_wendu(void)
{
uint a,b,c;
c=ReadTemperature()-5; //获取温度值并减去DS18B20的温漂误差
a=c/100; //计算得到十位数字
b=c/10-a*10; //计算得到个位数字
m=c/10; //计算得到整数位
n=c-a*100-b*10; //计算得到小数位
if(m<0){m=0;n=0;} //设置温度显示上限
if(m>99){m=99;n=9;} //设置温度显示上限
}
/*************************lcd1602程序**************************/
void delay1ms(uint ms)//延时1毫秒(不够精确的)
{ uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<100;j++);
}
unsigned char rolmove(unsigned char m)
{
unsigned char a,b,c,d,e,f,g,h;
a=(m&0x01)<<7;
b=(m&0x02)<<5;
c=(m&0x04)<<3;
d=(m&0x08)<<1;
e=(m&0x10)>>1;
f=(m&0x20)>>3;
g=(m&0x40)>>5;
h=(m&0x80)>>7;
m=a|b|c|d|e|f|g|h;
return m;
}
void wr_com(uchar com)//写指令//
{ delay1ms(1);
RS=0;
RW=0;
EN=0;
P0=rolmove(com);
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
void wr_dat(uchar dat)//写数据//
{ delay1ms(1);;
RS=1;
RW=0;
EN=0;
P0=rolmove(dat);
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
void wr_new() //写新字符
{
uchar i;
wr_com(0x40);
for(i=0;i<8;i++)
部分代码
资料下载地址:
https://docs.qq.com/doc/p/ffc421513a628b30450ae742547c0b850456d7c8