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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于stm32f103的dht11溫濕度采集與液晶屏顯示源碼

  [復制鏈接]
跳轉到指定樓層
樓主
ID:409902 發表于 2018-10-15 13:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
根據DHT11模塊與lcd模塊,采集溫度,并顯示在液晶屏上,繪制溫濕度曲線

單片機源程序如下:
  1. /**
  2.   ******************************************************************************
  3.   * @file    bsp_dht11.c
  4.   * @author  fire
  5.   * @version V1.0
  6.   * @date    2015-xx-xx
  7.   * @brief   溫濕度傳感器應用函數接口

  8.   */




  9. #include "./dht11/bsp_dht11.h"
  10. #include "./systick/bsp_SysTick.h"



  11. static void                           DHT11_GPIO_Config                       ( void );
  12. static void                           DHT11_Mode_IPU                          ( void );
  13. static void                           DHT11_Mode_Out_PP                       ( void );
  14. static uint8_t                        DHT11_ReadByte                          ( void );



  15. /**
  16.   * @brief  DHT11 初始化函數
  17.   * @param  無
  18.   * @retval 無
  19.   */
  20. void DHT11_Init ( void )
  21. {
  22.         DHT11_GPIO_Config ();
  23.        
  24.         DHT11_Dout_1;               // 拉高GPIOB10
  25. }


  26. /*
  27. * 函數名:DHT11_GPIO_Config
  28. * 描述  :配置DHT11用到的I/O口
  29. * 輸入  :無
  30. * 輸出  :無
  31. */
  32. static void DHT11_GPIO_Config ( void )
  33. {               
  34.         /*定義一個GPIO_InitTypeDef類型的結構體*/
  35.         GPIO_InitTypeDef GPIO_InitStructure;

  36.        
  37.         /*開啟DHT11_Dout_GPIO_PORT的外設時鐘*/
  38.   DHT11_Dout_SCK_APBxClock_FUN ( DHT11_Dout_GPIO_CLK, ENABLE );       

  39.         /*選擇要控制的DHT11_Dout_GPIO_PORT引腳*/                                                                                                                          
  40.           GPIO_InitStructure.GPIO_Pin = DHT11_Dout_GPIO_PIN;       

  41.         /*設置引腳模式為通用推挽輸出*/
  42.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   

  43.         /*設置引腳速率為50MHz */   
  44.           GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  45.         /*調用庫函數,初始化DHT11_Dout_GPIO_PORT*/
  46.           GPIO_Init ( DHT11_Dout_GPIO_PORT, &GPIO_InitStructure );                  
  47.        
  48. }


  49. /*
  50. * 函數名:DHT11_Mode_IPU
  51. * 描述  :使DHT11-DATA引腳變為上拉輸入模式
  52. * 輸入  :無
  53. * 輸出  :無
  54. */
  55. static void DHT11_Mode_IPU(void)
  56. {
  57.           GPIO_InitTypeDef GPIO_InitStructure;

  58.                   /*選擇要控制的DHT11_Dout_GPIO_PORT引腳*/       
  59.           GPIO_InitStructure.GPIO_Pin = DHT11_Dout_GPIO_PIN;

  60.            /*設置引腳模式為浮空輸入模式*/
  61.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;

  62.           /*調用庫函數,初始化DHT11_Dout_GPIO_PORT*/
  63.           GPIO_Init(DHT11_Dout_GPIO_PORT, &GPIO_InitStructure);         
  64.        
  65. }


  66. /*
  67. * 函數名:DHT11_Mode_Out_PP
  68. * 描述  :使DHT11-DATA引腳變為推挽輸出模式
  69. * 輸入  :無
  70. * 輸出  :無
  71. */
  72. static void DHT11_Mode_Out_PP(void)
  73. {
  74.         GPIO_InitTypeDef GPIO_InitStructure;

  75.                  /*選擇要控制的DHT11_Dout_GPIO_PORT引腳*/                                                                                                                          
  76.           GPIO_InitStructure.GPIO_Pin = DHT11_Dout_GPIO_PIN;       

  77.         /*設置引腳模式為通用推挽輸出*/
  78.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   

  79.         /*設置引腳速率為50MHz */   
  80.           GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  81.         /*調用庫函數,初始化DHT11_Dout_GPIO_PORT*/
  82.           GPIO_Init(DHT11_Dout_GPIO_PORT, &GPIO_InitStructure);                  
  83.        
  84. }


  85. /*
  86. * 從DHT11讀取一個字節,MSB先行
  87. */
  88. static uint8_t DHT11_ReadByte ( void )
  89. {
  90.         uint8_t i, temp=0;
  91.        

  92.         for(i=0;i<8;i++)   
  93.         {         
  94.                 /*每bit以50us低電平標置開始,輪詢直到從機發出 的50us 低電平 結束*/  
  95.                 while(DHT11_Dout_IN()==Bit_RESET);

  96.                 /*DHT11 以26~28us的高電平表示“0”,以70us高電平表示“1”,
  97.                  *通過檢測 x us后的電平即可區別這兩個狀 ,x 即下面的延時
  98.                  */
  99.                 Delay_us(40); //延時x us 這個延時需要大于數據0持續的時間即可                     

  100.                 if(DHT11_Dout_IN()==Bit_SET)/* x us后仍為高電平表示數據“1” */
  101.                 {
  102.                         /* 等待數據1的高電平結束 */
  103.                         while(DHT11_Dout_IN()==Bit_SET);

  104.                         temp|=(uint8_t)(0x01<<(7-i));  //把第7-i位置1,MSB先行
  105.                 }
  106.                 else         // x us后為低電平表示數據“0”
  107.                 {                          
  108.                         temp&=(uint8_t)~(0x01<<(7-i)); //把第7-i位置0,MSB先行
  109.                 }
  110.         }
  111.        
  112.         return temp;
  113.        
  114. }


  115. /*
  116. * 一次完整的數據傳輸為40bit,高位先出
  117. * 8bit 濕度整數 + 8bit 濕度小數 + 8bit 溫度整數 + 8bit 溫度小數 + 8bit 校驗和
  118. */
  119. uint8_t DHT11_Read_TempAndHumidity(DHT11_Data_TypeDef *DHT11_Data)
  120. {  
  121.         /*輸出模式*/
  122.         DHT11_Mode_Out_PP();
  123.         /*主機拉低*/
  124.         DHT11_Dout_0;
  125.         /*延時18ms*/
  126.         Delay_ms(18);

  127.         /*總線拉高 主機延時30us*/
  128.         DHT11_Dout_1;

  129.         Delay_us(30);   //延時30us

  130.         /*主機設為輸入 判斷從機響應信號*/
  131.         DHT11_Mode_IPU();

  132.         /*判斷從機是否有低電平響應信號 如不響應則跳出,響應則向下運行*/   
  133.         if(DHT11_Dout_IN()==Bit_RESET)     
  134.         {
  135.                 /*輪詢直到從機發出 的80us 低電平 響應信號結束*/  
  136.                 while(DHT11_Dout_IN()==Bit_RESET);

  137.                 /*輪詢直到從機發出的 80us 高電平 標置信號結束*/
  138.                 while(DHT11_Dout_IN()==Bit_SET);

  139.                 /*開始接收數據*/   
  140.                 DHT11_Data->humi_int= DHT11_ReadByte();

  141.                 DHT11_Data->humi_deci= DHT11_ReadByte();

  142.                 DHT11_Data->temp_int= DHT11_ReadByte();

  143.                 DHT11_Data->temp_deci= DHT11_ReadByte();

  144.                 DHT11_Data->check_sum= DHT11_ReadByte();


  145.                 /*讀取結束,引腳改為輸出模式*/
  146.                 DHT11_Mode_Out_PP();
  147.                 /*主機拉高*/
  148.                 DHT11_Dout_1;

  149.                 /*檢查讀取的數據是否正確*/
  150.                 if(DHT11_Data->check_sum == DHT11_Data->humi_int + DHT11_Data->humi_deci + DHT11_Data->temp_int+ DHT11_Data->temp_deci)
  151.                         return SUCCESS;
  152.                 else
  153.                         return ERROR;
  154.         }
  155.        
  156.         else
  157.                 return ERROR;
  158.        
  159. }

  160.           


  161. /*************************************END OF FILE******************************/
