標(biāo)題: DHT22和DHT11在溫濕度顯示程序方面有什么不同?只是延時不同嗎? [打印本頁]

作者: Lagods    時間: 2020-4-13 10:42
標(biāo)題: DHT22和DHT11在溫濕度顯示程序方面有什么不同?只是延時不同嗎?
程序只是延時不同嗎?需要修改什么地方?

/*************************************************************
                      DHT11頭文件

實(shí)現(xiàn)功能:DHT11的控制

補(bǔ)充說明:
***************************************************************/
#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;//溫度整數(shù)位,小數(shù)位,濕度整數(shù)位,小數(shù)位,數(shù)據(jù)校驗(yàn)位
uchar U8FLAG;
/*****************DHT11函數(shù)定義*********************/
void Delay_ms(uint n);                 //ms延時函數(shù)
void Delay_us(uchar n);                //us延時函數(shù)
uchar DHT11_receive(void);        //DHT11接收數(shù)據(jù)函數(shù)
void DHT11_read(void);                //DHT11讀取溫濕度函數(shù)
bit  DHT11_Check(void);     //DHT11校驗(yàn)函數(shù),返回1:校驗(yàn)成功、返回0:校驗(yàn)失敗

/********************************************************
函數(shù)名稱:void Delay_ms(uint n)
函數(shù)作用:ms延時函數(shù)
參數(shù)說明:
********************************************************/
void Delay_ms(uint n)
{
        unsigned char j;
        while(n--)
        {
                for(j=0;j<125;j++);
        }
}

/********************************************************
函數(shù)名稱:void Delay_us(uchar n)
函數(shù)作用:us延時函數(shù)
參數(shù)說明:
********************************************************/
void Delay_us(uchar n)
{
        n=n/2;
        while(--n);
}
/********************************************************
函數(shù)名稱:uchar DHT11_receive(void)
函數(shù)作用:接收DHT11傳回來的數(shù)據(jù)
參數(shù)說明:返回接收到的八位數(shù)據(jù)
********************************************************/
uchar DHT11_receive(void)
{
        uchar i,Data;
        for(i=0;i<8;i++)
        {
                 U8FLAG=2;
                 while(!DHT11_DB&&U8FLAG++);   
                 Delay_us(35);                 
                 Data<<=1;                                                 // 如果高電平高過預(yù)定0高電平值則數(shù)據(jù)位為 1
                 if(DHT11_DB)
                         Data|=1;                                       
                U8FLAG=2;
                 while(DHT11_DB&&U8FLAG++);                //超時則跳出for循環(huán)     
         }
        return Data;
}
/********************************************************
函數(shù)名稱:void DHT11_read(void)
函數(shù)作用:讀取DHT11溫濕度
參數(shù)說明:
********************************************************/
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;      
        }
}
/********************************************************
函數(shù)名稱:bit DHT11_Check(void)
函數(shù)作用:DHT11校驗(yàn)函數(shù)
參數(shù)說明:返回=1:校驗(yàn)成功;返回=0:校驗(yàn)失敗
********************************************************/
bit DHT11_Check(void)
{
        if((Temp_H+Temp_L+Humi_H+Humi_L)==Check_data)  //判斷校驗(yàn)和是否正確
                return 1;
        else
                return 0;
}
#endif


作者: chu358177    時間: 2020-5-22 11:16
22啟動時間應(yīng)該是比11短,具體對比一下 時序圖 就好辦了。
作者: adject    時間: 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 只有整數(shù)部分,dth22 讀出來的數(shù)除以10 dth22精度更高
作者: 蔡春雷    時間: 2022-1-4 18:00
啟動延時和換算  建議看看手冊




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1