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

標題: ESK32-360開發板檢測溫濕度 [打印本頁]

作者: jinglixixi    時間: 2020-8-29 08:59
標題: 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  溫濕度值顯示






歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲精品播放 | 一级做a视频| 欧美黑人一区二区三区 | 91亚洲国产 | 日韩性视频 | 成人午夜影院 | 亚洲免费精品 | 在线免费国产 | 欧美vieox另类极品 | 日本欧美久久久久免费播放网 | 日韩亚洲欧美在线 | 久久精品国产视频 | 国产三级视频在线 | 91久久国产综合久久91精品网站 | 中文字幕+乱码+中文乱码91 | 欧美精品第一页 | 国产美女视频网站 | 九九热在线观看 | 日本精品视频在线观看 | 欧美国产精品一区二区 | 中文字幕av久久爽av | 天天色天天干天天 | 亚洲无av在线中文字幕 | 日本乱子伦 | 福利在线看| 91看片看淫黄大片 | 艳妇臀荡乳欲伦交换h漫 | 三级免费观看 | 国产一级特黄aaa大片 | 国产一级片视频 | 天天操夜夜骑 | 99国产在线视频 | 日韩免费高清视频 | 亚洲性天堂 | 久久青草视频 | 国产精品一区av | 免费看av的网址 | 欧美在线综合 | 激情婷婷 | 久草福利在线 | 九九视频在线观看 |