一、温湿度模块传感器介绍

DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC 测温元件,并与一个高性能8位单片机相连接。


供电电压:3.3~5.5V 直流电
输出为单总线数字信号
温度测量范围0~50度(精度正负2度,分辨率1度)
湿度测量范围为20~90%RH(精度为正负5%,分辨率1%)

采用单总线双向串行通信协议,每次采集都要由单片机发起开始信号,然后DHT11会向单片机发送响应并开始传输40位数据帧,高位在前。

数据格式为:
第一二个字节: 8bit湿度整数数据+8bit湿度小数数据
第二三个字节: 8bit温度整数数据+8bit温度小数数据
第五个字节: 8bit校验位(它是前四个数据相加后八位的数值)
温湿度小数部分默认为0,即单片机采集的数据都是整数,校验位为4个字节的数据相加取结果的低8位数据作为校验和。

二、有关时序图

通讯过程:

总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必须大于18毫秒,保证DHT11能检测到起始信号。DHT11接收到主机的开始信号后, 等待主机开始信号结束,然后发送80us低电平响应信号.主机发送开始信号结束后,延时等待20-40us后, 读取DHT11的响应信号,主机发送开始信号后,可以切换到输入模式,或者输出高电平均可, 总线由上拉电阻拉高。

输出数字0信号

输出数字1信号

三、示例代码

将温湿度数据显示到LCD1602屏幕上并打印信息到串口:

DHT11.c

