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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32單片機溫濕度DHT11程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:1093781 發表于 2023-9-17 15:11 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
溫濕度DHT11
  1. //////////////////////////////////////////////////////////////////////////////////         
  2. //  功能描述   : OLED I2C  顯示溫濕度的值
  3. //              說明: 主控 stm32f103c8t6
  4. //              ----------------------------------------------------------------
  5. //              GND  電源地
  6. //              VCC  3.3v電源
  7. //              D0   PA0(SCL)
  8. //              D1   PA1(SDA)
  9. //              RES  PA2(SPI模塊改成IIC模塊需要接此引腳,IIC模塊用戶請忽略)


  10. //                                                        溫濕度DHT11 信號線引腳接線 PB9
  11. //                                            串口打印接口---- PA9 PA10
  12. //              ----------------------------------------------------------------
  13. //******************************************************************************/
  14. #include "delay.h"
  15. #include "sys.h"
  16. #include "oled.h"
  17. #include "bmp.h"
  18. #include "DHT11.h"
  19. #include "usart.h"         

  20. int main(void)
  21. {

  22.         u8 wd=0;      
  23.   u8 sd=0;

  24.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  25.   Delay_Init();
  26.   uart_init(115200);
  27.   
  28.         DHT11_Init();
  29.        
  30.         OLED_Init();
  31.         OLED_ColorTurn(0);//0正常顯示,1 反色顯示
  32.   OLED_DisplayTurn(0);//0正常顯示 1 屏幕翻轉顯示
  33.         while(1)
  34.         {
  35.                
  36.                 DHT11_Read_Data(&wd,&sd);//讀取溫濕度值   

  37.                        
  38.                 printf("當前環境溫度: %d ℃\r\n",wd);      //串口打印溫濕度
  39.                 printf("當前環境濕度: %d %%\r\n",sd);
  40.                
  41.                
  42.                 OLED_ShowChinese(0,0,0,16,1); //溫 x,y
  43.                 OLED_ShowChinese(18,0,1,16,1);//度
  44.                 OLED_ShowNum(50,0,wd,2,16,1);     //顯示溫度值
  45.                 OLED_ShowString(36,0,":",16,1);
  46.                
  47.                 OLED_ShowChinese(0,16,2,16,1);//濕
  48.                 OLED_ShowChinese(18,16,1,16,1);//度       
  49.                 OLED_ShowNum(50,16,sd,2,16,1);    //顯示濕度值
  50.                 OLED_ShowString(36,16,":",16,1);  
  51.                 OLED_ShowString(68,16,"%",16,1);   //
  52.                 delay_ms(1000);

  53.                 OLED_Refresh();

  54.         }
  55. }



