DHT11温湿度传感器数据读取程序及解析

本篇博客提供了一段用于读取DHT11温湿度传感器数值的代码,并对其进行详细解析,方便开发者理解和使用。

#include 'dht11.h'

void delay_dht11(uint i)
{
	while(i--);
}

void delay_ms_dht11(uint i)
{
	while(i--)
		delay_dht11(90);
}

void DHT11_Rst(void)	   
{
	DHT11_DQ_OUT=0; 								// 拉低DQ
	delay_ms_dht11(20);    							// 拉低至少18ms
	DHT11_DQ_OUT=1; 								// DQ=1 
	delay_dht11(3);     							// 等待20~40us
}

uchar DHT11_Check(void)	   
{   
	uchar retry=0;	 
  while(DHT11_DQ_OUT&&retry<100)					//DHT11会拉低40~80us
	{
		retry++;
		_nop_();
	}
	if(retry>=100)
		return 1;
	else
		retry=0;
  while(!DHT11_DQ_OUT&&retry<100)					//DHT11拉低后会再次拉高40~80us
	{
		retry++;
		_nop_();
	}
	if(retry>=100)
		return 1;

	return 0;
}

uchar DHT11_Init(void)
{
	DHT11_Rst();	  
	return DHT11_Check();	
}

uchar DHT11_Read_Bit(void)				 
{
 	uchar retry=0;
	while(DHT11_DQ_OUT&&retry<100)					//等待变为低电平 12-14us 开始
	{
		retry++;
		_nop_();
	}
	retry=0;
	while((!DHT11_DQ_OUT)&&retry<100)				//等待变为高电平	 26-28us表示0,70us表示1
	{
		retry++;
		_nop_();
	}
	delay_dht11(1);//等待40us
	if(DHT11_DQ_OUT)
		return 1;
	else
		return 0;		   
}

uchar DHT11_Read_Byte(void)    
{        
  uchar i,dat=0;
	for (i=0;i<8;i++) 
	{
		dat<<=1; 
		dat|=DHT11_Read_Bit();
	}					    
	return dat;
}

void Dht11_Get_Temp_Humi_Value(uint *temp,uint *humi)
{        
 	uchar buf[5];
	uchar i;
	
	EA = 0;
	DHT11_Rst();
	if(DHT11_Check()==0)
	{
		for(i=0;i<5;i++)									//获取40位数据
		{
			buf[i]=DHT11_Read_Byte();
		}
		if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
		{
			*humi=buf[0];
			*temp=buf[2];
		}
	}
	EA = 1;  
}

函数说明:

  1. delay_dht11():这是一个简单的延时函数,用于控制时间间隔。
  2. delay_ms_dht11():这个延时函数基于delay_dht11(),用于延时指定的毫秒数。
  3. DHT11_Rst():该函数用于复位DHT11传感器,通过控制引脚的电平变化来完成。
  4. DHT11_Check():这个函数用于检测DHT11传感器的响应,判断传感器是否正常工作。
  5. DHT11_Init():该函数用于初始化DHT11传感器,包括复位和检测操作。
  6. DHT11_Read_Bit():该函数用于读取DHT11传感器发送的一位数据。
  7. DHT11_Read_Byte():该函数用于读取DHT11传感器发送的一个字节数据。
  8. Dht11_Get_Temp_Humi_Value(): 这是最终的读取函数,用于获取DHT11传感器的温度和湿度数值。

总结

这段代码通过控制DHT11传感器的引脚电平变化和延时操作,实现了对传感器数据的读取和解析。开发者可以根据自己的需要修改和使用这段代码。

DHT11温湿度传感器数据读取程序及解析

原文地址: https://www.cveoy.top/t/topic/dfGW 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录