#include "dht11.h" #include "public.h" unsigned char dht11_read_byte(void) { unsigned char r_val = 0; unsigned char t_count = 0; //��ʱ������ֹ��ʱ�� unsigned char i; for(i = 0 ; i < 8 ; i++) { t_count = 0; //�͵�ƽ50us��ʼһ������λ��ȡ�� while( !DHT11_PIN ) { asm("NOP"); t_count++; if(t_count > 250) //��ʱ�� return 100; } t_count = 0; system_delay_us(32); //32us //�ߵ�ƽ26~28us��ʾ'0',70us��ʾ'1' if( DHT11_PIN == 1 ) { r_val <<= 1; r_val |= 1; } else { r_val <<= 1; continue; } //�ȴ�DHT11������������� while( DHT11_PIN == 1) { asm("NOP"); t_count++; if(t_count>250) { return 100; } } } return r_val; } char dht11_value(unsigned char *temp , unsigned char *humi , unsigned char flag) { unsigned char t_count = 0; //��ʱ���� unsigned char h_i = 0 , h_f = 0; unsigned char t_i = 0 , t_f = 0; unsigned char check_sum = 0; DHT11_PIN_OUT(); DHT11_PIN_L(); //����͵�ƽ�� //�͵�ƽ����ʱ��������18ms; system_delay_us(20000); //20ms; DHT11_PIN_H(); //���������ź�,�ߵ�ƽ�� //�����ȴ�20us~40us����ȡDHT11��Ӧ����� system_delay_us(30); DHT11_PIN_IN(); if(DHT11_PIN == 0) //��ȷ����Ӧ����� { while( !DHT11_PIN ) { asm("NOP"); t_count++; if(t_count > 250) //��ʱ�� return -1; } t_count = 0; system_delay_us(50); //DHT11������Ӧ��������������80us; while( DHT11_PIN ); //�ȴ����գ� { asm("NOP"); t_count++; if(t_count > 250) //��ʱ�� return -1; } h_i = dht11_read_byte(); //ʪ���������֣� h_f = dht11_read_byte(); //ʪ��С�����֣� t_i = dht11_read_byte(); //�¶��������֣� t_f = dht11_read_byte(); //�¶�С�����֣� check_sum = dht11_read_byte(); //У��ͣ� //У�����ȷ������ʪ���������ֻ�ȡ��ȷ����ʾ��ȡ�ɹ��� if(check_sum == ( h_i + h_f + t_i + t_f ) || (h_i != 100 && t_i != 100) ) { if(flag == DHT11_STRING) { temp[0] = t_i/10+0x30; temp[1] = t_i%10+0x30; humi[0] = h_i/10+0x30; humi[1] = h_i%10+0x30; } else { *temp = t_i; *humi = h_i; } } else { // if(flag == DHT11_STRING) // { // temp[0] = '0'; // temp[1] = '0'; // humi[0] = '0'; // humi[1] = '0'; // } // else // { // *temp = 0; // *humi = 0; // } return -1; } } else { // if(flag == DHT11_STRING) // { // temp[0] = '0'; // temp[1] = '0'; // humi[0] = '0'; // humi[1] = '0'; // } // else // { // *temp = 0; // *humi = 0; // } return -1; } return 0; }