历史上的今天

今天是:2024年09月23日(星期一)

正在发生

2020年09月23日 | 51单片机的二氧化碳、温湿度检测系统

发布者:Chunjie2022 来源: 51hei关键字:51单片机  二氧化碳  温湿度检测系统 手机看文章 扫描二维码
随时随地手机看文章

基于51单片机的二氧化碳、温湿度检测系统设计。采用LCD1602显示,CO2传感器使用MH-Z19B,温湿度传感器使用DHT11

制作出来的实物图如下:
 

Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)
 


单片机源程序如下:

/********************************** (C) COPYRIGHT *******************************

* File Name        : main.C

* Author                :

* License                : MIT

* Version                : V1.0

* Date                        : 2019/04/12

* Description                : 51温湿度二氧化碳检测

*******************************************************************************/

#include

#include "1602.h"

#include "dht.h"

#include "2402.h"


#define uchar unsigned char

#define uint  unsigned int

#define ulong unsigned long

       

//定义三个LED灯

sbit Led_qushi = P1^0;                  //去湿灯

sbit Led_jiangwen = P1^1;                //降温灯

sbit led_CO2 = P1^2;        //二氧化碳控制灯

//定义蜂鸣器

sbit fmq = P2^3;        //蜂鸣器

//定义设置键、调整键

sbit Key_TH1 = P3^0;//温度上限值调整按键

sbit Key_TH2 = P3^1;

sbit Key_HH1 = P3^2;//湿度上限值调整按键

sbit Key_HH2 = P3^3;

sbit shezhi  = P2^7;//设置键

sbit Key_CH1 = P2^6;//二氧化碳上限值调整按键

sbit Key_CH2 = P2^5;


//二氧化碳发送指令

uchar  code tab[9]={0xff,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79};

uchar  date[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};


//定义标识

volatile bit FlagStartRH = 0;  //开始温湿度转换标志

volatile bit FlagKeyPress = 0; //有键按下

volatile bit fmqt = 0;

volatile bit fmqh = 0;

volatile bit fmqc = 0;

//定义温湿度传感器用外部变量

extern U8  U8FLAG,k;

extern U8  U8count,U8temp;

extern U8  U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;

extern U8  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;

extern U8  U8comdata;

extern U8  count, count_r;

U16 temp;

S16 temperature, humidity;

S16 idata TH, HH, ch;  //温度上限和湿度上限//二氧化碳上限值

char * pSave;

U8 keyvalue, keyTH1, keyTH2, keyHH1, keyHH2, keyCH1, keyCH2;

unsigned char moshi=0;

//定义变量

U16 RHCounter;


/************************************

    延时子程序

        延时时间(xms*1)ms

*************************************/

void delayms(uint xms)

{

        uint x,y;

        for(x=xms;x>0;x--)

                for(y=110;y>0;y--);

}

/*******************************************************************************

*  功    能          :  串口发送

*  注意事项          :  

*******************************************************************************/

void send(uchar dat)         //发送一字节   

{

  SBUF=dat;

  while(!TI);

  TI=0;

}

/*******************************************************************************

*  功    能          :  数据初始化程序

*  注意事项          :  

*******************************************************************************/

void Data_Init()

{

   RHCounter = 0;

   Led_qushi = 1;

   Led_jiangwen = 1;

   led_CO2 = 1;

   TH = 40;  //温度初始上限值

   HH = 85;  //湿度初始上限限制

         ch = 25;  //二氧化碳初始上限值

   keyvalue = 0;

   keyTH1 = 1;

   keyTH2 = 1;

   keyHH1 = 1;

   keyHH2 = 1;

         keyCH1 = 1;

         keyCH2 = 1;

}


//定时器0初始化

void Timer0_Init()

{

        ET0 = 1;        //允许定时器0中断

        TMOD = 1;       //定时器工作方式选择

        TL0 = 0x06;     

        TH0 = 0xf8;     //定时器赋予初值

        TR0 = 1;        //启动定时器

}


//存入设定值、

void Save_Setting()

{

   pSave =  (char *)&TH;          //地址低位对应低8位,高位对应高8位

   wrteeprom(0, *pSave);          //存温度上限值TH低8位

   DELAY(300);

   pSave ++;

   wrteeprom(1, *pSave);          //存温度上限值TH高8位

   DELAY(300);

   pSave =  (char *)&HH;

   wrteeprom(2, *pSave);          //存湿度上限值RH低8位

   DELAY(300);

   pSave ++;

   wrteeprom(3, *pSave);          //存湿度上限值RH高8位

   DELAY(300);

         pSave =  (char *)&ch;

   wrteeprom(4, *pSave);          //存CO2上限值RH低8位

   DELAY(300);

   pSave ++;

   wrteeprom(5, *pSave);          //存CO2上限值RH高8位

   DELAY(300);

}


//载入设定值、

void Load_Setting()

{

   pSave =  (char *)&TH;

   *pSave++ = rdeeprom(0);

   *pSave = rdeeprom(1);

   pSave = (char *)&HH;

   *pSave++ = rdeeprom(2);

   *pSave = rdeeprom(3);

         pSave = (char *)&ch;

   *pSave++ = rdeeprom(4);

   *pSave = rdeeprom(5);

   if ((TH>99)||(TH<0)) TH = 40;

   if ((HH>99)||(HH<0)) HH = 85;

         if ((ch>50)||(ch<0)) ch = 25;

}

//按键扫描程序

void Key_set_scan()

