基于单片机的DHT11温度湿度采集系统

2020-01-09来源: 51hei关键字:单片机  DHT11  温度湿度采集系统

DHT11温度湿度采集原理图:

DHT11的单片机源程序:

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

#include

#define uint unsigned int 

#define uchar unsigned char

#include


typedef bit BOOL  ; 


sbit io = P1^1 ;//(口线定义)

sbit bee=P1^0;

sbit rs = P2^5 ; 

sbit rw = P2^6 ;

sbit ep = P2^7 ;

bit flag_300ms ;


sbit K1=P1^2;

sbit K2=P1^3;

sbit K3=P1^4;


uchar yemian=0;//(定义变量)

uchar flat=1;

uchar data_byte;

uchar RH,RL,TH,TL;

uchar WenDu,ShiDu;//报警的温度和湿度

#include "eeprom52.h"



/****************************延时程序****************************/

void delay(uchar ms)

{       // 延时子程序

         uchar i ;

         while(ms--)

         {

                  for(i = 0 ; i<250;i++) ;

         }

}


void delay1()//延时10us

{

        uchar i;

        i--;

        i--;

        i--;

        i--;

        i--;

        i--;

}

void longdelay(uchar s) //长延时

{

         while(s--)

         {

                  delay(20) ;

         }

}




/******************把数据保存到单片机内部eeprom中******************/

void write_eeprom()

{

        SectorErase(0x2000);

        byte_write(0x2000, WenDu);

        byte_write(0x2001, ShiDu);

        byte_write(0x2060, a_a);        

}


/******************把数据从单片机内部eeprom中读出来*****************/

void read_eeprom()

{

        WenDu   = byte_read(0x2000);

  ShiDu = byte_read(0x2001);

        a_a      = byte_read(0x2060);

}


/**************开机自检eeprom初始化*****************/

void init_eeprom()

{

        read_eeprom();                //先读

        if(a_a != 2)                //新的单片机初始单片机内问eeprom

        {

        WenDu   = 30;

        ShiDu   = 80;

                a_a = 2;

                write_eeprom();

        }        

}




/********************报警程序部分*******************/

void warn()  //报警函数

