目录
一、产品概述
DHT11温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,应用领域:暖通空调、汽车、消费品、气象站、温度调节器、除湿器、家电、医疗、自动控制等
1、接线方式
VCC:接供电的正极
GND:接地
DAT:接数据
2、特点
相对湿度和温度的测量
全部校准、数字输出
长期稳定性
超长的信号传输距离:20米
4引脚安装:可以买封装好的
完全互换:直接出结果,不用转化
3、数据传送逻辑
只有一根数据线DATA,上官一号发送序列指令给DHT11模块,模块一次完整的数据传输为40bit高位先出
40bit的数据格式
8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验合
二、发送时序检测模块是否存在
时序逻辑分析
对于主机来说:发送时序的开始在a点,结束在d点
1、C51单片机(主机)时序分析
a:dht=1;
b:dht=0;
b、c之间延时30ms;
c:dht=1;
开始读DHT模块有无信号,在40-100μs之间读,比如在60μs的时候读,如果在60μs的时候是低电平,说明模块存在
那怎么看模块是否有回应呢,请看上图中的de段,C51单片机发送完时序信号是处于高电平的状态,当DHT这边有信号过来时,会把信号从高电平状态拉到低电平状态,所以当de=0时,说明DHT模块有数据显示了
那对于单片机来说怎么获取到这个低电平状态呢,那就得去读取de段的数据了,读上面的引脚是否为低电平
从c点到e点共有两种情况:
第一种:cd之间的延时最短时间是20μs,de之间的延时时间是80μs,那么从c点到e点,所需要的延时时间就是20-100μs
第二种:cd之间的延时最长时间是40μs,de之间的延时时间是80μs,那么从c点到e点,所需要的延时时间就是40-120μs
综上述情况, 我们要读取它们重合的时间,才能把以上两点都包括在内,重合的时间是40-100μs
2、编写代码检测模块是否存在
#include "reg52.h"
#include "intrins.h"
sbit dht = P3^3;
sbit ledOne = P3^7;
void Delay1000ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
i = 8;
j = 1;
k = 243;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Delay30ms() //@11.0592MHz
{
unsigned char i, j;
i = 54;
j = 199;
do
{
while (--j);
} while (--i);
}
void Delay60us() //@11.0592MHz
{
unsigned char i;
i = 25;
while (--i);
}
void check_DHT(){
//a:dht=1;
dht = 1;
//b:dht=0;
dht = 0;
//b、c之间延时30ms;
Delay30ms();
//c:dht=1;
dht = 1;
//开始读DHT模块有无信号,在40-100μs之间读,比如在60μs的时候读,如果在60μs的时候是低电平,说明模块存在
Delay60us();
if(dht == 0){
ledOne = 0; //亮灯,说明DHT模块存在
}
}
void main()
{
ledOne = 1; //灭灯
Delay1000ms(); //上电后稳定DHT11的供电
Delay1000ms();
check_DHT(); //看模块是否存在
while(1);