找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1234|回復(fù): 0
收起左側(cè)

仿真時(shí)LCD一直顯示DHT11采集的數(shù)據(jù)為0,求大神解決一下

[復(fù)制鏈接]
ID:1068800 發(fā)表于 2023-3-28 21:15 | 顯示全部樓層 |閱讀模式
請(qǐng)問是因?yàn)闆]采集到數(shù)據(jù)嗎,還是時(shí)序問題呀  純小白QAQ
51hei圖片_20230328211629.png
DHT11代碼:
#include"reg52.h"
#include"DHT11.h"
#include"delay.h"
#include <intrins.h>
sbit  DHT11_DQ=P3^7;

bit status;  

void delay_10us(unsigned int nus)
{
        unsigned char i;

        i = 2*nus;
        while (--i);
}

void DHT11_Rst(void)  
{
        DHT11_DQ=0;      
        delay_ms(20);   
        DHT11_DQ=1;      
        delay_10us(4);  
}

bit DHT11_Check(void)
{
        unsigned char retry=0;

        while(DHT11_DQ&&retry<100)
        {
                retry++;
                delay_10us(1);
        };
        if(retry>=100)return 1;   
        else retry=0;              
        while(!DHT11_DQ&&retry<100)
        {
                retry++;
                delay_10us(1);
        };
        if(retry>=100)return 1;
                 return 0;
        
}

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

static unsigned char DHT11_Read_Byte(void)
{
        unsigned char retry, dat = 0, i;
        status = OK;  
        for(i = 8; i > 0; i--)
        {
        
                dat <<= 1;
                retry = 0;
        
                whileT11_DQ == 0 && retry++ < NUMBER);
                if(retry >= NUMBER)
                {
                        status = ERROR;  
                        return 0;   
                }

                delay_10us(2);
        
                if(DHT11_DQ != 0)
                {
               
                        dat++;
               
                        while(DHT11_DQ != 0 && retry++ < NUMBER)
                        {
                                DHT11_DQ = 1;
                        }
                        if(retry >= NUMBER)
                        {
                                status = ERROR;  
                                return 0;
                        }  
                }
        }  
        return (dat);

bit DHT11_Read_Date(unsigned char *temp,unsigned char *humi)
{  
        unsigned char i = 0,retry = 0;
        unsigned char buf[SIZE];
        DHT11_DQ = 0;      
        delay_ms(30);
        DHT11_DQ = 1;   

        delay_10us(3);
        if(DHT11_DQ != 0)  
        {
                //??ó|′eD?o?  
                return ERROR;
        }
        else
        {
        
                while(DHT11_DQ == 0 && retry++ < NUMBER);  
                if(retry >= NUMBER)
                {
                        DHT11_DQ = 1;
                        return ERROR;  
                }
                retry = 0;
                DHT11_DQ = 1;        
        
                while(DHT11_DQ != 0 && retry++ < NUMBER);
                if(retry >= NUMBER)
                {
                        DHT11_DQ = 1;
                        return ERROR;
                }
        

            for(i = 0; i < SIZE; i++)  
                {
                        buf[ i] = DHT11_Read_Byte();
                        if(status == ERROR)        
                        {
                                DHT11_DQ = 1;   
                                return ERROR;  
                        }  
                }
                if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
                {
                        *humi = buf[0];
                        *temp = buf[2];
                        DHT11_DQ = 1;
                        return OK;                                                   
                }
                else                        
                {
                        
                        return ERROR;
                }
        }         
}



主函數(shù)
void main()
{
        unsigned char temperature;              
        unsigned char humidity;
        Time0_Time1_init();
        lcd1602_init();
        led= 1;
        delay_ms(1000);
        L1602_string(1,1,"WD:");
        L1602_string(1,8,"SD:");
        L1602_string(1,6,"C");
        L1602_string(1,13,"%");
        L1602_string(2,3,":");
        L1602_string(2,6,":");
        L1602_string(2,12,":");
        while(1)
        {
                DHT11_Read_Date(&temperature,&humidity);
                delay_ms(50);
               
                L1602_int(1,4,temperature);
                L1602_int(1,11,humidity);
               
                if(key1==0
                {
                        buf++;
                        if(buf>1) buf=0;
                }
               
                if(buf==0
                {
                        L1602_string(1,15,"SD");
                        if(key2==0) led=~led;
                        if(key3==0) q1=~q1;
                        if(key4==0) q2=~q2;
                        if(temperature>40) q2=1;
                }
               
               
                if(buf==1
                {
                        L1602_string(1,15,"ZD");
                        if(key4==0) miao++;
                        if(key5==0) fen++;
                        if(key6==0) shi++;
                        if(key3==0) shi1++;  if(shi1>23) shi1=0;
                        if(key2==0) fen1++;  if(fen1>59) fen1=0;
                        
                        if((shi==shi1)&(fen==fen1)
                        {
                                if(humidity>70) led=q1=q2=0;  
                        
                        }
                        if(temperature>40|humidity<35
                        led=q1=q2=1;        
                }
                L1602_int(2,1,shi);
                L1602_int(2,4,fen);
                L1602_int(2,7,miao);
               
                L1602_int(2,10,shi1);
                L1602_int(2,13,fen1);
               
                delay_ms(150);
        }        
}

void Timer0() interrupt 1
{
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;
   count++;
   if(count==20
        {
    count=0
                miao++;
                if(miao>59)
                {
                        miao=0;
                        fen++;
                }
                if(fen>59)
                {
                        fen=0;
                        shi++;
                }
                if(shi>23) shi=0;
  }
}
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表