找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5219|回复: 3
收起左侧

DHT22和DHT11在温湿度显示程序方面有什么不同?只是延时不同吗?

[复制链接]
ID:710465 发表于 2020-4-13 10:42 | 显示全部楼层 |阅读模式
20黑币
程序只是延时不同吗?需要修改什么地方?

/*************************************************************
                      DHT11头文件

实现功能:DHT11的控制

补充说明:
***************************************************************/
#ifndef _DHT11_H_
#define _DHT11_H_
#include <reg52.h>

#define uchar unsigned char
#define uint unsigned int

/*****************DHT11引脚定义*******************/
sbit DHT11_DB=P3^4;

/*****************DHT11变量定义*********************/
uchar Temp_H,Temp_L,Humi_H,Humi_L,Check_data;//温度整数位,小数位,湿度整数位,小数位,数据校验位
uchar U8FLAG;
/*****************DHT11函数定义*********************/
void Delay_ms(uint n);                 //ms延时函数
void Delay_us(uchar n);                //us延时函数
uchar DHT11_receive(void);        //DHT11接收数据函数
void DHT11_read(void);                //DHT11读取温湿度函数
bit  DHT11_Check(void);     //DHT11校验函数,返回1:校验成功、返回0:校验失败

/********************************************************
函数名称:void Delay_ms(uint n)
函数作用:ms延时函数
参数说明:
********************************************************/
void Delay_ms(uint n)
{
        unsigned char j;
        while(n--)
        {
                for(j=0;j<125;j++);
        }
}

/********************************************************
函数名称:void Delay_us(uchar n)
函数作用:us延时函数
参数说明:
********************************************************/
void Delay_us(uchar n)
{
        n=n/2;
        while(--n);
}
/********************************************************
函数名称:uchar DHT11_receive(void)
函数作用:接收DHT11传回来的数据
参数说明:返回接收到的八位数据
********************************************************/
uchar DHT11_receive(void)
{
        uchar i,Data;
        for(i=0;i<8;i++)
        {
                 U8FLAG=2;
                 while(!DHT11_DB&&U8FLAG++);   
                 Delay_us(35);                 
                 Data<<=1;                                                 // 如果高电平高过预定0高电平值则数据位为 1
                 if(DHT11_DB)
                         Data|=1;                                       
                U8FLAG=2;
                 while(DHT11_DB&&U8FLAG++);                //超时则跳出for循环     
         }
        return Data;
}
/********************************************************
函数名称:void DHT11_read(void)
函数作用:读取DHT11温湿度
参数说明:
********************************************************/
void DHT11_read(void)
{
        DHT11_DB=0;                                                  
        Delay_ms(20);                                          
        DHT11_DB=1;                                                  
        Delay_us(60);
        if(!DHT11_DB)                    
        {
                U8FLAG=2;
                while(!DHT11_DB&&U8FLAG++);   
                U8FLAG=2;                                         
                while(DHT11_DB&&U8FLAG++);   
                Humi_H=DHT11_receive();                  
                Humi_L=DHT11_receive();
                Temp_H=DHT11_receive();
                Temp_L=DHT11_receive();
                Check_data=DHT11_receive();         
                DHT11_DB=1;      
        }
}
/********************************************************
函数名称:bit DHT11_Check(void)
函数作用:DHT11校验函数
参数说明:返回=1:校验成功;返回=0:校验失败
********************************************************/
bit DHT11_Check(void)
{
        if((Temp_H+Temp_L+Humi_H+Humi_L)==Check_data)  //判断校验和是否正确
                return 1;
        else
                return 0;
}
#endif

回复

使用道具 举报

ID:732456 发表于 2020-5-22 11:16 | 显示全部楼层
22启动时间应该是比11短,具体对比一下 时序图 就好办了。
回复

使用道具 举报

ID:419968 发表于 2020-5-22 23:20 | 显示全部楼层
void DHT11_read(void)
{
        DHT11_DB=0;                                                  
        Delay_ms(20);     //DTH22起始时间     Delay_us(800);                                   
        DHT11_DB=1;                                                  
        Delay_us(60);
        if(!DHT11_DB)                    
        {
                U8FLAG=2;
                while(!DHT11_DB&&U8FLAG++);   
                U8FLAG=2;                                         
                while(DHT11_DB&&U8FLAG++);   
                Humi_H=DHT11_receive();                  
                Humi_L=DHT11_receive();
                Temp_H=DHT11_receive();
                Temp_L=DHT11_receive();
                Check_data=DHT11_receive();         
                DHT11_DB=1;      
        }
}

还有温湿度换算 dth11 只有整数部分,dth22 读出来的数除以10 dth22精度更高
回复

使用道具 举报

ID:841313 发表于 2022-1-4 18:00 | 显示全部楼层
启动延时和换算  建议看看手册
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表