找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 9964|回復(fù): 4
收起左側(cè)

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

  [復(fù)制鏈接]
ID:409902 發(fā)表于 2018-10-15 13:34 | 顯示全部樓層 |閱讀模式
根據(jù)DHT11模塊與lcd模塊,采集溫度,并顯示在液晶屏上,繪制溫濕度曲線(xiàn)

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

  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 初始化函數(shù)
  17.   * @param  無(wú)
  18.   * @retval 無(wú)
  19.   */
  20. void DHT11_Init ( void )
  21. {
  22.         DHT11_GPIO_Config ();
  23.        
  24.         DHT11_Dout_1;               // 拉高GPIOB10
  25. }


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

  36.        
  37.         /*開(kāi)啟DHT11_Dout_GPIO_PORT的外設(shè)時(shí)鐘*/
  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.         /*設(shè)置引腳模式為通用推挽輸出*/
  42.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   

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

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


  49. /*
  50. * 函數(shù)名:DHT11_Mode_IPU
  51. * 描述  :使DHT11-DATA引腳變?yōu)樯侠斎肽J?br />
  52. * 輸入  :無(wú)
  53. * 輸出  :無(wú)
  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.            /*設(shè)置引腳模式為浮空輸入模式*/
  61.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;

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


  66. /*
  67. * 函數(shù)名:DHT11_Mode_Out_PP
  68. * 描述  :使DHT11-DATA引腳變?yōu)橥仆燧敵瞿J?br />
  69. * 輸入  :無(wú)
  70. * 輸出  :無(wú)
  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.         /*設(shè)置引腳模式為通用推挽輸出*/
  78.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   

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

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


  85. /*
  86. * 從DHT11讀取一個(gè)字節(jié),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低電平標(biāo)置開(kāi)始,輪詢(xún)直到從機(jī)發(fā)出 的50us 低電平 結(jié)束*/  
  95.                 while(DHT11_Dout_IN()==Bit_RESET);

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

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

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


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

  127.         /*總線(xiàn)拉高 主機(jī)延時(shí)30us*/
  128.         DHT11_Dout_1;

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

  130.         /*主機(jī)設(shè)為輸入 判斷從機(jī)響應(yīng)信號(hào)*/
  131.         DHT11_Mode_IPU();

  132.         /*判斷從機(jī)是否有低電平響應(yīng)信號(hào) 如不響應(yīng)則跳出,響應(yīng)則向下運(yùn)行*/   
  133.         if(DHT11_Dout_IN()==Bit_RESET)     
  134.         {
  135.                 /*輪詢(xún)直到從機(jī)發(fā)出 的80us 低電平 響應(yīng)信號(hào)結(jié)束*/  
  136.                 while(DHT11_Dout_IN()==Bit_RESET);

  137.                 /*輪詢(xún)直到從機(jī)發(fā)出的 80us 高電平 標(biāo)置信號(hào)結(jié)束*/
  138.                 while(DHT11_Dout_IN()==Bit_SET);

  139.                 /*開(kāi)始接收數(shù)據(jù)*/   
  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.                 /*讀取結(jié)束,引腳改為輸出模式*/
  146.                 DHT11_Mode_Out_PP();
  147.                 /*主機(jī)拉高*/
  148.                 DHT11_Dout_1;

  149.                 /*檢查讀取的數(shù)據(jù)是否正確*/
  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******************************/
復(fù)制代碼

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


回復(fù)

使用道具 舉報(bào)

ID:610401 發(fā)表于 2019-10-21 10:50 | 顯示全部樓層
和我想做的東西需要的源代碼有一些想要的。謝謝樓主
回復(fù)

使用道具 舉報(bào)

ID:670857 發(fā)表于 2019-12-23 02:31 | 顯示全部樓層
謝謝樓主分享
回復(fù)

使用道具 舉報(bào)

ID:691904 發(fā)表于 2020-5-3 00:10 | 顯示全部樓層
找了很久,這個(gè)是真的可以用。
回復(fù)

使用道具 舉報(bào)

ID:556483 發(fā)表于 2020-6-6 22:50 | 顯示全部樓層
樓主 仿真圖咋畫(huà)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表