【单片机】DHT11模块温湿度检测

一、心得概述

不知不觉断断续续学习51单片机3个月了,这次在了解学习了DHT11模块后,决定做一个用DHT11模块检测温湿度的系统出来练手,编写代码在开发板上测试成功之后,在万能板上做出了实物。

项目细节描述: 

使用9v电池+AMS1117-5v降压模块供电,另外预留了micro usb接口可接线供电。

使用LCD1602显示屏显示测量数据。

使用DHT11模块检测温湿度。

使用STC89C52芯片。

二、主要模块资料

DHT11使用单总线双向通信,时序图如下:

【单片机】DHT11模块温湿度检测_第1张图片

【单片机】DHT11模块温湿度检测_第2张图片

三、核心程序

1.DHT11的驱动程序

(1).dht.h

#ifndef __DHT11_H__
#define __DHT11_H__

/*
**********************************************************************
*                         头文件包含
**********************************************************************
*/
#include "common.h"

/*
**********************************************************************
*                         本地宏定义
**********************************************************************
*/

/*
**********************************************************************
*                         外部函数原型声明
**********************************************************************
*/
void read_DHT11(u16 *temp,u16 *humi);

#endif

(2).dht.c

/*
**********************************************************************
*                         头文件包含
**********************************************************************
*/
#include "dht11.h"

/*
**********************************************************************
*                         本地全局变量
**********************************************************************
*/
sbit da = P2^0;
u16 number = 50000;

/*
**********************************************************************
*                         内部函数原型声明
**********************************************************************
*/
void read_DHT11(u16 *temp,u16 *humi);

/*
**********************************************************************
*                             工具函数
**********************************************************************
*/
void delay19ms(void)   //误差 0us
{
    unsigned char a,b;
    for(b=157;b>0;b--)
        for(a=59;a>0;a--);
}
void delay10us(void)   //误差 0us
{
    unsigned char a,b;
    for(b=1;b>0;b--)
        for(a=2;a>0;a--);
}

/*********************************************************************
* 函 数 名       : read_DHT11
* 函数功能         : 激活并读取湿度温度测量模块的数据
* 参数列表       : 无
* 函数输出         : 无
*********************************************************************/
void read_DHT11(u16 *temp,u16 *humi)
{
    u16 cp=0;
    u16 i=0;
    u16 j=0;
    u16 dat[5] = {0x00,0x00,0x00,0x00,0x00};
    da = 0;
    delay19ms();
    da = 1;
    delay10us();
    delay10us();
    delay10us();
    if(da!=0) return;
    cp = 0;
    while(da==0&&cp++     //if(cp>=number)return;
    da = 1;
    while(da==1&&cp++     //if(cp>=number)return;
    for(i=0;i<5;i++)
    {
        for(j=0;j<8;j++)
        {
            cp = 0;
            dat[i]=dat[i]<<1;
            while(da==0&&cp++             //if(cp>=number)return;
            delay10us();
            delay10us();
            delay10us();
            if(da==1)
            {
                dat[i] = dat[i]|0x01;
                cp = 0;
                while(da==1&&cp++                 //if(cp>=number)return;
            }
        }
    }
    if(dat[4]!=(dat[0]+dat[1]+dat[2]+dat[3]))return;
    *humi = dat[0];
    *temp = dat[2];
}

四、成果实物图

【单片机】DHT11模块温湿度检测_第3张图片

【单片机】DHT11模块温湿度检测_第4张图片

【单片机】DHT11模块温湿度检测_第5张图片

你可能感兴趣的:(51单片机项目,单片机)