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、实例

相关推荐
就是蠢啊4 小时前
51单片机——DS1302 时钟芯片(一)
单片机·嵌入式硬件·51单片机
就是蠢啊21 小时前
51单片机——DS18B02(三)
单片机·嵌入式硬件·51单片机
普中科技1 天前
【普中51单片机开发攻略--基于普中-2&普中-3&普中-4】-- 第 9 章 点亮第一个 LED
单片机·嵌入式硬件·51单片机·led·gpio·普中科技
llilian_161 天前
微型低功耗原子钟筑牢多行业时频基准 低功耗原子钟
人工智能·单片机·嵌入式硬件·网络协议·其他·51单片机
BT-BOX1 天前
【普中】基于51单片机模拟风扇控制数码管显示设计
单片机·嵌入式硬件·51单片机
搞机械的假程序猿2 天前
普中51单片机学习笔记-DS18B20温度传感器
笔记·学习·51单片机
电子工程师-C512 天前
基于51单片机的DHT22温湿度检测及串口传输系统
单片机·嵌入式硬件·51单片机
逐步前行3 天前
C51_矩阵按键
51单片机
电子工程师-C513 天前
基于51单片机的鱼缸环境检测及控制系统
单片机·嵌入式硬件·51单片机