#define uint unsigned int
#define uchar unsigned char
sbit DQ2=P1^2;
uchar RH,RL,TH,TL;
uchar DHT11Flag;
void Delay_us(uchar n)
{
while (n--)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
void Delay18ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 1;
j = 194;
k = 159;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void DHT11_Init()
{
uchar R_H,R_L,T_H,T_L,revise;
DHT11_start();
if(!DQ2)
{
DHT11Flag=180;
while((!DQ2)&&DHT11Flag++);
DHT11Flag=180;
while((DQ2)&&DHT11Flag++);
R_H=DHT11_read();
R_L=DHT11_read();
T_H=DHT11_read();
T_L=DHT11_read();
revise=DHT11_read();
if((R_H+R_L+T_H+T_L)==revise)
{
RH=R_H;
RL=R_L;
TH=T_H;
TL=T_L;
}
}
}
void DHT11_start()
{
DQ2=1;
Delay_us(1);
DQ2=0;
Delay18ms();
DQ2=1;
Delay_us(40);
}
uchar DHT11_read()
{
uint i;
uchar data2,temp;
for(i=0;i<8;i++)
{
DHT11Flag=200;
while((!DQ2)&&DHT11Flag++);
Delay_us(30);
temp=0;
if(DQ2)
temp=1;
DHT11Flag=100;
while((DQ2)&&DHT11Flag++);
if(DHT11Flag==1)
break;
data2<<=1;
data2|=temp;
}
return data2;
}
void conversion2()
{
uchar da2 [10];
da2[0]='0'+(RH/10);
da2[1]='0'+(RH%10);
da2[2]='R';
da2[3]='H';
da2[4]=' ';
da2[5]='0'+(TH/10);
da2[6]='0'+(TH%10);
da2[7]='C';
da2[8]='\n';
SendString(& da2);
}
|