bit dht11_VDD=P2^1;
sbit dht11_data=P2^2;
sbit dht11_GND=P2^3;
uchar DHT11_data[11]={0};
uchar data_byte;
void delay_8us()
{
uchar i;
for(i=0;i<1;i++);
}
void start()
{
dht11_data=1;
delay_8us();//延时8微秒
dht11_data=0;
delay(25);
dht11_data=1;
delay_8us();
delay_8us();
delay_8us();
}
uchar recevice_DHT11byte()
{
uchar i,temp;
for(i=0;i<8;i++)
{
while(!dht11_data);
delay_8us();
delay_8us();
delay_8us();
temp=0;
if(dht11_data==1)
temp=1;
while(dht11_data);
data_byte<<=1;
data_byte=data_byte|temp;
}
return data_byte;
}
void receive_DHT11()
{
uchar T_H,T_L,R_H,R_L;
uchar check,num_check,i;
start();
dht11_data=1;
if(!dht11_data)
{
while(!dht11_data);
while(dht11_data);
R_H=recevice_DHT11byte();
R_L=recevice_DHT11byte();
T_H=recevice_DHT11byte();
T_L=recevice_DHT11byte();
check=recevice_DHT11byte();
dht11_data=0;
for(i=0;i<8;i++)
{
delay_8us();
}
dht11_data=1;
num_check=T_H+T_L+R_H+R_L;
if(num_check==check)
{
DHT11_data[0]=R_H;
DHT11_data[1]=R_L;
DHT11_data[2]=T_H;
DHT11_data[3]=T_L;
DHT11_data[4]=check;
}
}
}
void deal_DHT11data()
{
DHT11_data[5]=0x30+DHT11_data[0]/10;
DHT11_data[6]=0x30+DHT11_data[0]%10;
DHT11_data[7]=0x30+DHT11_data[1]/10;
DHT11_data[8]=0x30+DHT11_data[2]/10;
DHT11_data[9]=0x30+DHT11_data[2]%10;
DHT11_data[10]=0x30+DHT11_data[3]/10;
}
|