概述
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,应用领域:暖通 空调;汽车;消费品;气象站;湿度调节器;除湿器;家电;医疗;自动控制
产品特点
相对湿度和温度测量 全部校准,数字输出 长期稳定性 超长的信号传输距离:20米 超低能耗:休眠 4 引脚安装:可以买封装好的 完全互换 : 直接出结果,不用转化
接线
数据传送
1.逻辑
只有一根数据线DATA,单片机发送序列指令给DHT11模块,模块一次完整的数据传输为40bit,高位先 出
2.数据格式
8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验和
时序图
3.通讯过程时序图
4.做通信初始化,并检测模块是否存在时序图
时序逻辑分析 a : dht = 1 b :dht = 0 延时30ms c: dht = 1 之后卡点while(dht);(被模块拉低),说明模块存在!(卡点的方法)
代码实现- 检测模块是否接在设备上
void DHT11_Start()
{
dht = 1;
dht = 0;
//延时30ms
Delay30ms();
dht = 1;
//卡d点;while(dht1); 卡e点 while(!dht) 卡f点:while(dht)
while(dht);
while(!dht);
while(dht);
}
//检测模块是否接在设备上
#include "reg52.h"
#include "intrins.h"
sbit ledOne = P3 ^ 7;
sbit dht = P3 ^ 3; //模块的data插在p3.3
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 Delay1000ms() //@11.0592MHz
{
unsigned char i,
j,
k;
_nop_();
i = 8;
j = 1;
k = 243;
do {
do {
while (--k);
} while (-- j );
} while (-- i );
}
void check_DHT() {
//a : dht = 1
dht = 1;
//b :dht = 0
dht = 0;
//延时30ms
Delay30ms();
//c: dht = 1
dht = 1;
//在60us后读d点,如果d点是低电平(被模块拉低),说明模块存在!
while(dht);
ledOne = 0; //亮灯,说明模块存在
}
void main() {
ledOne = 1;
Delay1000ms();
Delay1000ms();
check_DHT();
while (1);
}
a : dht = 1 b :dht = 0 延时30ms c: dht = 1 卡d点;while(dht1); 卡e点 while(!dht) 卡f点:while(dht) 卡g点:while(!dht) 有效数据都是高电 平,持续时间不一样,50us读,低电平0 高电平
DHT11传输0的时序分析
DHT11传输1的时序分析
5.代码实现-读取数据函数
void Read_Data_From_DHT() {
int i; //轮
int j; //每一轮读多少次
char tmp;
char flag;
DHT11_Start();
for (i = 0; i < 5; i++) {
//卡g点:while(!dht) 有效数据都是高电平,持续时间不一样,50us读,低电平0 高
电平
for (j = 0; j < 8; j++) {
while (!dht); //等待卡g点
Delay40us();
if (dht == 1) {
flag = 1;
while (dht);
} else {
flag = 0;
}
tmp = tmp << 1;
tmp |= flag;
}
datas[i] = tmp;
}
}