一.DHT11介绍

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

二.编程分析

DHT11是通过单总线与单片机进行通信的,这样做的好处就是占用资源少,编程实现简单,发送数据的具体格式为 8bit 湿度整数数据+8bit 湿度小数数据+8bi 温度整数数据+8bit 温度小数数据+8bit校验和。主机先要给DHT11发送一个启动新号,等待DHT11做出响应,然后再进行检测温湿度的发送及传输,下面通过一张图来了解一下DHT11的传输过程。

从图上我们可以看出,主机要先把应答线拉低,因为空闲的时候是高状态,然后再次拉高,等待DHT11的响应,也就是等待数据线被拉低,当DHT11准备输出数据时,再把数据线拉低,输出数据给单片机,单片机可以根据高电平时间的长短来判别输出的数据是0还是1,最后在进行校验位的检查,从而成传输。

三.程序

下面给出DHT11读数据的程序

uchar DhtReadByte(void)

{

bit bit_i;

uchar j;

uchar dat=0;

for(j=0;j<8;j++)

{

while(!TRH);   // 等待低电平结束

Delay5us();    // 延时   Delay5us();

Delay5us();   Delay5us();    // 延时

Delay5us();   Delay5us();

if(TRH)     // 检测数据线是高电平还是低电平

{    bit_i=1;    while(TRH);   }

else   {    bit_i=0;   }

dat<<=1;       // 将该位移位保存到dat变量中

dat|=bit_i;     }

return(dat);  }

/**************  函数:void ReadTrh(void)  ---------------------------    说明:将读取到的温湿度通过串口发送出去    参数:  返回值:读取到的字节内容 ***********/

void ReadTrh(void)

{     uchar check;    // 校验字节

uchar TemHig,TemLow,HumiHig,HumiLow;

TRH=0;      // 主机拉低18ms  DelayMs(18);

TRH=1;      // DATA总线由上拉电阻拉高 主机延时20us

Delay5us();    Delay5us();  Delay5us();  Delay5us();     // 主机设为输入 判断从机响应信号

while(!TRH);    // 等待DHT 80us的低电平结束

while(TRH);     // 等待DHT 80us的高电平结束

HumiHig = DhtReadByte(); // 湿度高8位

HumiLow = DhtReadByte();  // 湿度低8为,总为0

TemHig  = DhtReadByte(); // 温度高8位

TemLow  = DhtReadByte();  // 温度低8为,总为0

check   = DhtReadByte(); // 8位校验码,其值等于读出的四个字节相加之和的低8位  TRH=1;    // 释放总线

if(check==HumiHig + HumiLow + TemHig + TemLow)    // 如果收到的数据无误

{   Send(TemHig);   Send(HumiHig);  } }

四.总结

上述程序是从DHT11温湿度传感器读出数并发送给串口值的程序,要学这一类传感器的程序,大家要记得,学会看懂时序图,会用就可以了,需要DHT11的pdf的小伙伴,请留下联系方式或私聊我0.0

最新文章

  1. oracle应用启动时常会报未知服务名
  2. Linux命令详解之–cd命令
  3. java基础之数据类型转换
  4. ECSHOP 订单状态 记录
  5. PHP漏洞全解(五)-SQL注入攻击
  6. JS之路——Math数学对象
  7. POJ2431 Expedition(排序+优先队列)
  8. 总结:spring 的ioc 知识点
  9. 删除MySQL二进制日志
  10. Codeforces Gym 100269E Energy Tycoon 贪心
  11. 【基础】26个命令玩转linux,菜鸟及面试必备
  12. 借腾讯开源 VasDolly,谈谈 Android 签名和多渠道打包的原理!
  13. Linux操作系统log日志日志分别指什么
  14. [面试]中高级测试工程师必备,月薪15K+
  15. Cinder模块学习
  16. UTF8编码的Base64解密 MSSQL实现
  17. PostMan 使用Interceptor 发送带cookie的请求一直loading
  18. Nginx安装配置详解
  19. UVA-11865 Stream My Contest (朱-刘 算法+二分)
  20. Unity内存优化技术测试案例

热门文章

  1. canvas简单处理图片(反色处理)
  2. [转载]Difference between &lt;context:annotation-config&gt; vs &lt;context:component-scan&gt;
  3. SqlServer触发器判断对表操作类型(增、删、改)并将修改后的数据映射到新表
  4. [原创]如何在Parcelable中使用泛型
  5. trunk 的坑
  6. Java语言程序设计(基础篇) 第四章 数学函数、字符和字符串
  7. kafka集群搭建和使用Java写kafka生产者消费者
  8. 实现一个小目标,动动小指,分享可得iphone7/ipad/U盘|奥威软件
  9. 使用T4模板生成代码的学习
  10. 基于Java Mina 通信框架的JT/T809转发服务器设计