产品概述
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,应用领域:暖通
空调;汽车;消费品;气象站;湿度调节器;除湿器;家电;医疗;自动控制
特点
- 相对湿度和温度测量
- 全部校准,数字输出
- 长期稳定性
- 超长的信号传输距离:20米
- 超低能耗:休眠
- 4 引脚安装:可以买封装好的
- 完全互换:直接出结果,不用转化
加粗样式
只有一根数据线DATA,单片机发送序列指令给DHT11模块,模块一次完整的数据传输为40bit,高位先出
通讯过程时序图
检测模块是否存在
根据如下时序图,做通信初始化,并检测模块是否存在,功能是否正常
时序逻辑分析
a : dht = 1
b :dht = 0
延时30ms
c: dht = 1
在60us后读d点,如果d点是低电平(被模块拉低),说明模块存在!
代码实现
#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_DTH()
{
// 时序逻辑分析
// a : dht = 1
dht = 1;
// b :dht = 0
dht = 0;
// 延时30ms
Delay30ms();
// c: dht = 1
dht = 1;
// 在60us后读d点,如果d点是低电平(被模块拉低),说明模块存在!
Delay60us();
if(dht == 0){
ledOne = 0; // 亮灯,说明模块存在
}
}
void main()
{
Delay1000ms();
Delay1000ms();
ledOne = 1;
check_DTH();
while(1);
}