復制代碼

所有資料51hei提供下載:
DHT11溫濕度傳感器實驗.rar (351.77 KB, 下載次數: 352)


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

使用道具 舉報

沙發
ID:610401 發表于 2019-10-21 10:50 | 只看該作者
和我想做的東西需要的源代碼有一些想要的。謝謝樓主
回復

使用道具 舉報

板凳
ID:670857 發表于 2019-12-23 02:31 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

地板
ID:691904 發表于 2020-5-3 00:10 | 只看該作者
找了很久,這個是真的可以用。
回復

使用道具 舉報

5#
ID:556483 發表于 2020-6-6 22:50 | 只看該作者
樓主 仿真圖咋畫
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产免费一区二区三区五区 | 亚洲国产成人精品久久久国产成人一区 | 欧美日韩一区二区视频在线观看 | 亚洲第一成人影院 | 操人视频在线观看 | 日本中文字幕在线观看 | 中文字幕日韩欧美一区二区三区 | 看毛片的网站 | 作爱视频免费观看 | www97影院| 在线精品国产 | 成人一区精品 | 欧美日韩成人在线 | 精品国产精品三级精品av网址 | 欧洲一区二区视频 | 99av成人精品国语自产拍 | 国产精品毛片一区二区三区 | 欧洲一区二区在线 | 黄 色 毛片免费 | 亚洲激情在线观看 | 国产丝袜一区二区三区免费视频 | 久久久久久久久久影视 | 毛片免费观看视频 | 亚洲免费视频在线观看 | 国外成人在线视频网站 | 黄网站免费在线 | 91在线| 国产三级日本三级 | 国产亚洲一区二区三区 | 久久网日本| 国产精品久久久爽爽爽麻豆色哟哟 | 亚洲视频一区在线 | 久久久久国产 | 免费观看一级特黄欧美大片 | 免费的av | 欧美视频二区 | 成人区一区二区三区 | 国产一区二 | h视频在线免费 | 久在线视频播放免费视频 | 精品国产三级 |