原创
已于 2024-09-23 09:40:07 修改
·
2.5k 阅读

·


2

·


33

·

CC 4.0 BY-SA版权

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

使用51单片机 驱动DHT22温湿度模块 串口显示温湿度

文章标签:

#DHT22

于 2023-02-20 14:31:34 首次发布

该文介绍了如何使用STC89C52RC微控制器通过串口与DHT22温湿度传感器进行通信。文中提供了接线方法、代码段,包括引脚定义、通信协议的时序对用代码,以及数据接收和校验的过程。实验中注意电源极性避免损坏设备,并建议在连接后进行复位操作。

一、基本参数

二、接线

DHT22温湿度模块 STC89C52RC
VCC 5V
GND GND
SDA 串行数据,双向口

三、部分代码

引脚定义

sbit DHT22_DAT=P1^0;
javascript

通信协议

时序对用代码

void DHT22_T_RH(void)
{
	  //主机拉低18ms 
     DHT22_DAT=0;
	   DelayMs(18);
	   DHT22_DAT=1;
	 //总线由上拉电阻拉高 主机延时20us
	   Delay_10us();
	   Delay_10us();
     Delay_10us();
	   Delay_10us();	    
	 //主机设为输入 判断从机响应信号 
	   DHT22_DAT=1;
	 //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行	  
	   if(!DHT22_DAT)		 //T !	  
	   {
				 Flag=2;
			 //判断从机是否发出 80us 的低电平响应信号是否结束	 
				 while((!DHT22_DAT)&&Flag++);
				 Flag=2;
			 //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
				 while((DHT22_DAT)&&Flag++);
			 //数据接收状态		 
				 DHT22_COM();
				 RH_data_H_temp=comdata;
				 DHT22_COM();
				 RH_data_L_temp=comdata;
				 DHT22_COM();
				 T_data_H_temp=comdata;
				 DHT22_COM();
				 T_data_L_temp=comdata;
				 DHT22_COM();
				 checkdata_temp=comdata;
				 DHT22_DAT=1;
			 //数据校验 
			 
				 temp=(T_data_H_temp+T_data_L_temp+RH_data_H_temp+RH_data_L_temp);
				 if(temp==checkdata_temp)
				 {
							RH_data_H=RH_data_H_temp;
							RH_data_L=RH_data_L_temp;
							T_data_H=T_data_H_temp;
							T_data_L=T_data_L_temp;
							U8checkdata=checkdata_temp;
							R_Date=RH_data_H_temp*256+RH_data_L_temp; 
							T_Date=T_data_H_temp*256+T_data_L_temp; 
				 }
	   }

	}
javascript

四、实验现象

五、注意事项

1、VCC GND切勿接反 接反易烧
2、不断电接上模块后建议按键复位下