#include <REGX52.H>
#include "DHT11.h"sbit Temp_data = P1^0;
unsigned int rec_dat[4];unsigned char rec_dat_lcd0[6];
unsigned char rec_dat_lcd1[6];
unsigned char rec_dat_lcd2[6];
unsigned char rec_dat_lcd3[6];void DHT11_start()
{Temp_data=1;DHT11_delay_us(2);Temp_data=0;DHT11_delay_ms(20);   // 至少拉低18ms  Temp_data=1;DHT11_delay_us(13);
}// 接收一个字节
unsigned char DHT11_rec_byte()
{unsigned char i,dat;for(i=0;i<8;i++){while(!Temp_data);   // 等待低电平过去DHT11_delay_us(8);    // 延时8us若为高电平dat<<=1;if(Temp_data==1){dat+=1;}while(Temp_data);     // 等待拉低,准备下一位}return dat;
}void initUart()
{SCON = 0x40;REN = 1;TMOD = 0x20;TL1 = 0xFD;TH1 = 0xFD;TI = 1;       // 中断请求TR1 = 1; }// 接收温湿度数据
void DHT11_receive()
{unsigned int R_H,R_L,T_H,T_L;unsigned char RH,RL,TH,TL,revise;DHT11_start();Temp_data=1;if(Temp_data==0){while(Temp_data==0);      // 等待低电平过去DHT11_delay_us(40); // 拉高后延时R_H=DHT11_rec_byte();    // 湿度高八位R_L=DHT11_rec_byte();    // 湿度低八位T_H=DHT11_rec_byte();    // 温度高八位T_L=DHT11_rec_byte();    // 温度低八位revise=DHT11_rec_byte(); DHT11_delay_us(25);   if((R_H+R_L+T_H+T_L)==revise)      {RH=R_H;RL=R_L;TH=T_H;TL=T_L;} rec_dat[0]=RH;rec_dat[1]=RL;rec_dat[2]=TH;rec_dat[3]=TL;}}void DHT11_delay_us(unsigned char n)
{while(--n);
}void DHT11_delay_ms(unsigned int z)
{unsigned int i,j;for(i=z;i>0;i--)for(j=110;j>0;j--);
}

DHT11.h

#ifndef _DHT11_H_#define _DHT11_H_void DHT11_start();unsigned char DHT11_rec_byte();void DHT11_receive();void DHT11_delay_us(unsigned char n);void DHT11_delay_ms(unsigned int z);
#endif

LCD.c

#include <REGX52.H>
#include "LCD.h"
#include <intrins.h>sbit LCD_RS = P2^0;
sbit LCD_RW = P2^1;
sbit LCD_E = P2^2;#define LCD_data P0void Delay1ms()       //@11.0592MHz
{unsigned char i, j;_nop_();i = 2;j = 199;do{while (--j);} while (--i);
}void LCD_Command(unsigned char command)
{LCD_RS = 0;           LCD_RW = 0;        LCD_data = command;LCD_E = 1;         Delay1ms();LCD_E = 0;Delay1ms();
}void LCD_WriteData(unsigned char datas)
{LCD_RS = 1;           LCD_RW = 0;            LCD_data = datas;LCD_E = 1;           Delay1ms();LCD_E = 0;Delay1ms();
}void LCD_init()
{LCD_Command(0x38);   LCD_Command(0x0c);    LCD_Command(0x06);  LCD_Command(0x01);
}void setCursor(unsigned char row,unsigned char column)
{if(row == 1){LCD_Command(0x80|(column-1));   // ¹â±êµØÖ·}else{LCD_Command(0x80|((column-1)+0x40));}
}// 显示字符串
void LCD_show_string(unsigned char row,unsigned char column,unsigned char *string)
{   unsigned int i;setCursor(row,column);for(i=0;string[i]!='\0';i++){LCD_WriteData(string[i]);}
}

LCD.h

#ifndef _LCD_H_
#define _LCD_H_void Delay1ms();void LCD_Command(unsigned char command);void LCD_WriteData(unsigned char datas);void LCD_init();void setCursor(unsigned char row,unsigned char column);void LCD_show_char(unsigned char row,unsigned char column,unsigned char Char);void LCD_show_string(unsigned char row,unsigned char column,unsigned char *string);int pow(unsigned int x,unsigned int y);void LCD_show_num(unsigned char row,unsigned char column,unsigned int num,unsigned int length);
#endif

main.c

#include <REGX52.H>
#include "LCD.h"
#include "DHT11.h"
#include <stdio.h>extern unsigned int rec_dat[4];extern unsigned char rec_dat_lcd0[6];
extern unsigned char rec_dat_lcd1[6];
extern unsigned char rec_dat_lcd2[6];
extern unsigned char rec_dat_lcd3[6];void main()
{   LCD_init();LCD_show_string(1,1,"Humi:");LCD_show_string(2,1,"Temp:");while(1){TI = 0;initUart();DHT11_delay_ms(150);DHT11_receive();sprintf(rec_dat_lcd0,"%d",rec_dat[0]);sprintf(rec_dat_lcd1,"%d",rec_dat[1]);sprintf(rec_dat_lcd2,"%d",rec_dat[2]);sprintf(rec_dat_lcd3,"%d",rec_dat[3]);DHT11_delay_ms(100);LCD_show_string(1,6,rec_dat_lcd0);LCD_show_string(1,8,".");LCD_show_string(1,9,rec_dat_lcd1);LCD_show_string(1,11,"%");LCD_show_string(2,6,rec_dat_lcd2);LCD_show_string(2,8,".");LCD_show_string(2,9,rec_dat_lcd3);LCD_show_string(2,11,"C");}}

DHT11温湿度LCD显示相关推荐

  1. 4. 51 测量空气的温度和湿度(51单片机 + DHT11温湿度 + LCD1602显示)

    51单片机 + DHT11温湿度 + LCD1602显示 DHT11温湿度相关介绍 DHT11产品概述 测量范围 接口说明 电源引脚 串行接口 (单线双向) 相关时序及代码 用代码实现上述时序图(起始 ...

  2. 基于51单片机+DHT11温湿度+LCD1602显示

    DHT温湿度1602显示 DHT11温湿度相关介绍 DHT11产品概述 1.测量范围 2.接口说明 3.电源引脚 4.串行接口 (单线双向) 5.相关时序及代码 6. DHT11引脚说明 程序代码 m ...

  3. Arduino使用DHT11温湿度传感器获取环境温湿度

    通过本文,可以了解到以下内容: DHT11 温湿度传感器接线与使用 DHT11 Arduino 测试程序编写 DHT11 温湿度转换显示 DHT11 温湿度传感器接线与使用 DHT11 是一款温湿度传 ...

  4. 温湿度(DHT11)+雨滴检测——LCD显示(TFT液晶)

    温湿度(DHT11)+雨滴检测--LCD显示(TFT液晶) 效果展示: 一.硬件连接 二.代码 1.DHT11 2.雨滴传感器 3.LCD 4.main.c 三.完整工程 链接: 效果展示: 视频: ...

  5. 基于stm32的DHT11温湿度采集LCD显示Proteus仿真

    *本设计:* 基于stm32温湿度采集Proteus仿真(仿真+程序) 仿真图protues 8.9 程序编译器:keil 5 编程语言:C语言 *设计编号:C0041* *功能描述:* 通过STM3 ...

  6. vc 控制台添加托盘显示_开源:ESP8266读DHT11温湿度,小程序实时显示

    第一.原理讲解 原理简述:利用发布订阅模式.第一步,先读取DHT11温湿度数值,第二步,新建主题,然后esp8266往这个主题发送消息,第三步.小程序通过http API接口获取数据.小程序控制原理: ...

  7. STM32串口显示DHT11温湿度数据,YL-69土壤湿度

    用的控制器是STM32F103C8T6,如果你用STMF103的其他芯片来跑这个代码也能跑通,基本配置都是一样的. 先介绍DHT11温湿度数据的采集,有两个文件,一个DHT11.c,还有一个DHT11 ...

  8. Arduino+DHT11温湿度传感器+12864oled显示温湿度

            本文利用arduino uno时时读取DHT11温湿度传感器的温度和湿度值,并将读取到的数值显示在OLED12864上. 元器件: arduino板 OLED12864显示屏 DHT1 ...

  9. Domoticz加入dht11温湿度模块,显示室内温湿度

    Domoticz加入dht11温湿度模块 前言 刷ESPEasy固件 网页配置8266温湿度参数 Domoticz服务器设置参数 最后看看手机APP上的效果 前言 前几天在Domoticz服务器上添加 ...

最新文章

  1. Java通过几种经典的算法来实现数组排序
  2. python通过ip池爬_Python爬虫 | IP池的使用
  3. ORACLE IMP-00017: following statement failed with ORACLE error 6550
  4. 吉吉王国(二分+树形dp)
  5. android 休眠任务不执行_Springboot Scheduled任务为什么不执行?
  6. ExtJs 4.1.1 文件结构解析
  7. Java--Json解析
  8. C#两个窗体间的相互通信(转)
  9. react-router-dom文档
  10. C# Halcon 图像放大缩小代码
  11. tensorflowpython32_Python tensorflow.python.framework.dtypes 模块,float32() 实例源码 - 编程字典...
  12. igraph java_igraph从邻接列表生成邻接矩阵
  13. iphone来电铃声小 - MTK物联网在线解答 - 技术论坛
  14. 将dropbear SSH移植到arm9开发板
  15. 百度网盘取消自动续费(详细过程)
  16. 重启docker卡死问题解决systemctl start docker卡住不动
  17. PIC16F73-I/SO代理
  18. 什么是QC? QA和QC有什么区别?
  19. LORA SoC超低功耗收发芯片ASR6601 智慧农业方案
  20. Windows XP系统下添加任务计划常出现问题解决办法

热门文章

  1. 大数据正在改变我们的生活
  2. Shell脚本:循环for / while / until
  3. 电脑计算机无法运行怎么办,如果计算机在打开电源后仍无法运行,则该怎么办?计算机无法进入系统的原因[图形]...
  4. 客如云第二届开放平台大会 餐饮零售业新升级再赋能
  5. 经纬恒润天津研发总部项目开工奠基仪式圆满落幕
  6. matlab 判断数据类型函数,matlab 分类(判别)函数classify()
  7. 场效应管微变等效电路的计算_微变等效电路如图.ppt
  8. linux用户和用户配置文件(nobody)
  9. 如何实现FlowLayout的换行操作
  10. STM32H7系列其一