DHT11 温度湿度读取 谁来帮我看看我是那里错了啊

#include <REGX51.H>
#include "LCD1602.H"
#include <intrins.h>
#include <intrins.h>
void Delay1ms(G)        //@12.000MHz
{
    unsigned char i, j;
    while(G)
    {i = 12;
    j = 169;
    do
    {
        while (--j);
    } while (--i);
    G--;
    }
}
void Delay1us(A)        //@12.000MHz
{
    while(A)
    {
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    A--;
    }
}
int S=0;
int D=0;
int F=0;
int G=0;
int H=0;
int J=0;
int K=0;
int L=0;
int Z=0;
int X=0;
int C=0;
int V=0;
int N=0;
int M=0;

void main()
{
    
    Delay1ms(1000);
    P1_0=0;
    Delay1ms(20);
    P1_0=1;
  Delay1us(30);
    if(P1_0==0)
    {
    
            while(P1_0==0);    
        while(P1_0==1);            
        while(P1_0==0);    
        Delay1us(32);
        if(P1_0==1)
        S=1;
        
    }
    else
        { 
            while(1)
            {
             LCD_Init();
            
             LCD_ShowString(1,3," error");
            }
        }
        while(P1_0==0)
        {
            
        }
        Delay1us(30);
        if(P1_0==1)
            D=1;
        while(P1_0==0)
        {
            
        }
        Delay1us(30);
        if(P1_0==1)
            F=1;
        while(P1_0==0)
        {
            
        }
        Delay1us(30);
        
        if(P1_0==1)
            G=1;
        if(S==0,D==0,F==0,G==0)
            H=0 ;//湿度的第一位数字十位
        if(S==0,D==0,F==0,G==1)
            H=1;
        if(S==0,D==0,F==1,G==0)
            H=2;
        if(S==0,D==0,F==1,G==1)
            H=3;
        if(S==0,D==1,F==0,G==0)
            H=4;
        if(S==0,D==1,F==0,G==1)
            H=5;
        if(S==0,D==1,F==1,G==0)
            H=6;
        if(S==0,D==1,F==1,G==1)
            H=7;
        if(S==1,D==0,F==0,G==0)
            H=8;
        if(S==1,D==0,F==0,G==1)
            H=9;
                
            
//        while(P1_1==0)
//        {
//            
//        }
//        Delay1us(80);
//        if(P1_1==1)
//            J=1;
//        while(P1_1==0)
//        {
//            
//        }
//        Delay1us(80);
//        if(P1_1==1)
//            K=1;
//        while(P1_1==0)
//        {
//            
//        }
//        Delay1us(80);
//        if(P1_1==1)
//            L=1;
//        if(S=0,D=0,F=0,G=0)
//            Z=0 ;//湿度的第一位数字十位
        
        
        LCD_Init();
    LCD_ShowNum(1,5,H,1);
        Delay1ms(1);
        
    }

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/14042726744615.png "#left")
我只写了读取湿度十位的代码正常的应该读出来2但是我读出来是8或者9   应该的代码有问题 我用开发板带的代码就没事




if(P1_0==0)
    {
    
            while(P1_0==0);    
        while(P1_0==1);            
        while(P1_0==0);    
        Delay1us(32);
        if(P1_0==1)
        S=1;
        
    }

你在这里的最后一个while跳出条件为P1_0!=0,但是S=1的条件是P1_0==1,即S一直为1
后面的值由s控制,s为1时,值有两个,一个是8,一个是9,其余未匹配
有帮助请点一下右上角的采纳,谢谢