DHT11 对时钟要求特别高,以下两个程序 前者时钟是 22.1184MHz; 后者是 11.0592MHz,请注意区分... //****************************************************************// // DHT11 使用范例 //单片机 : AT89S52 或 STC89C52RC // 功能 :串口发送温湿度数据 晶振 22.1184M //****************************************************************// #include //----------------------------------------------// //----------------IO 口定义区--------------------// //----------------------------------------------// sbit P2_0 = P2^0 ; //----------------------------------------------// //----------------定义区--------------------// //----------------------------------------------// unsigned char U8FLAG=0,U8temp=0; unsigned char U8T_data_H=0,U8T_data_L=0,U8RH_data_H=0,U8RH_data_L=0,U8checkdata=0; unsigned char str[5]; void Delay2(unsigned int j) { unsigned int i; for(;j>0;j--) { for(i=0;i<150;i++); } } void Delay_10us(void) { unsigned i; for(i=16;i>0;i--) ; } unsigned char COM(void) { unsigned char i,U8comdata ; for(i=0;i<8;i++) { U8FLAG=2; while((!P2_0)&&U8FLAG++); Delay_10us(); Delay_10us(); Delay_10us(); U8temp=0; if(P2_0)U8temp=1; U8FLAG=2; while((P2_0)&&U8FLAG++); //超时则跳出for 循环 if(U8FLAG==1)break; //判断数据位是0 还是1 // 如果高电平高过预定0 高电平值则数据位为 1 U8comdata<<=1; U8comdata|=U8temp; //0 }//rof return U8comdata ; } //-------------------------------- //-----湿度读取子程序 ------------ //-------------------------------- //----以下变量均为全局变量-------- //----温度高8 位== U8T_data_H------ //----温度低 8 位== U8T_data_L------ //----湿度高8 位== U8RH_data_H----- //----湿度低 8 位== U8RH_data_L----- //----校验 8 位 == U8checkdata----- //----调用相关子程序如下---------- //---- Delay();, Delay_10us();,COM(); //-------------------------------- void RH(void) { unsigned char U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp...