DHT11温湿度传感器模块(51系列单片机驱动)

DHT11模块简介

►相对湿度和温度测量
►全部校准,数字输出
►卓越的长期稳定性
►无需额外部件
►超长的信号传输距离
►超低能耗
►3引脚安装
►完全互换
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。产品为 3针单排引脚封装。连接方便,特殊封装形式可根据用户需求而提供。
在这里插入图片描述

接线

使用了STC12C5A60S2单片机作为MCU,接线引脚为P3.6,程序可直接移植到STV89C52/51单片机
在这里插入图片描述

代码

DHT11.C文件

#include"MAIN.h" 
#include"DHT11.h"

uint8_t    DHT11_Temp = 0;          // 温度
uint8_t    DHT11_Humi = 0;          // 湿度
/*
 * 作者:PrairieOne
 * csdn:PrairieOne
 * 邮箱:prairieone1024@163.com
 * 嵌入式技术交流群:738655377
 */
sbit DHT11_PINS = P3^6;

//==================================================================================================
// DHT11 初始化 
//==================================================================================================
void DHT11_Init(void)
{
    DHT11_Temp = 0;
    DHT11_Humi = 0;    
}

//==================================================================================================
// DHT11 读取1个字节   
//==================================================================================================
uint8_t DHT11_ReadByte(void)
{    
	uint8_t i; 
	uint8_t Response;  
	uint8_t Return = 0; 
    
	for(i=0; i<8; i++)    
	{
		Return = Return<<1;
        
        Response = 1;	
		while((DHT11_PINS != 1) && (Response++));

		DELAY_nUS(28);      // 延迟时间有可能需要调整
        
		if(DHT11_PINS == 1)           
		{
            Return = Return | 0x01;
            
            Response = 1;
		    while((DHT11_PINS == 1) && (Response++)); 
		} 
		else
		{
            Return = Return | 0x00;
		}
	}
	return(Return);  
}

//==================================================================================================
// 采集 温度湿度     
//==================================================================================================
void DHT11_GetValue(void)
{
	uint8_t Response;
    
	uint8_t Humi_H;	 
	uint8_t Humi_L; 
	uint8_t Temp_H; 
	uint8_t Temp_L;  	 
	uint8_t Data_Check;         
    
	DHT11_PINS = 0;               
	DELAY_nMS(20);			  
	DHT11_PINS = 1;                  
	DELAY_nUS(20);			          
	if(!DHT11_PINS)	                           
	{
		Response = 1;                          
		while((DHT11_PINS != 1) && Response++); 
		Response = 1;                        
		while((DHT11_PINS == 1) && Response++);
          
		Humi_H = DHT11_ReadByte();              // 第1次读取湿度的高8位字节
		Humi_L = DHT11_ReadByte();              // 第2次读取湿度的低8位字节 默认为0x00
		Temp_H = DHT11_ReadByte();              // 第3次读取温度的高8位字节 
		Temp_L = DHT11_ReadByte();              // 第4次读取温度的低8位字节 默认为0x00 
		Data_Check = DHT11_ReadByte();          // 第5次读取数据校验字节
        
	    DHT11_PINS = 1;                         // 输出高电平 
                   
		if((Humi_L + Humi_H+Temp_H +Temp_L) == Data_Check)// 数据校验操作
		{
            DHT11_Humi = Humi_H;
			DHT11_Temp = Temp_H;
		}
	}
}

DHT11.H文件

#ifndef __DHT11_H__
#define __DHT11_H__

extern uint8_t DHT11_Temp;  // 温度
extern uint8_t DHT11_Humi;  // 湿度

void DHT11_Init(void);
void DHT11_GetValue(void);

#endif 

遇事不决,可问春风

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