weixin_44976699 2019-05-09 11:50 采纳率: 0%
浏览 622

我的DHT11传感器单独使用可以,和其他传感器使用就显示异常,是怎么回事?

问题如题,下面是主函数代码

#include<reg52.h>
#include <QC12864.h>
#include<chaoshengbo.h>
#include<dht11.h>
#include <intrins.h>
#include <stdio.h>

u16 i,m=0;
float s;
double v,t,l;
u8 n=0;                                      
sbit  k4=P3^0;
char  txt[]={"速度=   .   m/s"};
char  title[]={"里程=     .  m"};
char tips[]={"按下按钮开始"};

void Int1Init()                               
{

    IT1=1;
    EX1=1   
    EA=0
}


void Timer0Init()        
{
    TMOD=0x01;
    TH0=0x00;               
    TL0=0x00;
    TR0=0;
    ET0=1;
}
void main()
{
    double D=40;
    QC12864_Init();
    while(1)
    {

    l=(D/100)*3.14;                     
    if(k4==0)
    {
        Int1Init();                       
        Timer0Init();                     
        EA=1;
        while(1)
        {       
            dht11();
            QC12864_WriteString(3,txt);                       
            QC12864_WriteString(4,title);                      
        }
    }
    else
    xianshi();
    }
}
void Int1() interrupt 2 
{   
    TR0=0;
    t=(TH0*256+TL0)*0.00000001+0.0065535*m;     
    n++;                  
    s=n*l;                 
    v=(l/t);                
    TH0=0x00;
    TL0=0x00;       
    m=0;
    TR0=1;
    txt[6]=(int)v/10+'0';                               
    txt[7]=(int)v%10+'0';                           
    txt[9]=(v-(int)v)*10+'0';
    title[6]=((int)s/1000)%10+'0';
    title[7]=((int)s/100)%10+'0';                       
    title[8]=((int)s/10)%10+'0';                        
    title[9]=(int)s%10+'0';                         
    title[11]=(s-(int)s)*10+'0';                    
}

void Timer0() interrupt 1
{   
    m++;
}

下面是DHT11的驱动

#include<reg52.h>
#include <intrins.h>
#include <stdio.h>
#include <QC12864.h>
#include<dht11.h>
#define uchar unsigned char        
#define uint unsigned int

uchar dis0[]={"以下是当前温湿"};
uchar dis1[]={“温度    湿度   "};

sbit  p33= P1^0;
u8  u8FLAG2;  
u8  u8temp;
u8  u8T_data_H,u8T_data_L,u8RH_data_H,u8RH_data_L,u8checkdata;
u8  u8T_data_H_temp,u8T_data_L_temp,u8RH_data_H_temp,u8RH_data_L_temp,u8checkdata_temp;
u8  u8comdata;
u8  count;  
void Delay(u16 j) //100us
{      
        u8 i;
        for(;j>0;j--)
        {         
        for(i=0;i<27;i++);
        }
}

void  Delay_10us(void)       
{
        u8 i;       
        i--;          
        i--;
        i--;
        i--;
        i--;
        i--;
}
void  COM(void)
{        
     u8 i;
        for(i=0;i<8;i++)        
        {
                u8FLAG2=2;
                while((!p33)&&u8FLAG2++)
                Delay_10us();         
                Delay_10us();
                Delay_10us();
                u8temp=0;          
                if(p33)
                u8temp=1;
                u8FLAG2=2;
                while((p33)&&u8FLAG2++);                                       
                u8comdata<<=1;
                u8comdata|=u8temp;        
        }
}

void RH(void)
{

   p33=0;
   Delay(180);
   p33=1;

   Delay_10us();
   Delay_10us();
   Delay_10us();
   p33=1;

   if(!p33) //p20==0???????          
   {
   u8FLAG2=2;
   while((!p33)&&u8FLAG2++);  
   u8FLAG2=2;
   while((p33)&&u8FLAG2++);               
   COM();
   u8RH_data_H_temp=u8comdata;
   COM();
   u8RH_data_L_temp=u8comdata;
   COM();
   u8T_data_H_temp=u8comdata;
   COM();
   u8T_data_L_temp=u8comdata;
   COM();
   u8checkdata_temp=u8comdata;
   p33=1;

   u8temp=(u8T_data_H_temp+u8T_data_L_temp+u8RH_data_H_temp+u8RH_data_L_temp);
    if(u8temp==u8checkdata_temp)
     {
             u8RH_data_H=u8RH_data_H_temp;
              u8RH_data_L=u8RH_data_L_temp;  
          u8T_data_H=u8T_data_H_temp;
             u8T_data_L=u8T_data_L_temp;    
             u8checkdata=u8checkdata_temp;                                                   

}
}
 }
void display()
{

                dis1[4]=u8RH_data_H/10%10+0x30;
                dis1[5]=u8RH_data_H%10+0x30;
                dis1[12]=u8T_data_H/10%10+0x30;
                dis1[13]=u8T_data_H%10+0x30;
               QC12864_WriteString(1,dis0);
               QC12864_WriteString(2,dis1);
//             QC12864_WriteString(3,dis2);


}

void dht11()
{

        RH();   
        display();   
}

我尝试过修改I/O口可是不行
我觉得可能是哪里冲突了导致DHT11工作不正常
把传感器拿掉依然可以显示数据

  • 写回答

1条回答 默认 最新

  • 墨小羽ovo 2024-04-01 21:20
    关注

    一般是程序逻辑写的不严谨

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!