如何比较两个Dht11传感器的值

怎样才能让lcd显示器只显示其中一个Dht11传感器的温湿度值,而另一个的值只用来做比较呢
这个是不用在LCD显示器上显示的DHT11的

//函数定义
void Delayms(unsigned int ms);

void DHT11_delay_us(unsigned char n);
void DHT11_delay_ms(unsigned int z);

void DHT11_start();

uchar DHT11_rec_byte();
uchar DHT11_rec_byte1();

void DHT11_receive();
void DHT11_receive1();

void DHT11_start1()    
{
    Data1=1;//
    
    DHT11_delay_us(2);
    
    Data1=0;//
    
    DHT11_delay_ms(20);
    
    Data1=1;//
    
    DHT11_delay_us(13);
    }

unsigned char DHT11_rec_byte1()
{
    
    unsigned char i,dat1;
    
    for(i=0;i<8;i++)
    {
            while(!Data1);
            DHT11_delay_us(8);
            dat1<<=1;
            if(Data1==1)
            {
                dat1+=1;
            }
            while(Data1);
    }

    return dat1;
    
}

void DHT11_receive1()
{
    uint R_H1,R_L1,T_H1,T_L1;
    uchar RH1,RL1,TH1,TL1,revise1;
    
    DHT11_start1();
    
    Data1=1;    
    
    
    if(Data1==0)
    {
        
        while(Data1==0);   //等待拉高     
        DHT11_delay_us(40);  //拉高后延时80us
        
        R_H1=DHT11_rec_byte1();    //接收湿度高八位  
        R_L1=DHT11_rec_byte1();    //接收湿度低八位  
        T_H1=DHT11_rec_byte1();    //接收温度高八位  
        T_L1=DHT11_rec_byte1();    //接收温度低八位
        revise1=DHT11_rec_byte1(); //接收校正位

        DHT11_delay_us(25);    //结束

        if((R_H1+R_L1+T_H1+T_L1)==revise1)      //校正
        {
            RH1=R_H1;
            RL1=R_L1;
            TH1=T_H1;
            TL1=T_L1;

        } 

这个是在LCD上显示的

void lcd_init(void)                          //LCD初始化子程序
{
    lcd_wri_com(0x38);//置功能8位双行
    lcd_wri_com(0x0c);//显示开关光标
    lcd_wri_com(0x06);//字符进入模式屏幕不动字符后移
    delay_ms(5);//延时5ms
    lcd_wri_com(0x01);  //清屏
    wri_string(1,0,times);//初始化显示
    wri_string(1,6,date);
    wri_string(2,0,"H:   %RH T:   C ");//初始化显示
}
void DHT11_delay_us(unsigned char n)
{
    while(--n);
}

void DHT11_delay_ms(unsigned int z)
{
   unsigned int i,j;
   for(i=z;i>0;i--)
      for(j=110;j>0;j--);
}

void DHT11_start()
{
   Data=1;
   DHT11_delay_us(2);
   Data=0;
   DHT11_delay_ms(30);   //延时18ms以上
   Data=1;
   DHT11_delay_us(30);
}

unsigned char DHT11_rec_byte()      //接收一个字节
{
   unsigned char i,dat=0;
  for(i=0;i<8;i++)    //从高到低依次接收8位数据
   {
      while(!Data);   ////等待50us低电平过去
      DHT11_delay_us(8);     //延时60us,如果还为高则数据为1,否则为0
      dat<<=1;           //移位使正确接收8位数据,数据为0时直接移位
      if(Data==1)    //数据为1时,使dat加1来接收数据1
         dat+=1;
      while(Data);  //等待数据线拉低
    }
    return dat;
}

void DHT11_receive()      //接收40位的数据
{
    unsigned char R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
    DHT11_start();
    if(Data==0)
    {
        while(Data==0);   //等待拉高
        DHT11_delay_us(40);  //拉高后延时80us
        R_H=DHT11_rec_byte();    //接收湿度高八位
        R_L=DHT11_rec_byte();    //接收湿度低八位
        T_H=DHT11_rec_byte();    //接收温度高八位
        T_L=DHT11_rec_byte();    //接收温度低八位
        revise=DHT11_rec_byte(); //接收校正位

        DHT11_delay_us(25);    //结束

        if((R_H+R_L+T_H+T_L)==revise)      //校正
        {
            RH=R_H;
            RL=R_L;
            TH=T_H;
            TL=T_L;
        }
        humi_value = RH;
        temp_value = TH;
    }
}

这是LCD所有的程序


```c
void delay_ms(unsigned int cnt)   //
{
    unsigned int x;
    for( ; cnt>0; cnt--)
    {
        for(x=110; x>0; x--);//软件延时为1MS
    }
}
#if 0
void delay_us(unsigned int cnt)   //
{
    while(cnt--);
}
#endif
/**定时器初始化**/
void time_init(void)
{
      TMOD |= 0x01;//time0 工作方式为1
      TH0 = 0xf8;//装载初值
      TL0 = 0x2f;//装载初值,为2ms(65535-63535)
      TR0 = 1;//开启定时器
      ET0 = 1;//打开中断
      EA=1;
}
/******************************************************
按键扫描
******************************************************/
void key_scan(void)
{
    static unsigned char key_in_flag = 0;//按键按下标志
    unsigned char key_l;//存储扫描到行列值。
    key_value = 20;//按键值清除
    if((P3 & 0x0f) != 0x0f)//按键按下
    {
        delay_ms(1);//按键消抖动
        if(((P3 & 0x0f) != 0x0f) && (key_in_flag == 1))
        {
            key_in_flag = 0;//松手检测防止一直触发
            P3 = 0x0f;
            //delay_ms(1);//按键消抖动
            key_l = P3;//扫描得到按键值
            switch(key_l)
            {
                //获取按键值
                case 0x0e:
                {
                    key_value = 1;
                }
                break;
                case 0x0d:
                {
                    key_value = 2;
                }
                break;
                case 0x0b:
                {
                    key_value = 3;
                }
                break;
                //case 0x70:
                //break;
            }
        }
    }
    else
    {
        key_in_flag = 1;//(按键松开标志)
    }

}

/函 数 名         : LcdWriteCom
函数功能           : 向LCD写入一个字节的命令/
void lcd_wri_com(unsigned char com)      //写入命令
{
    E = 0;     //使能清零
    RS = 0;     //选择写入命令
    RW = 0;     //选择写入

    DB = com;
    delay_ms(1);

    E = 1;     //写入时序
    delay_ms(5);
    E = 0;
}

/*函数功能           : 向LCD写入一个字节的数据*/

void lcd_wri_data(unsigned char dat)//写入数据
{
    E = 0;      //使能清零
    RS = 1;      //选择写入数据
    RW = 0;      //选择写入
    DB = dat;
    delay_ms(1);
    E = 1;      //写入时序
    delay_ms(5);
    E = 0;
}

/* 函 数 名         : WriString
* 函数功能           : 刷新屏幕显示*/

void wri_string(unsigned char y,unsigned char x,unsigned char *p)
{
    if(y==1)//如果选择第一行
        lcd_wri_com(0x80+x);//选中地址
    else
        lcd_wri_com(0xc0+x);//选中地址
        while(*p)
        {
            lcd_wri_data(*p);//写入数据
            p++;
        }
}
/ 函数名:lcd_write_char/
void lcd_write_char(unsigned char y, unsigned char x, unsigned char dat) //列x=0~15,行y=0,1
{
    unsigned char temp_l, temp_h;
    if(y==1)//如果选择第一行
        lcd_wri_com(0x80+x);//选中地址
    else
        lcd_wri_com(0xc0+x);//选中地址
    temp_l = dat % 10;
    temp_h = dat / 10;
    lcd_wri_data(temp_h + 0x30);          //convert to ascii
    lcd_wri_data(temp_l + 0x30);
}
/光标控制/
void lcd1602_guanbiao(unsigned char y, unsigned char x,unsigned char on_off)
{
    if(on_off == 1)   //开光标
    {
        if(y==1)//如果选择第一行
        lcd_wri_com(0x80+x);
        else
        lcd_wri_com(0xc0+x);//将光标移动到秒个位
        lcd_wri_com(0x0f);//显示光标并且闪烁
    }
    else
    {
        if(y==1)//如果选择第一行
        lcd_wri_com(0x80+x);
        else
        lcd_wri_com(0xc0+x);//将光标移动到秒个位
        lcd_wri_com(0x0c);   //关光标
    }
}

void lcd_init(void)                          //LCD初始化子程序
{
    lcd_wri_com(0x38);//置功能8位双行
    lcd_wri_com(0x0c);//显示开关光标
    lcd_wri_com(0x06);//字符进入模式屏幕不动字符后移
    delay_ms(5);//延时5ms
    lcd_wri_com(0x01);  //清屏
    wri_string(1,0,times);//初始化显示
    wri_string(1,6,date);
    wri_string(2,0,"H:   %RH T:   C ");//初始化显示
}
void DHT11_delay_us(unsigned char n)
{
    while(--n);
}

void DHT11_delay_ms(unsigned int z)
{
   unsigned int i,j;
   for(i=z;i>0;i--)
      for(j=110;j>0;j--);
}

void DHT11_start()
{
   Data=1;
   DHT11_delay_us(2);
   Data=0;
   DHT11_delay_ms(30);   //延时18ms以上
   Data=1;
   DHT11_delay_us(30);
}

unsigned char DHT11_rec_byte()      //接收一个字节
{
   unsigned char i,dat=0;
  for(i=0;i<8;i++)    //从高到低依次接收8位数据
   {
      while(!Data);   ////等待50us低电平过去
      DHT11_delay_us(8);     //延时60us,如果还为高则数据为1,否则为0
      dat<<=1;           //移位使正确接收8位数据,数据为0时直接移位
      if(Data==1)    //数据为1时,使dat加1来接收数据1
         dat+=1;
      while(Data);  //等待数据线拉低
    }
    return dat;
}

void DHT11_receive()      //接收40位的数据
{
    unsigned char R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
    DHT11_start();
    if(Data==0)
    {
        while(Data==0);   //等待拉高
        DHT11_delay_us(40);  //拉高后延时80us
        R_H=DHT11_rec_byte();    //接收湿度高八位
        R_L=DHT11_rec_byte();    //接收湿度低八位
        T_H=DHT11_rec_byte();    //接收温度高八位
        T_L=DHT11_rec_byte();    //接收温度低八位
        revise=DHT11_rec_byte(); //接收校正位

        DHT11_delay_us(25);    //结束

        if((R_H+R_L+T_H+T_L)==revise)      //校正
        {
            RH=R_H;
            RL=R_L;
            TH=T_H;
            TL=T_L;
        }
        humi_value = RH;
        temp_value = TH;
    }
}

这是有humi_value值的输入
```c
void init_all_hardware(void)
{
            
        time_init();//定时器初始化
        lcd_init();
        lcd_write_char(2,2,humi_value);
        lcd_write_char(2,11,temp_value);
        lcd_wri_com(0xcd);
        lcd_wri_data(0xdf);
        key_value = 20;
        now_window = normal_mode;
        cnt_100ms = 0;
        time_100ms_flag = 0;
        curr_menu = 0;
}
void time_service(void)
{
        if(time_100ms_flag)
        {
            time_100ms_flag = 0;
            if (++cnt_500ms>5)
            {
                    cnt_500ms = 0;
                    if(now_window == normal_mode)
                    {
                        EA = 0;
                        DHT11_receive();
                        EA = 1;
                        lcd_write_char(2,2,humi_value);
                                                lcd_write_char(2,11,temp_value);
                        AlarmJudge();//报警函数
                    }
            }

        }

}

LCD代码中去掉或者注释掉第二个Dht11传感器值的显示程序