DHT11你到底哪里出错了 有心人帮我看看 我把代码贴了
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
// #define size 5
// #define ERROR 0
sbit DHT=P2^0;
uchar flag;
uchar value_arr[5];
uchar temp,shidu;
//此表为 LED 的字模, 共阴数码管 0-9 -
unsigned char code arr[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //段码控制
void delay10us()
{
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
}
void delayms(uint i)
{
uchar x,y;
for(x=i;x>0;x--)
{
for(y=124;y>0;y--);
}
}
uchar readvalue() //读一字节
{
uchar dat=0,i;
for(i=8;i>0;i--)
{
DHT=0;
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();
DHT=1;
DHT=dat&0x80;
if(DHT==0)
{
delay10us();
delay10us();
delay10us();
}
else
{
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();
/* while(DHT!=0)
{
dat=1;
} */
}
dat<<=1;
}
DHT=0;
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();
return dat;
}
void readtempandshidu(void) //读数据
{
uchar i=0,check_dat=0,count=0;
EA=0;
DHT=0;
delayms(18);
// if(flag==18)
// {
// flag=0;
DHT=1;
delay10us();
delay10us();
delay10us();
// delay10us();
DHT=0;
while(DHT==0&&count++<20);
DHT=1;
while(DHT!=0&&count++<20);
/* while(DHT==0)
{
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();
}
DHT=1;
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();
DHT=0; */
for(i=0;i<5;i++)
{
value_arr[i]=readvalue();
if(i!=4)
{
check_dat+=value_arr[i];
}
}
if(check_dat==value_arr[4])
{
shidu=value_arr[0];
temp=value_arr[2];
DHT=1;
EA=1;
}
// }
/* else
{
EA=1;
// return 0;
} */
}
void display(uchar dat)
{
uchar ge,shi,bai;
bai=dat%1000/100;
shi=dat%100/10;
ge=dat%10;
P1=0XFE;
P0=arr[bai];
delayms(2);
P1=0XFD;
P0=arr[shi];
delayms(2);
P1=0XFB;
P0=0X80;
delayms(2);
P1=0xf7;
P0=arr[ge];
}
void init0()
{
TMOD=0X01;
TH0=(65535-50000)%256;
TL0=(65535-50000)/256;
EA=1;
ET0=1;
TR0=1;
}
void t0() interrupt 1
{
TH0=(65535-50000)%256;
TL0=(65535-50000)/256;
flag++;
}
void main()
{
uchar biao=0;
delayms(1000);
readtempandshidu();
delayms(3000);
init0();
while(1)
{
if(flag==60)
{
flag=0;
biao++;
readtempandshidu();
}
if(biao%3==0)
{
display(temp);
}
else
{
display(shidu);
}
}
}