您好,我想请问以下你这个温湿度显示都是0的问题是怎么解决的呀?我在设计的过程中也遇到了这种问题。![]() |
| 帖主你好,请问问题是怎么解决的,我也在困惑一样的问题 |
| 楼主你好,请问你是怎么解决的,方便告诉我一下吗 |
aide51 发表于 2021-3-18 11:06 感谢,已解决 |
TTQ001 发表于 2021-3-18 04:49 感谢,已解决 |
| 给你一个参考 |
| 只需编写一个简单的测试代码即可检查DHT11传感器是否正常工作。 |
| 控制程序 1.单字节采集 void COM(void) { U8 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++); //超时则跳出for循环 if(U8FLAG==1)break; //判断数据位是0还是1 // 如果高电平高过预定0高电平值则数据位为 1 U8comdata<<=1; U8comdata|=U8temp; //0 } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2.完整一次数据采集 void RH(void) { //主机拉低18ms P2_0=0; Delay(180); P2_0=1; //总线由上拉电阻拉高 主机延时20us Delay_10us(); Delay_10us(); Delay_10us(); Delay_10us(); //主机设为输入 判断从机响应信号 P2_0=1; //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行 if(!P2_0) //T ! { U8FLAG=2; //判断从机是否发出 80us 的低电平响应信号是否结束 while((!P2_0)&&U8FLAG++); U8FLAG=2; //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态 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; } }/ } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 3.获取DHT11数据 void GetTemp1(void) { //------------------------ //调用温湿度读取子程序 RH(); //串口显示程序 //-------------------------- Send_string("Humidity:"); str[0]=U8RH_data_H/10+0x30; str[1]=U8RH_data_H%10+0x30; str[2]='.'; str[3]=U8RH_data_L/10+0x30; str[4]=U8RH_data_L%10+0x30; str[5]='\0'; Send_string(str); Send_string("%\r\n"); Send_string("Temperature:"); str[0]=U8T_data_H/10+0x30; str[1]=U8T_data_H%10+0x30; str[2]='.'; str[3]=U8T_data_L/10+0x30; str[4]=U8T_data_L%10+0x30; str[5]='\0'; Send_string(str); Send_string("℃\r\n"); } 试下这个 |