问题如题,下面是主函数代码
#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工作不正常
把传感器拿掉依然可以显示数据