{

  if(shezhi==0)

          {

           delayms(10);

                if(shezhi==0)

                {  

                   while(!shezhi);

                   L1602_init(); //初始化液晶

                   moshi++;

                   if(moshi >= 2)moshi = 0;

                   if(moshi == 0)

                   {

                                L1602_string(1,1,"Te:   C  ");

                                L1602_string(1,9,"Hu:   %  ");

                                L1602_string(2,1,"PPM:   ");            

                   }

                   else if(moshi == 1)

                   {

                                L1602_string(1,1,"TH:");

                                L1602_string(1,9,"HH:");

                                L1602_string(2,1,"CH:");

                                L1602_string(2,8,"0");  

                                L1602_string(2,9,"0");

                   }                                            

                }

        }

}       

//按键加减设定值

void KeyProcess(uint num)

{                       

   switch (num)

   {

      case 1:

             if (TH<99) TH++;

             L1602_char(1, 5, TH/10+48);

             L1602_char(1, 6, TH%10+48);

             break;

          case 2:

             if (TH>1) TH--;

             L1602_char(1, 5, TH/10+48);

             L1602_char(1, 6, TH%10+48);

             break;

          case 3:

             if (HH<99) HH++;

             L1602_char(1, 13, HH/10+48);

             L1602_char(1, 14, HH%10+48);

             break;

          case 4:

             if (HH>1) HH--;

             L1602_char(1, 13, HH/10+48);

             L1602_char(1, 14, HH%10+48);

             break;

         case 5:

             if (ch<50) ch++;

             L1602_char(2, 6, ch/10+48);

             L1602_char(2, 7, ch%10+48);

             break;

         case 6:

             if (ch>1) ch--;

[1] [2] [3]
关键字:51单片机  二氧化碳  温湿度检测系统 引用地址:51单片机的二氧化碳、温湿度检测系统

上一篇:单片机+VB上位机温湿度检测制作
下一篇:Sdcc编译环境下中断函数的编写

推荐阅读

    人们常说,亚洲有四大邪术:泰国变性术、韩国整容术、日本化妆术和中国PS术。对于阅读本文的人来说,无疑是对“中国PS术”的感触最深。到了如今,随着各种“照骗”的出现,人们对于图片的信任度逐渐降低,视频已经被视为更可靠的证据来源。而现在,随着人工智能进军视频领域,情况又有了改变。    爱美是最重要的生产力之一,PS越来越不足以满...
中国储能网讯:近日,中兴通讯与南京南瑞继保电气有限公司(简称“南瑞继保”)在南京达成战略合作。双方计划围绕国家电网提出的“三型两网”的建设目标,在5G技术与坚强智能电网、泛在电力物联网、有线与无线专网、云计算等领域的融合进行深入合作,提供两网完善的解决方案、产品和服务。
一至五级 ADAS 和 AD 传感技术领域的领先企业 LeddarTech®非常高兴地宣布,Leddar™ Pixell 于 2020 年 9 月 10 日在中国深圳荣获深圳市汽车电子行业协会颁发的卓越创新产品奖。 卓越创新产品奖关注对中国汽车行业产生影响的产品。该奖项凭借严格的评审程序和世界一流的专家评审小组,多年来已在中国汽车行业赢得了可信的声誉。获奖者在国际汽...
1.系统设计背景 目前电力公司对于所管辖的配电房、室,例行巡检每月1次,测温巡测每月1次,全部依赖于人工巡视作业。在高负荷期间和有特殊保供电要求时,须增加巡检频次。 随着近年来电网飞速发展,生产人员不足和巡检工作量增加之间的矛盾日益突出,而运维一体化等工作在扩展业务范围的同时也给变电运维工作提出了更高的要求,在这样的形势下,传统的...

史海拾趣

问答坊 | AI 解惑

使用ST7 PWM(脉冲宽度调制)产生模拟输出(正弦波)

使用ST7 PWM(脉冲宽度调制)产生模拟输出(正弦波)…

查看全部问答∨

电子设计

本帖最后由 paulhyde 于 2014-9-15 09:42 编辑 欢迎大家交流学习哈  …

查看全部问答∨

四层板和33欧电阻

选用四层板不仅是电源和地的问题,高速数字电路对走线的阻抗有要求,二层板不好控 制阻抗。33欧电阻一般加在驱动器端,也是起阻抗匹配作用的;布线时要先布数据地址 线,和需要保证的高速线; 在高频的时候,PCB板上的走线都要看成传输线。传输 ...…

查看全部问答∨

wince UI程序窗口覆盖问题 Z order

大家好,问个wince UI程序的问题。 问题描述: 系统开机后启动主程序(A对话框)。 1、在A对话框通过createprocess启动B程序(B对话框)。这时候B完全覆盖A,    A对话框内开启了一个通讯监视线程,如果有来电,则A对话框会创建一个 ...…

查看全部问答∨

<OP放大电路设计>,[日] 冈村迪夫 著

希望对大家有帮助,还有5本,但太大,上传不了。…

查看全部问答∨

听说ST要出STM32F105系列带以太网控制器的片子了,是真的么?

                                 诸位有没有知道的透露一下?片内以太网控制器和芯片的价格会决定我在三家cortex-m3芯片的选型,现在真犹豫呀!…

查看全部问答∨

msp430仿真困惑

msp430仿真,怎样才能看到程序中的变量变化,谢谢指点!…

查看全部问答∨

CC2530 怎么制作红外学习遥控

用到一个红外收发模块 怎么去和CC2530关联上?…

查看全部问答∨

【低功耗】The Design Warrior Guide To FPGA

FPGA 外国经典书 推荐            …

查看全部问答∨

有没有想过launchpad在电视上显示图像

有没有想过launchpad在电视上显示图像,而且在一个超大的电视上。有种红白机的感觉哈来张超简电路图,其实就是这么简单详细工程链接:http://naturetm.com/?p=47…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved