久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2242|回復: 0
打印 上一主題 下一主題
收起左側

ESK32-360開發板檢測溫濕度

[復制鏈接]
跳轉到指定樓層
樓主
本帖最后由 jinglixixi 于 2020-8-29 09:01 編輯

DHT22是一種單總線的數字式溫濕度傳感器,它共有3個引腳,只需占用一個GPIO口接口工作。
通過這條總線既靠它發出指令,也靠它接收數據。此外,為了進行信號的識別,還需相應的時序配合。有了前面的I2C接口的基礎,就可以探索一下DHT22的驅動及溫濕度檢測。

1. DHT22溫濕度檢測
DHT22與MCU的連接關系為:
DAT——PC12
其余兩個引腳則接3.3V工作電源

定義GPIO口讀取電位及輸出高低電平的語句為:
#define DHT22_D0_H      HT_GPIOC->SRR = GPIO_PIN_12
#define DHT22_D0_L       HT_GPIOC->RR = GPIO_PIN_12
#define DHT22_D0_R      GPIO_ReadInBit(HT_GPIOC, GPIO_PIN_12)

設置GPIO為輸入、輸出的函數為:
  1. void DHT22_IO_IN(void)
  2. {
  3.             AFIO_GPxConfig(GPIO_PC, GPIO_PIN_12, 0);
  4.             GPIO_PullResistorConfig(HT_GPIOC, GPIO_PIN_12, GPIO_PR_DOWN);
  5.             GPIO_DirectionConfig(HT_GPIOC, GPIO_PIN_12, GPIO_DIR_IN);
  6.             GPIO_InputConfig(HT_GPIOC, GPIO_PIN_12, ENABLE);
  7. }

  8. void DHT22_IO_OUT(void)
  9. {
  10.            GPIO_PullResistorConfig(HT_GPIOC, GPIO_PIN_12, GPIO_PR_DISABLE);
  11.            GPIO_DriveConfig(HT_GPIOC, GPIO_PIN_12, GPIO_DV_8MA);
  12.            GPIO_DirectionConfig(HT_GPIOC, GPIO_PIN_12, GPIO_DIR_OUT);
  13.            GPIO_InputConfig(HT_GPIOC, GPIO_PIN_12, ENABLE);
  14. }
復制代碼

DHT22讀取數據的函數為:
  1. u8 DHT22_Read_Data(u16 *temp,u16 *humi)
  2. {      
  3.         u8 buf[5];
  4.          u8 i;
  5.          DHT22_Rst();
  6.          if(DHT22_Check()==0)
  7.          {
  8.                    for(i=0;i<5;i++)
  9.                    {
  10.                             buf[i]=DHT22_Read_Byte();
  11.                    }
  12.                    if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
  13.                    {
  14.                             *humi=(buf[0]*256+buf[1]);
  15.                             *temp=(buf[2]*256+buf[3]);
  16.                    }
  17.          } else return 1;
  18.          return 0;     
  19. }
復制代碼

實現圖1所示效果的主程序為:
  1. int main(void)
  2. {
  3.          u8 senflag;
  4.          SYSTICK_ClockSourceConfig(SYSTICK_SRC_STCLK);
  5.          SYSTICK_SetReloadValue(SystemCoreClock / 8 / 1000000);
  6.          SYSTICK_IntConfig(ENABLE);
  7.         
  8.          HT32F_DVB_OUT_Init();
  9.          HT_GPIOD->RR = GPIO_PIN_0;      
  10.          Delayms(100);         
  11.          UxART_Configuration();
  12.          senflag=DHT22_Init();
  13.          if(senflag) gHelloString[3] = '1';
  14.          else     gHelloString[3] = '0';
  15.          UxART_TxTest();     
  16.          while(1)
  17.          {
  18.                      if(!senflag)
  19.                      {
  20.                                       DHT11_Read_Data(&temperature,&humidity);
  21.                                       gHelloString[2] = temperature/100+'0';
  22.                                       gHelloString[3] = temperature%100/10+'0';
  23.                                       gHelloString[5] = temperature%10+'0';
  24.                                       gHelloString[10] = humidity/100+'0';
  25.                                       gHelloString[11] = humidity%100/10+'0';
  26.                                       gHelloString[13] = humidity%10+'0';
  27.                      }
  28.                      Delayus(2000000);
  29.          }
  30. }
復制代碼

1溫濕度值輸出顯示

2.LCD屏顯示溫濕度值
顯示溫濕度值得主程序為:
  1. int main(void)
  2. {
  3.          u8 senflag;
  4.         
  5.          SYSTICK_ClockSourceConfig(SYSTICK_SRC_STCLK);
  6.          SYSTICK_SetReloadValue(SystemCoreClock / 8 / 1000000);
  7.          SYSTICK_IntConfig(ENABLE);
  8.         
  9.          HT32F_DVB_OUT_Init();
  10.          HT_GPIOD->RR = GPIO_PIN_0;
  11.         
  12.          Delayms(100);         
  13.          LCD_Init();
  14.          LCD_Config();
  15.          LCD_BackColorSet(Black);
  16.          LCD_TextColorSet(Yellow);
  17.          senflag=DHT22_Init();
  18.          if(senflag)  LCD_StringLineDisplay8(Line0, "              NO SEN!");
  19.          else       LCD_StringLineDisplay8(Line0, "              SEN OK!");
  20.          LCD_StringLineDisplay8(Line2, "               Holtek");
  21.          LCD_StringLineDisplay8(Line3, "          HT32 Series F1654    ");
  22.          LCD_StringLineDisplay8(Line4, "          LCD DHT22 Example    ");
  23.          LCD_StringLineDisplay8(Line6, "          T=    .  C");
  24.          LCD_StringLineDisplay8(Line7, "          H=    .  %");
  25.          while(1)
  26.          {
  27.                      if(!senflag)
  28.                      {
  29.                                       DHT11_Read_Data(&temperature,&humidity);
  30.                                       LCD_ShowNum(Line6,100,temperature/10,3);
  31.                                       LCD_ShowNum(Line6,140,temperature%10,1);
  32.                                       LCD_ShowNum(Line7,100,humidity/10,3);
  33.                                       LCD_ShowNum(Line7,140,humidity%10,1);
  34.                      }
  35.                      Delayus(2000000);
  36.          }
  37. }
復制代碼

下載后,其執行效果如圖2所示。

圖2  溫濕度值顯示

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 伊人春色在线 | 欧美999 | 狠狠躁天天躁夜夜躁婷婷老牛影视 | 天天操一操| 久草视频观看 | 精一区二区 | 日日骚网 | 国产精品久久久久久久久免费软件 | 欧美成人精品一区二区男人看 | av中文字幕在线观看 | 欧美视频二区 | 亚洲精品久久视频 | 欧美自拍第一页 | 国产高清视频 | 日本一卡精品视频免费 | 精品欧美黑人一区二区三区 | 日本手机在线 | 中文字幕成人在线 | 国产一区二区不卡 | 国产一区二区精品在线 | 欧美九九| 成人在线免费看 | 99久久亚洲 | 激情欧美一区二区三区 | 亚洲国产成人精品久久久国产成人一区 | 特级毛片 | 亚洲在线一区二区 | 国产探花在线观看视频 | 免费毛片网 | 欧美成视频在线观看 | 日韩国产免费观看 | 国产一卡二卡三卡 | 欧美一区二区三区免费电影 | 一区二区三区四区国产 | 激情 一区 | 午夜精品福利视频 | 天堂色网 | 欧美一区二区在线观看 | 亚洲国产精品一区在线观看 | 在线视频一区二区三区 | 性生生活大片免费看视频 |