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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于stm32的DHT11溫濕度采集+OLED顯示

[復制鏈接]
跳轉到指定樓層
樓主
ID:688286 發表于 2020-1-27 14:06 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
直接上代碼
  1. #include "stm32f10x.h"
  2. u8 wd=0;      
  3. u8 sd=0;  
  4. int main(void)
  5. {  
  6.   int i = 0 ;
  7.   
  8.   delay_init() ;

  9.    LCD_Init() ;
  10.   
  11.    DHT11_Init() ;            //溫濕度傳感器初始化
  12.   
  13.   Key_Init() ;              //按鍵初始化
  14.   
  15. // NVIC_Config() ;           //中斷配置
  16.   
  17. // TIME3_init() ;            //定時器配置
  18.   

  19.    while(1)
  20.   {   
  21.      Key_Function() ;                     //按鍵檢測
  22.    i++ ;
  23.    if(i == 50)
  24.    {
  25.     i = 0 ;
  26.      DHT11_Read_Data(&wd,&sd) ;       //50次采集一次溫濕度,保證數據準確性
  27.    }
  28.    
  29.   Display();                      //菜單顯示
  30.    
  31.   if(wd < Low || wd > High)      //如果溫度低于最低溫度或者高于最低溫度,蜂鳴器報警
  32.   {
  33.      GPIO_SetBits(GPIOC,GPIO_Pin_14) ;
  34.   }else
  35.   {
  36.     GPIO_ResetBits(GPIOC,GPIO_Pin_14) ;
  37.   }
  38. }   
  39.   
  40. }


  41. //DTH11部分
  42. #ifndef _DTH11_H_
  43. #define _DTH11_H_
  44.    #include "stm32f10x.h"
  45. #define IO_DHT11           GPIO_Pin_15 //引入中間變量,方便移植
  46. #define GPIO_DHT11         GPIOC    //引入中間變量,方便移植

  47. #define DHT11_DQ_High    GPIO_SetBits(GPIO_DHT11,IO_DHT11)
  48. #define DHT11_DQ_Low     GPIO_ResetBits(GPIO_DHT11,IO_DHT11)

  49. void DHT11_IO_OUT(void);//溫濕度模塊輸出函數
  50. void DHT11_IO_IN(void); //溫濕度模塊輸入函數
  51. void DHT11_Init(void);  //初始化DHT11
  52. u8   DHT11_Read_Data(u8 *temp,u8 *humi); //讀取溫濕度
  53. u8   DHT11_Read_Byte(void);              //讀出一個字節
  54. u8   DHT11_Read_Bit(void);               //讀出一個位
  55. u8   DHT11_Check(void);                  //檢測是否存在DHT11
  56. void DHT11_Rst(void);                    //復位DHT11   
  57. #endif


  58. #include "DTH11.h"

  59. void DHT11_IO_IN(void)//溫濕度模塊輸入函數
  60. {
  61. GPIO_InitTypeDef GPIO_InitStructure;

  62. GPIO_InitStructure.GPIO_Pin=IO_DHT11;
  63. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
  64. GPIO_Init(GPIO_DHT11,&GPIO_InitStructure);
  65. }

  66. void DHT11_IO_OUT(void)//溫濕度模塊輸出函數
  67. {
  68. GPIO_InitTypeDef GPIO_InitStructure;

  69. GPIO_InitStructure.GPIO_Pin=IO_DHT11;
  70. GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  71. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  72. GPIO_Init(GPIO_DHT11,&GPIO_InitStructure);
  73. }

  74. //復位DHT11
  75. void DHT11_Rst(void)   
  76. {                 
  77.     DHT11_IO_OUT(); //SET OUTPUT
  78.     DHT11_DQ_Low; //DQ=0
  79.     delay_ms(20);    //拉低至少18ms
  80.     DHT11_DQ_High; //DQ=1
  81.     delay_us(30);     //主機拉高20~40us
  82. }

  83. //等待DHT11的回應
  84. //返回1:未檢測到DHT11的存在
  85. //返回0:存在
  86. u8 DHT11_Check(void)   
  87. {   
  88. u8 retry=0;//定義臨時變量
  89. DHT11_IO_IN();    //SET INPUT
  90.     while ((GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11)==1)&&retry<100)//DHT11會拉低40~80us
  91. {
  92. retry++;
  93. delay_us(1);
  94. };
  95. if(retry>=100)return 1;
  96. else retry=0;
  97.     while ((GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11)==0)&&retry<100)//DHT11拉低后會再次拉高40~80us
  98. {
  99. retry++;
  100. delay_us(1);
  101. };
  102. if(retry>=100)return 1;   
  103. return 0;
  104. }
  105. //從DHT11讀取一個位
  106. //返回值:1/0
  107. u8 DHT11_Read_Bit(void)  
  108. {
  109. u8 retry=0;
  110. while((GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11)==1)&&retry<100)//等待變為低電平
  111. {
  112. retry++;
  113. delay_us(1);
  114. }
  115. retry=0;
  116. while((GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11)==0)&&retry<100)//等待變高電平
  117. {
  118. retry++;
  119. delay_us(1);
  120. }
  121. delay_us(40);//等待40us
  122. if(GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11)==1)
  123. return 1;
  124. else
  125. return 0;   
  126. }
  127. //從DHT11讀取一個字節
  128. //返回值:讀到的數據
  129. u8 DHT11_Read_Byte(void)   
  130. {        
  131.     u8 i,dat;
  132.     dat=0;
  133. for (i=0;i<8;i++)
  134. {
  135.    dat<<=1;
  136.     dat|=DHT11_Read_Bit();
  137.     }   
  138.     return dat;
  139. }

  140. //從DHT11讀取一次數據
  141. //temp:溫度值(范圍:0~50°)
  142. //humi:濕度值(范圍:20%~90%)
  143. //返回值:0,正常;1,讀取失敗
  144. u8 DHT11_Read_Data(u8 *temp,u8 *humi)   
  145. {        
  146. u8 buf[5];
  147. u8 i;
  148. DHT11_Rst();
  149. if(DHT11_Check()==0)
  150. {
  151. for(i=0;i<5;i++)//讀取40位數據
  152. {
  153. buf[i]=DHT11_Read_Byte();
  154. }
  155. if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
  156. {
  157. *humi=buf[0];
  158. *temp=buf[2];
  159. }
  160. }else return 1;
  161. return 0;   
  162. }
  163. //初始化DHT11的IO口 DQ 同時檢測DHT11的存在
  164. //返回1:不存在
  165. //返回0:存在     
  166. void DHT11_Init(void)
  167. {     
  168. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

  169. DHT11_Rst();  //復位DHT11
  170. DHT11_Check();//等待DHT11的回應
  171. }