{

        

  if(TH>=WenDu)  //检测的温度高于设定温度报警值

                                             

     { 

      bee=0; //报警

                        

     }      

                 

        if(RH>=ShiDu)  //检测的湿度高于设定的湿度值

                                             

     { 

      bee=0; //报警

     }      


                 

        if( TH

    {

                  bee=1; //停止报警

                }

                 

  

}


/************************LCD模块******************************************/


BOOL lcd_bz()//测试LCD忙碌状态

{      

         BOOL result ;

         rs = 0 ;

         rw = 1 ;

         ep = 1 ;

         result = (BOOL)(P0 & 0x80) ;

         ep = 0 ;

         return result ; 

}


void write_cmd(uchar cmd)// 写指令

{       

        while(lcd_bz()) ;

        rs = 0 ;

        rw = 0 ;

        ep = 0 ;

        P0 = cmd ;

        ep = 1 ;

        ep = 0 ;  

}


void write_addr(uchar addr)//写地址

{       

        write_cmd(addr|0x80) ;

}


void write_byte(uchar dat)//写字节

{      

        while(lcd_bz()) ;

          rs = 1 ;

          rw = 0 ;

          ep = 0 ;

          P0 = dat ;

          ep = 1 ;

          ep = 0 ; 

}


void lcd_init()// 初始化

{       

         write_cmd(0x38) ; 

         delay(1);

         write_cmd(0x08) ;  

         delay(1);

         write_cmd(0x01) ; 

         delay(1);

         write_cmd(0x06) ;

         delay(1);

         write_cmd(0x0c) ; 

         delay(1);

}


void display(uchar addr, uchar q)//在某一地址上显示一字节

{          

         delay(1) ;

         write_addr(addr) ;

   write_byte(q) ;

         delay(1) ;

         

}


/*********************** DHT11测试模块***************************************/


void start()//开始信号

{

        io=1;

        delay1();

        io=0;

        delay(20);//>18ms

        io=1;

        delay1();//20-40us

        delay1();

        delay1();

        delay1();

        delay1();

}

uchar receive_byte()//接收一个字节

{

        uchar i,temp,count;

        for(i=0;i<8;i++)

        {

        temp=0;

                delay1();delay1();delay1();delay1();

                if(io==1)temp=1;

                count=2;

                while((io)&&count++);

                if(count==1)break;

                data_byte<<=1;        

                data_byte|=temp;

        }

        return data_byte;

}

void receive()//接收数据

{

        uchar T_H,T_L,R_H,R_L,check,num_check;

        uchar count;

        start();//开始信号

        io=1;

        if(!io)//读取DHT11响应信号

        {

        

        while((io)&&count++);

        R_H=receive_byte();

        R_L=receive_byte();

        T_H=receive_byte();

        T_L=receive_byte();

        check=receive_byte();

        io=0;//拉低延时50us

        delay1();delay1();delay1();delay1();delay1();

        io=1;

        num_check=R_H+R_L+T_H+T_L;

        if(num_check=check)

        {

                RH=R_H;

                RL=R_L;

                TH=T_H;

                TL=T_L;

                check=num_check;

        }

        }

}



void showw()   // 问候语函数

{      

           lcd_init(); //初始化

            delay(10);

        

     display(0x05,'W');

     display(0x06,'e');

                 display(0x07,'l');

                 display(0x08,'c');

                 display(0x09,'o');

                 display(0x0a,'m');

     display(0x0b,'e');

           delay(250); //短暂延时

           delay(250);

           delay(250);

           


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

/*

           display(0x40,' ') ;

display(0x41,&#

[1] [2] [3] [4]
关键字:单片机  DHT11  温度湿度采集系统 编辑:什么鱼 引用地址:http://news.cn-jbh.com/mcu/ic485124.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。七派棋牌_[官网入口]如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:单片机贪吃蛇程序Lcd12864显示
下一篇:点亮第一个LED灯

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

基于51单片机的定时器程序设计
这个基于51单片机的定时器设计,使用共阴数码管显示,如果要换成共阳数码管只需要将程序内数组改为共阳数码管的数组,38译码器LSA,LSB,LSC分别接单片机的P2^2,P2^3,P2^4,蜂鸣器使用的是无源蜂鸣器,接单片机P1^5,三个低电平触发按键分别接的P3^1,P3^2,P3^3. sbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;sbit key0=P3^1;  //定义P31口是k0sbit key1=P3^0;  //定义P33口是k1sbit key2=P3^2;  //定义P33口是k2sbit beep=P1
发表于 2020-01-20
基于51单片机的定时器程序设计
基于热敏电阻的单片机温度测量系统设计
本课题用一种基于单片机的数据采集系统方案,该方案根据热敏电阻随温度变化而变化的特性,采用串联分压电路。单片机采集热敏电阻的电压,通过A/D转换将模拟量电压信号转换成数字量电压信号,经过查表转换得到温度值,控制液晶屏实时显示温度值。本系统中所用到的器件是STC89C52单片机、NTC热敏电阻和LCD1602液晶显示屏。原理图如下单片机源程序如下:#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit rs=P0^5;sbit rw=P0^6;sbit e=   
发表于 2020-01-20
基于热敏电阻的单片机温度测量系统设计
STC89C52RC单片机+串口+红外控制16路舵机程序
只有控制16路舵机的程序,现在发上来提供参考舵机可以通过串口控制,也可以用红外控制单片机源程序如下:#include "PCA9685_TJ.h"#include <stdio.h>#include <math.h>/*使用说明:        在main主程序                PCA9685_init();        在main主程序的while加入       
发表于 2020-01-20
STC89C52RC单片机+串口+红外控制16路舵机程序
51单片机交通灯系统设计(流程框图+硬件+源码)
这是老师要求做的项目,现在已经做好了,没有什么大问题。一, 设计要求与方案论证1.1设计要求:1.1.1基本要求:1、东西方向、南北方向均有红、黄、绿三种信号灯,初始红灯30秒,黄灯闪烁3秒,绿灯30秒,东西方向红灯时刻,南北方向绿灯,南北方向绿灯,东西方向红灯;2、按键调节与控制功能,通过按键,可以控制某一个方向长时间绿灯,另一个方向长时间红灯;通过按键可以控制某一个方向的红灯时长,比如调整东西方向红灯40秒,绿灯20秒,于此同时,南北方向红灯20秒,绿灯40秒。3、夜间模式按钮按下,所有方向显示黄灯闪烁4、实时提醒灯亮的剩余时间1.1.2拓展部分:目前还没拓展1.2系统基本方案选择和论证:1.2.1单片机芯片的选择方案和论证
发表于 2020-01-20
51单片机交通灯系统设计(流程框图+硬件+源码)
基于单片机的天然气泄漏报警系统设计论文
人们开发和研究传感器的重要方向。七派棋牌_[官网入口]泄漏检测报警系统被广泛的应用于各个领域,如石油化工企业、石油运输管线、城市自来水地下管线、锅炉炉管、发动机箱体、缸盖等各种领域。泄漏检测技术在管道检测之中的应用得到了很好的发展。对于管道的泄漏检测要满足以下几个要求:1.准确可靠地判断泄漏的发生,并能够在较短的时间内判断出泄漏点具体的位置。七派棋牌_[官网入口]2.准确可靠地判断泄漏程度,能对较小量的泄漏做出判断。3.检测原理简单,易于操作和维护。七派棋牌_[官网入口]1基于单片机的天然气泄漏检测系统概述1.1天然气泄漏检测报警器的概述天然气泄漏检测报警器是燃气安全设备非常重要的一部分,它是由气敏传感器、单片机和报警器组成。它是安全使用城市燃气的最后一道保护设备。天然气泄漏检测报警器通过气敏传感器探测
发表于 2020-01-20
基于单片机的天然气泄漏报警系统设计论文
第一次偿试51单片机做个100分钟倒计时定时器
偿试着做了个100分钟倒计时定时器,原理图和代码都是东拼西凑来的(自己不会写啊),侵删制作出来的实物图如下: 电路原理图如下: 单片机源程序如下:#include <reg52.h>#include <intrins.H>#define uchar unsigned char#define uint  unsigned  int        uchar duan[16]={0xc0
发表于 2020-01-20
第一次偿试51单片机做个100分钟倒计时定时器
小广播
何立民专栏 单片机及嵌入式宝典

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

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

页面底部区域 foot.htm