C51_DHT11温湿度传感器

文章目录

  • 一、DGT11
  • 二、DHT11使用
    • [   1、原理图](#   1、原理图)
    • [   2、数据传输](#   2、数据传输)
    • [   3、时序图](#   3、时序图)
  • 三、代码实例
    • [   1、DHT11.h](#   1、DHT11.h)
    • [   2、mian.c](#   2、mian.c)
    • [   3、实例](#   3、实例)

一、DGT11

DHT11 是一款湿温度一体化的数字传感器。

该传感器包括一个电阻式测湿元件和一个 NTC测温元件,并与一个高性能 8 位单片机相连接。

通过单片机等微处理器简单的电路连接就能够实时的采集本地湿度和温度。

DHT11 与单片机之间能采用简单的单总线进行通信,仅仅需要一个 I/O 口。

传感器内部湿度和温度数据 40Bit 的数据一次性传给单片机,数据采用校验和方式进行校验,有效的保证数据传输的准确性。

DHT11 功耗很低,5V 电源电压下,工作平均最大电流 0.5mA。

DHT11 的技术参数如下:

工作电压范围:3.3V -5.5V

工作电流 :平均 0.5mA

输出:单总线数字信号

测量范围:湿度 20~90%RH,温度 0~50℃

精度 :湿度±5%,温度±2℃

分辨率 :湿度 1%,温度 1℃

二、DHT11使用

1、原理图

DHT11有三条有效引脚:

DATA ------ P33

GND ------ 地

VCC ------ 5V

2、数据传输

C51发送序列指令给到DHT11模块,模块一次完整的数据传输为40bit,高位先出。

数据格式:

8bit湿度整数数据 + 8bit湿度小数数据 + 8bit温度整数数据 + 8bit温度小数数据 + 8bit校验和。

3、时序图

通讯过程

测试是否存在是否正常

时序图分析:

vcc刚开始处于 1 位 → vcc拉低至少18ms→vcc拉高20-40us→DHT响应信号,将高电平拉低持续80us(在40--80us之间读取:低电平------模块存在)→DHT拉高信号80us→DHT拉低信号开始传送数据。

三、代码实例

LCD1602显示温湿度传感器DTH11的温度与湿度。

1、DHT11.h

c 复制代码
		#define uchar unsigned char
		#define uint unsigned int
		
		sbit Data=P1^6;
		uchar rec_dat[9]; 
		void DHT11_delay_us(uchar n)
		{
		    while(--n);
		}
		void DHT11_delay_ms(uint z)
		{
		   uint i,j;
		   for(i=z;i>0;i--)
		      for(j=110;j>0;j--);
		}
		void DHT11_start()
		{
		   Data=1;
		   DHT11_delay_us(2);
		   Data=0;
		   DHT11_delay_ms(30);   
		   Data=1;
		   DHT11_delay_us(30);
		}
		uchar DHT11_rec_byte()      
		{
		   uchar i,dat=0;
		  for(i=0;i<8;i++)    
		   {          
		      while(!Data);   
		      DHT11_delay_us(8);    
		      dat<<=1;           
		      if(Data==1)    
		         dat+=1;
		      while(Data);     
		    }  
		    return dat;
		}
		void DHT11_receive()     
		{
		    uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise; 
		    DHT11_start();
		    if(Data==0)
		    {
		        while(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]='0'+(RH/10);
		        rec_dat[1]='0'+(RH%10);
		        rec_dat[2]=' ';
		        rec_dat[3]=' ';
		        
		        //温度
		        rec_dat[4]='0'+(TH/10);
		        rec_dat[5]='0'+(TH%10); 
		        rec_dat[6]=' ';
		    }
		}

2、mian.c

c 复制代码
		#include <reg52.h>
		#include "LCD1602.h"
		#include "DTH11.h"
		#include <intrins.h>
		
		#define uchar unsigned char
		#define uint unsigned int
		
		uchar wendu [4];
		uchar sidu [4];
		uchar i;
		int j;
		void main()
		{ 
		        LCD_Init();
		        LCD_ShowString(1, 1, "sidu:");
		        LCD_ShowString(2, 1, "wendu:");
		   while(1)
		   {   
		      DHT11_delay_ms(100);    
		      DHT11_receive();
		        for(i=0;i<7;i++) 
		        {
		         if(i<=2)
		         {
		                 sidu[i]= rec_dat[i]; //读取湿度
		         }
		         else
		         {
		                 wendu[i-4] = rec_dat[i];
		         }
		        }        
		         wendu[3] = '\0';sidu[2] = '\0';//字符串结尾
		         LCD_ShowString(1, 10,sidu);
		         LCD_ShowString(1, 13,"%");
		           LCD_ShowString(2, 10,wendu);
		                 LCD_ShowString(2, 12," C");
		   }
		}

3、实例

相关推荐
mastercoder--18 小时前
速通51单片机————按键控制LED流水灯与定时器闹钟
单片机·嵌入式硬件·51单片机
创界工坊工作室1 天前
DPJ-148 基于Arduino六自由度机械手设计(源代码+proteus仿真)
stm32·单片机·嵌入式硬件·51单片机·proteus
mastercoder--2 天前
速通51单片机————矩阵键盘及其应用
嵌入式硬件·计算机外设·51单片机
普中科技2 天前
【普中51单片机开发攻略--基于普中-2&普中-3&普中-4】-- 第 14 章 矩阵按键实验
单片机·嵌入式硬件·51单片机·开发板·按键检测·矩阵按键·普中科技
搞机械的假程序猿2 天前
普中51单片机学习笔记-LCD1602液晶显示
笔记·学习·51单片机
Q_21932764552 天前
基于51单片机的智能家居防火防盗报警系统设计
嵌入式硬件·51单片机·智能家居
恶魔泡泡糖3 天前
51单片机动态数码管应用2
单片机·嵌入式硬件·51单片机
mastercoder--3 天前
速通51单片机————数码管显示与模块化编程
单片机·嵌入式硬件·51单片机
v先v关v住v获v取4 天前
番茄收获机切割与分离装置结构设计cad5张 +三维图+设计说明书
科技·单片机·51单片机
电子工程师-C514 天前
基于51单片机的交通灯远程控制系统
单片机·嵌入式硬件·51单片机