目录

一、主要功能

二、使用步骤

三、硬件资源

四、软件设计

五、实验现象

一、主要功能

1、LCD1602液晶屏幕显示烟雾,温度值
2、按键设置阈值​
3、烟雾值大于阈值或温度大于阈值10s启动声光警报、喷水模块
4、元器件损坏警报

二、使用步骤

基于51单片机的火灾报警控制系统通常采用模块化设计,集成多种传感器实现火灾隐患的早期监测与预警。系统通过多参数协同检测和联动控制机制,显著提升火灾识别的准确性和响应速度。

三、硬件资源

1、51单片机核心模块
2、按键模块
3、DHT11温湿度传感器、MQ烟雾传感器模块
4、蜂鸣器模块
5、继电器模块
6、LCD1602显示模块

四、软件设计

#include <reg51.H> 
#include "intrins.h"
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
#define     LCDIO      P0     //液晶屏数据口

sbit rs=P2^5;  //定义1602 RS
sbit rw=P2^6;  //定义1602 RW
sbit lcden=P2^7; //定义1602 EN

sbit SET    = P2^0;    //设定
sbit Up     = P2^1;    //加
sbit Down   = P2^2;    //减
sbit contrl = P2^3;    //模拟布线 问题
sbit DQ   = P2^4;        //温度传送数据IO口
sbit motor1 =P1^6;   //继电器接口
sbit speak=P1^7;    //蜂鸣器接口

uchar Temp_H=35;//温度上限
uchar RH=50;//烟雾上限
uchar mq_value=0;//烟雾值
uchar setflag = 0;//
uchar temp_value;      // 温度值
uchar    signature ;//温度正负判断
uchar alam_flag=0;//火灾警报标志
uchar speak_flag=0;
uchar com_flag=0;//模块异常标志
uchar alam_cont=0;
uchar count = 0;     //计数
uchar code table[]= "Tp:      MQ:    ";
uchar code table1[]="TH:      RH:  % ";

/*********************************************/
void delay(uint z)          //延时
{
    uint x,y;
    for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}
/**********************************************/
void write_com(uchar com)
{
    rs=0;
    rw=0;
    lcden=0;
    P0=com;
    delay(5);
    lcden=1;
    delay(5);
    lcden=0;    
}
/*********************************************/
void write_date(uchar date)
{
    rs=1;
    rw=0;
    lcden=0;
    P0=date;
    delay(5);
    lcden=1;
    delay(5);
    lcden=0;    
}

void lcdinit()
{
    lcden=0;
    write_com(0x38);
    write_com(0x0c);
    write_com(0x06);
    write_com(0x01);
}
/***********************************************/
void init()
{
    uchar num;
     for(num=0;num<15;num++)
     {
         write_date(table[num]);
         delay(5);
     }
     write_com(0x80+0x40);
     for(num=0;num<15;num++)
    {
         write_date(table1[num]);
         delay(5);
     }
}
void main(void)
{

    TMOD=0x01;                 //TMOD=0000 0001B,使用定时器T0的模式1
  TH0=(65536-5000)/256;        //定时器T0的高8位赋初值
  TL0=(65536-5000)%256;       //定时器T0的高8位赋初
    ET0=1;
    TR0=1;                   //定时关闭    
    lcdinit();
    init();
    delay(50);     //启动等待,等LCD讲入工作状态
    delay(50);     //延时片刻(可不要)
    Conut();       //显示函数
    delay(150);     
    while(1)
    {     
        Conut();    //显示当前烟雾
        temp_to_str();   //温度数据转换成液晶字符显示
        alam();//警报
        keyscan();
    }
}
//*****T0中断函数50ms中断一次**************
void t0_time() interrupt 1
{
  TH0=(65536-5000)/256;        //定时器T0的高8位赋初值
  TL0=(65536-5000)%256;       //定时器T0的高8位赋初
    count++;
    if(count>=200)
    {
        count=0;    
        alam_cont++;
        if(alam_cont>=10)
        {
            alam_cont=0;
            speak_flag=1;//启动警报
            EA=0;
        }    
    }    
}

五、实验现象

演示视频:

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