当前位置: 首页 > news >正文

【51单片机】【protues仿真】基于51单片机烟雾温湿度检测控制系统

目录

一、主要功能

二、使用步骤

三、硬件资源

四、软件设计

五、实验现象

一、主要功能

1、LCD1602液晶烟雾值,温度和湿度值
2、可以设置烟雾、温湿度上下限报警值
3、烟雾值高于报警值,会发出声光报警
4、温湿度值低于或高于设定的范围时,会发出声光报警
5、满足烟雾温度过高、湿度过低时,控制继电器吸合,表示灭火
6、数据掉电存储功能

二、使用步骤

基于51单片机的烟雾温湿度检测控制系统通常由传感器模块、显示模块、报警模块及控制模块组成,可实现环境参数的实时监测与智能报警。

三、硬件资源

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

四、软件设计

#include <reg52.h>
#include <intrins.h>

#define uchar unsigned char        // 以后unsigned char就可以用uchar代替
#define uint  unsigned int        // 以后unsigned int 就可以用uint 代替

sbit LcdRs_P   = P2^5;    // 1602液晶的RS管脚       
sbit LcdRw_P   = P2^6;    // 1602液晶的RW管脚 
sbit LcdEn_P   = P2^7;    // 1602液晶的EN管脚

uchar AlarmTL;                        // 温度下限报警值
uchar AlarmTH;                        // 温度上限报警值
uchar AlarmHL;                         // 湿度下限报警值
uchar AlarmHH;                        // 湿度上限报警值
uint  AlarmLG;                        // 烟雾报警值


/*********************************************************/
// 毫秒级的延时函数,time是要延时的毫秒数
/*********************************************************/
void DelayMs(uint time)
{
    uint i,j;
    for(i=0;i<time;i++)
        for(j=0;j<112;j++);
}


/*********************************************************/
// 10us级延时程序
/*********************************************************/
void Delay10us()
{
    _nop_();    // 执行一条指令,延时1微秒
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
}


void LcdWriteCmd(uchar cmd)

    LcdRs_P = 0;
    LcdRw_P = 0;
    LcdEn_P = 0;
    P0=cmd;
    DelayMs(2);
    LcdEn_P = 1;    
    DelayMs(2);
    LcdEn_P = 0;    
}



void LcdWriteData(uchar dat)
{
    LcdRs_P = 1; 
    LcdRw_P = 0;
    LcdEn_P = 0;
    P0=dat;
    DelayMs(2);
    LcdEn_P = 1;    
    DelayMs(2);
    LcdEn_P = 0;
}


/*********************************************************/
// 1602液晶初始化函数
/*********************************************************/
void LcdInit()
{
    LcdWriteCmd(0x38);        // 16*2显示,5*7点阵,8位数据口
    LcdWriteCmd(0x0C);        // 开显示,不显示光标
    LcdWriteCmd(0x06);        // 地址加1,当写入数据后光标右移
    LcdWriteCmd(0x01);        // 清屏
}


/*********************************************************/
// 主函数
/*********************************************************/
void main(void)
{
    uchar i;                // 循环变量

    LcdInit();                        // 液晶功能初始化
    LcdShowInit();                    // 液晶显示初始化
    AlarmInit();                        // 报警值初始化

    while(1)
    {
        light=Get_ADC0832();            // 读取烟雾强度
        light=light/2.5;                    // 缩小烟雾检测结果(在0-99)
        if(light>99)                            // 如果大于99
            light=99;                                // 则依然保持99
        LcdGotoXY(0,9);                            // 液晶定位到第0行第6列
        LcdPrintNum1(light);                        // 显示测量结果
        
        /*温湿度读取*/
        EA=0;
        ReadDhtData();                             // 检测温湿度数据;
        EA=1;
        LcdGotoXY(1,2);                             // 定位到要显示温度的地方
        LcdPrintNum2(temp);                    // 显示温度值
        LcdGotoXY(1,11);                        // 定位到要显示湿度的地方
        LcdPrintNum2(humi);                    // 显示湿度值
        
        // 报警判断
        AlarmJudge();                        
        
        /*按键扫描和延时*/
        for(i=0;i<30;i++)
        {
            KeyScanf();                                // 按键判断
            DelayMs(10);
        }
    }
}


void UartInt(void) interrupt 4
{
    uchar VoutH,VoutL;
    
    if(RI==1)
    {
        RI=0;
        if(SBUF==0xAA)        // 起始位
        {
            while(!RI);
            VoutH=SBUF;            // Vout(H)
            RI=0;
            while(!RI);
            VoutL=SBUF;            // Vout(L)
            RI=0;
            while(!RI);            // Vref(H)
            RI=0;
            while(!RI);            // Vref(L)
            RI=0;
            while(!RI);            // 校验位
            RI=0;
            while(!RI);            // 停止位
            RI=0;
            
            Value[gIndex]=VoutH*256+VoutL;
            
            gIndex++;
            if(gIndex==20)
                gIndex=0;
        }
    }
}  

五、实验现象

演示视频:

http://www.dtcms.com/a/424609.html

相关文章:

  • 澧县住房和城乡建设局网站pc端设计网站
  • 什么叫宣传类网站群辉 搭建wordpress
  • 网站建设互联昆明网络推广公司
  • 如何在自己网站做解析api一流的苏州网站建设
  • 网站维护花费WordPress前端文本图片添加
  • ◆comfyUI教程◆第1章04节 认识功能界面与基础生图流程
  • 网站分析seo情况小程序开发代理
  • 启明星网站建设兰州市住房和城乡建设局网站
  • 智能网站建设维护软件wordpress邮箱配置stmp
  • Haption达索3D设计解决方案
  • seo网站优化专员徐州网站优化
  • 视频网站设计与开发开周边网站怎么做品牌
  • Python请求京东拍立淘按图搜索,API接口(json数据返回)
  • 网站主页模板 优帮云网站备案 互联网信息查询
  • 建设工程质量检测网站刷赞网站推广永久
  • 关于建设 医院网站的请示删除网站栏目
  • 如何用AI提升学习效率与创作能力
  • 在线视频网站怎么做seo北京定制网站建设公司
  • Spring IoC容器加载过程 vs Bean生命周期对应关系图
  • 榆林电商网站建设app设计与开发公司
  • 吴江建网站优荐苏州聚尚网络网站群建设方案.doc
  • 动态规划实战
  • 专门教做衣服的网站互联网保险产品
  • 专业网站开发设计常州做网站设计
  • 中兴建设有限公司网站网站开发要怎么学
  • 网站备案 申请wordpress缓存头像
  • Figma 前端相关使用
  • 电商网站建设哪家公司好高级网站建设费用
  • MySQL笔记---基本查询
  • 珠宝网站建设方案网站建设gzzhixun