视频讲解
简介
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,使其成为该类应用中,在苛刻应用场合的最佳选择。产品为4针单排引脚封装,连接方便。
DHT11是一款有已校准数字信号输出的温湿度传感器
供电电压3.3~5.5V DC输 出单总线数字信号测量范围湿度5~95%RH, 温度-20~+60℃
分 辨 率湿度1%RH, 温度0.1℃
软件流程图
程序分析
dht11.c
/**********************************
作者:特纳斯电子
网站:https://www.mcude.com
联系方式:46580829(QQ)
淘宝店铺:特纳斯电子
**********************************/
/**********************************
包含头文件
**********************************/
#include "dht11.h"
/****
*******DHT11延时函数
*****/
void delay_dht11(uint i)
{
while(i--);
}
/****
*******DHT11延时1ms函数
*****/
void delay_ms_dht11(uint i)
{
while(i--)
delay_dht11(90);
}
/****
*******从DHT11读取一个字节函数
*******返回值:读到的数据
*****/
uchar DHT11_Read_Byte(void)
{
uchar i,retry,dat=0;
for (i=0;i<8;i++)
{
dat<<=1;
while(DHT11_DQ_OUT == 0);//等待50us低电平过去
delay_dht11(3); //延时30us
if(DHT11_DQ_OUT)
dat |= 0x01;
retry=0;
while(DHT11_DQ_OUT&&retry<100)//等待变为低电平 12-14us 开始
{
retry++;
_nop_();
}
}
return dat;
}
/****
*******从DHT11读取一次数据函数
*******参量定义: temp:温度值(范围:0~50°)
******* humi:湿度值(范围:20%~95%)
*******返回值:0:正常; 1:读取失败
*****/
uchar Dht11_Get_Temp_Humi_Value(uint *temp,uint *humi)
{
uchar buf[5];
uchar i;
DHT11_DQ_OUT=0; //拉低DQ
delay_ms_dht11(21); //拉低至少18ms
DHT11_DQ_OUT=1; //DQ=1
delay_dht11(4);
if(DHT11_DQ_OUT == 0)
{
while(DHT11_DQ_OUT == 0); //等待80us的低电平过去
while(DHT11_DQ_OUT == 1); //等待80us的高电平过去
for(i=0;i<5;i++) //读取40位数据
{
buf[i]=DHT11_Read_Byte();
}
if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])//校验和
{
*humi=buf[0]*10+buf[1];
*temp=buf[2]*10+buf[3];
}
else
return 1;
}
else
return 1;
return 0;
}
dht11.h
/**********************************
作者:特纳斯电子
网站:https://www.mcude.com
联系方式:46580829(QQ)
淘宝店铺:特纳斯电子
**********************************/
#ifndef _DHT11_H_
#define _DHT11_H_
/**********************************
包含头文件
**********************************/
#include "main.h"
/**********************************
PIN口定义
**********************************/
sbit DHT11_DQ_OUT=P2^0; //DQ数据引脚P1.3
/**********************************
函数声明
**********************************/
uchar Dht11_Get_Temp_Humi_Value(uint *temp,uint *humi); //从DHT11读取一次数据函数
#endif