DHT22数字温湿度传感器AM2302温湿度模块(带说明)

上传人:人*** 文档编号:487627333 上传时间:2023-06-15 格式:DOC 页数:11 大小:363KB
返回 下载 相关 举报
DHT22数字温湿度传感器AM2302温湿度模块(带说明)_第1页
第1页 / 共11页
DHT22数字温湿度传感器AM2302温湿度模块(带说明)_第2页
第2页 / 共11页
DHT22数字温湿度传感器AM2302温湿度模块(带说明)_第3页
第3页 / 共11页
DHT22数字温湿度传感器AM2302温湿度模块(带说明)_第4页
第4页 / 共11页
DHT22数字温湿度传感器AM2302温湿度模块(带说明)_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《DHT22数字温湿度传感器AM2302温湿度模块(带说明)》由会员分享,可在线阅读,更多相关《DHT22数字温湿度传感器AM2302温湿度模块(带说明)(11页珍藏版)》请在金锄头文库上搜索。

1、 AM2302温湿度传感器C程序(测试可以用)2017-8-13说明:DHT22与DHT11程序基本一样,DHT11起始信号拉低18ms,DHT22起始信号拉低是800us,用户主机(MCU)发送一次起始信号(把数据总线SDA拉低至少800s)后,AM2302从休眠模式转换到高速模式。待主机开始信号结束后,AM2302发送响应信号,从数据总线SDA串行送出40Bit的数据,先发送字节的高位;发送的数据依次为湿度高位、湿度低位、温度高位、温度低位、校验位,发送数据结束触发一次信息采集,采集结束传感器自动转入休眠模式,直到下一次通信来临。注意事项:与DHT11一样,一次采集8个位数据,循环4次采集

2、完成所有数据,40位采集完成后,校验数据,如果数据正确,将高8位左移8位与低8位相或,再保存到一个16位变量中,就可以得到一个整数值。默认采集的数据是实际值的10倍,例如当前实际温度是32.7度,采集到的数据是327,目的是为了编程时方便分离数据。(详细见后面说明书)0000 0010 1000 1100 0000 0001 0101 11111110 1110 湿度数据 温度数据 校验和 湿度高8位+湿度低8位+温度高8位+温度低8位=的末8位=校验和如果需要处理零下值,16位的最高位为1表示负数,温度最大量程:-2080度,分辨率:0.1度。如果用数据码管显示且有中断,采集数据开始需要关中

3、断,采集结束开中断,否则在采集数据过程中,中断会打断DHT22时序,造成采集数据不正确。每次采集间隔大于1秒,否则采集数据不准确。C程序 :为了方便程序阅读,其它器件的初始化与定义都删除掉了,以下代码纯DHT22代码,使用时直接调用RH函数即可。由于程序多次修改,可能有多余的变量,大家自己清理下。RH函数调用后,以下四个变量会得相应的数据:R_H湿度高8位R_L湿度低8位(包含小数)T_H温度高8位T_L湿度低8位(包含小数)如果采集的数据是:0000 0010 1000 1100 0000 0001 0101 1111由上面四个变量是16位,采集数据是8位,分四次采完,8位放在16位里面应该

4、是这样:R_H= 00000000 00000010R_L= 00000000 10001100所以R_H左移8个位或上R_L才是我们要的数据。R_H =R_H & R_L以上采集数据湿度为652,湿度为351,再除以10就是实际温湿度值。#include #include typedef unsigned char U8; /* defined for unsigned 8-bits integer variable 无符号8位整型变量 */typedef signed char S8; /* defined for signed 8-bits integer variable 有符号8位整

5、型变量 */typedef unsigned int U16; /* defined for unsigned 16-bits integer variable 无符号16位整型变量 */typedef signed int S16; /* defined for signed 16-bits integer variable 有符号16位整型变量 */typedef unsigned long U32; /* defined for unsigned 32-bits integer variable 无符号32位整型变量 */typedef signed long S32; /* defin

6、ed for signed 32-bits integer variable 有符号32位整型变量 */typedef float F32; /* single precision floating point variable (32bits) 单精度浮点数(32位长度) */typedef double F64; /* double precision floating point variable (64bits) 双精度浮点数(64位长度) */#define uchar unsigned char#define uint unsigned int#define Data_0_time

7、 4/-/-IO口定义区-/-/sbit P2_0 = P32 ;/-/-定义区-/-/U8 U8FLAG,k;U8 U8count,U8temp;U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;U8 U8comdata;U8 outdata5; /定义发送的字节数 U8 indata5;U8 count, count_r=0;U8 str5=RS23

8、2;U16 U16temp1,U16temp2;U16 R_H,R_L,T_H,T_L; void Delay(U16 j) U8 i; for(;j0;j-) for(i=0;i27;i+); void Delay_10us(void) U8 i; i-; i-; i-; i-; i-; i-; void COM(void) U8 i; for(i=0;i8;i+) U8FLAG=2; while(!P2_0)&U8FLAG+);Delay_10us(); Delay_10us();Delay_10us(); U8temp=0; if(P2_0)U8temp=1; U8FLAG=2; whi

9、le(P2_0)&U8FLAG+); /超时则跳出for循环 if(U8FLAG=1)break; /判断数据位是0还是1 / 如果高电平高过预定0高电平值则数据位为 1 U8comdata=1; U8comdata|=U8temp; /0 /rof/-/-湿度读取子程序 -/-/-以下变量均为全局变量-/-温度高8位= U8T_data_H-/-温度低8位= U8T_data_L-/-湿度高8位= U8RH_data_H-/-湿度低8位= U8RH_data_L-/-校验 8位 = U8checkdata-/-调用相关子程序如下-/- Delay();, Delay_10us();,COM(

10、); /-void RH(void) /主机拉低18ms P2_0=0; Delay(18); P2_0=1; /总线由上拉电阻拉高 主机延时20usEA=0; Delay_10us(); Delay_10us(); Delay_10us(); Delay_10us(); /主机设为输入 判断从机响应信号 P2_0=1; /判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行 if(!P2_0) /T ! U8FLAG=2; /判断从机是否发出 80us 的低电平响应信号是否结束 while(!P2_0)&U8FLAG+); U8FLAG=2; /判断从机是否发出 80us 的高电平,

11、如发出则进入数据接收状态 while(P2_0)&U8FLAG+); /数据接收状态 COM(); U8RH_data_H_temp=U8comdata; COM(); U8RH_data_L_temp=U8comdata; COM(); U8T_data_H_temp=U8comdata; COM(); U8T_data_L_temp=U8comdata; COM(); U8checkdata_temp=U8comdata; P2_0=1; /数据校验 U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); if(U8temp=U8checkdata_temp) R_H=U8RH_data_H_temp;R_L=U8RH_data_L_temp;T_H=U8T_data_H_temp;T_L=U8T_data_L_temp; U8checkdata=U8checkdata_temp; EA=1;说明书:数字温湿度传感器AM2302 小体积AM2302 相对湿度和温度测量

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 模板/表格 > 财务表格

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号