復制代碼

  1. #include "stm32f10x.h"
  2. #include "DHT11.h"
  3. void DHT11_IO_IN(void)//溫濕度模塊輸入函數
  4. {
  5.     GPIO_InitTypeDef GPIO_InitStructure;

  6.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  7.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  8.     GPIO_InitStructure.GPIO_Pin = IO_DHT11;
  9.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  10.     GPIO_Init(GPIO_DHT11, &GPIO_InitStructure);
  11. }

  12. void DHT11_IO_OUT(void)//溫濕度模塊輸出函數
  13. {
  14.     GPIO_InitTypeDef GPIO_InitStructure;

  15.     GPIO_InitStructure.GPIO_Pin = IO_DHT11;
  16.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  17.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  18.     GPIO_Init(GPIO_DHT11, &GPIO_InitStructure);
  19. }

  20. //復位DHT11
  21. void DHT11_Rst(void)
  22. {
  23.     DHT11_IO_OUT(); //SET OUTPUT
  24.     DHT11_DQ_Low; //DQ=0
  25.     DelayXms(20);    //拉低至少18ms
  26.     DHT11_DQ_High; //DQ=1
  27.     DelayUs(30);     //主機拉高20~40us
  28. }

  29. //等待DHT11的回應
  30. //返回1:未檢測到DHT11的存在
  31. //返回0:存在
  32. u8 DHT11_Check(void)
  33. {
  34.     u8 retry = 0; //定義臨時變量
  35.     DHT11_IO_IN();//SET INPUT
  36.     while ((GPIO_ReadInputDataBit(GPIO_DHT11, IO_DHT11) == 1) && retry < 100) //DHT11會拉低40~80us
  37.     {
  38.         retry++;
  39.         DelayUs(1);
  40.     };
  41.     if(retry >= 100)return 1;
  42.     else retry = 0;
  43.     while ((GPIO_ReadInputDataBit(GPIO_DHT11, IO_DHT11) == 0) && retry < 100) //DHT11拉低后會再次拉高40~80us
  44.     {
  45.         retry++;
  46.         DelayUs(1);
  47.     };
  48.     if(retry >= 100)return 1;
  49.     return 0;
  50. }
  51. //從DHT11讀取一個位
  52. //返回值:1/0
  53. u8 DHT11_Read_Bit(void)
  54. {
  55.     u8 retry = 0;
  56.     while((GPIO_ReadInputDataBit(GPIO_DHT11, IO_DHT11) == 1) && retry < 100) //等待變為低電平
  57.     {
  58.         retry++;
  59.         DelayUs(1);
  60.     }
  61.     retry = 0;
  62.     while((GPIO_ReadInputDataBit(GPIO_DHT11, IO_DHT11) == 0) && retry < 100) //等待變高電平
  63.     {
  64.         retry++;
  65.         DelayUs(1);
  66.     }
  67.     DelayUs(40);//等待40us
  68.     if(GPIO_ReadInputDataBit(GPIO_DHT11, IO_DHT11) == 1)
  69.         return 1;
  70.     else
  71.         return 0;
  72. }
  73. //從DHT11讀取一個字節
  74. //返回值:讀到的數據
  75. u8 DHT11_Read_Byte(void)
  76. {
  77.     u8 i, dat;
  78.     dat = 0;
  79.     for (i = 0; i < 8; i++)
  80.     {
  81.         dat <<= 1;
  82.         dat |= DHT11_Read_Bit();
  83.     }
  84.     return dat;
  85. }

  86. //從DHT11讀取一次數據
  87. //temp:溫度值(范圍:0~50°)
  88. //humi:濕度值(范圍:20%~90%)
  89. //返回值:0,正常;1,讀取失敗
  90. u8 DHT11_Read_Data(u8 *temp, u8 *humi)
  91. {
  92.     u8 buf[5];
  93.     u8 i;
  94.     DHT11_Rst();
  95.     if(DHT11_Check() == 0)
  96.     {
  97.         for(i = 0; i < 5; i++) //讀取40位數據
  98.         {
  99.             buf[i] = DHT11_Read_Byte();
  100.         }
  101.         if((buf[0] + buf[1] + buf[2] + buf[3]) == buf[4])
  102.         {
  103.             *humi = buf[0];
  104.             *temp = buf[2];
  105.         }
  106.     }
  107.     else return 1;
  108.     return 0;
  109. }
  110. //初始化DHT11的IO口 DQ 同時檢測DHT11的存在
  111. //返回1:不存在
  112. //返回0:存在
  113. void DHT11_Init(void)
  114. {
  115.     DHT11_Rst();  //復位DHT11
  116.     DHT11_Check();//等待DHT11的回應
  117. }
復制代碼

原理圖: 無
仿真: 無
代碼: DHT11溫濕度程序.7z (197.04 KB, 下載次數: 71)

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:372579 發表于 2024-2-18 12:13 | 只看該作者
應該有一個配套的原理圖吧
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲二区在线 | 999www视频免费观看 | 成人一区二区三区在线观看 | 亚洲xx在线 | 久久综合一区 | 正在播放一区二区 | 日本小电影网站 | 久久久99精品免费观看 | 九九99靖品 | 91资源在线 | 黄色日本视频 | 香蕉大人久久国产成人av | 日韩影音 | 国产午夜精品久久久 | 国产精品一区免费 | 精品国产一级片 | 99精品网站 | 国产激情免费视频 | 午夜精品久久久久99蜜 | 亚洲精品一区二区三区蜜桃久 | 久久精品伊人 | 日韩欧美视频 | 久久视频一区 | 欧美日韩视频一区二区 | 午夜性视频 | 成人在线精品 | 国产一区视频在线 | 久久久久国产一级毛片 | 色婷婷久久久亚洲一区二区三区 | 亚洲 日本 欧美 中文幕 | 日韩久久久一区二区 | 久久婷婷色 | 精品啪啪 | 日韩精品一区二区三区中文在线 | 日本不卡一区二区三区 | 午夜欧美日韩 | 男女免费在线观看视频 | 国产91在线播放 | 一级免费毛片 | 成人久久18免费网站麻豆 | 国产一区二区视频在线 |