|
發布時間: 2021-3-17 20:10
正文摘要:附代碼 #include <reg52.h> #include <intrins.h> #include <absacc.h> #include <math.h> #define uchar unsigned char #define uint unsigned int //定義四個輸出端口 sbit Led ... |
您好,我想請問以下你這個溫濕度顯示都是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"); } 試下這個 |