復制代碼


溫濕度.7z

242.04 KB, 下載次數: 113, 下載積分: 黑幣 -5

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

使用道具 舉報

沙發
ID:700180 發表于 2020-3-9 11:38 | 只看該作者
請問你用的什么型號的單片機呢
回復

使用道具 舉報

板凳
ID:144253 發表于 2021-6-18 23:38 | 只看該作者
描述太少了,有原理圖沒有
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美精产国品一二三区 | 精品自拍视频在线观看 | 日韩高清一区 | 久久精品亚洲欧美日韩久久 | 国产精品99久久久久久人 | 国产成人jvid在线播放 | 91亚洲精品在线 | 国产精久久久久久 | 久久久久久亚洲精品 | 波多野结衣一区二区三区在线观看 | 国产日韩一区二区三区 | 国产乱码精品一区二三赶尸艳谈 | 欧美专区在线视频 | av免费网址| 日韩毛片播放 | 日日碰狠狠躁久久躁婷婷 | 欧美综合视频在线 | 一区二区在线免费观看 | 日韩有码一区 | 男人的天堂久久 | 正在播放国产精品 | 国产精品99久久久久久宅男 | 精品一区二区在线观看 | 中文字幕第7页 | 久久视频精品 | 国产精品1区2区3区 一区中文字幕 | 国产精品久久久久久久久免费樱桃 | 黄色av网站免费看 | 日韩在线国产 | 人人干人人超 | 亚洲最大av网站 | 韩国电影久久 | 日韩在线小视频 | 国产精品国产a | 欧美亚洲在线 | 国产黄色在线观看 | 免费看a | 午夜国产 | 亚洲精品一区二区三区四区高清 | 密室大逃脱第六季大神版在线观看 | 一区二区三区免费网站 |