HC6800-ES-V2.0 发表于 2018-12-25 08:28 能帮我看下我的是哪里出问题吗 |
卖苹果的乔布斯 发表于 2018-12-24 23:56 好像程序有问题,没细看,给一个我一直用到的程序你试试。 单片机STC89C52RC ,晶振12M,P2.0口为通讯口连接DHT11 //----温度高8位== U8T_data_H------ //----温度低8位== U8T_data_L------ //----湿度高8位== U8RH_data_H----- //----湿度低8位== U8RH_data_L----- //----校验 8位 == U8checkdata----- unsigned char U8FLAG; unsigned char U8temp; unsigned char U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata; unsigned char U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp; unsigned char U8comdata; void Delay(unsigned int j)//延时888.1725us { unsigned char i; for(;j>0;j--) { for(i=0;i<27;i++); } } void delay(void)//延时35.5us { unsigned char i=10; while(i--); } void Delay_10us(void) { unsigned char i; i--; i--; i--; i--; i--; i--; } void COM (void)//读数据 { unsigned char i; 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++); if(U8FLAG==1)break; U8comdata<<=1; U8comdata|=U8temp; //0 }//rof } void RH (void) { P2_0=0; Delay(180); P2_0=1; Delay_10us(); Delay_10us(); Delay_10us(); Delay_10us(); P2_0=1; if(!P2_0) //T ! { U8FLAG=2; while((!P2_0)&&U8FLAG++); U8FLAG=2; while((P2_0)&&U8FLAG++); COM(); U8RH_data_H_temp=U8comdata; COM(); U8RH_data_L_temp=U8comdata; COM(); U8T_data_H_temp=U8comdata; COM(); U8T_data_L_temp=U8comdata; COM(); U8checkdata_temp=U8comdata; P2_0=1; U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); if(U8temp==U8checkdata_temp) { U8RH_data_H=U8RH_data_H_temp; U8RH_data_L=U8RH_data_L_temp; U8T_data_H=U8T_data_H_temp; U8T_data_L=U8T_data_L_temp; U8checkdata=U8checkdata_temp; }//fi }//fi } |
不用的代码已经被我注释掉了 |