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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2388|回復: 0
收起左側

一線總線溫濕度傳感器AM2301 STM32驅動程序

[復制鏈接]
ID:891056 發表于 2021-5-20 13:39 | 顯示全部樓層 |閱讀模式
一線總線溫濕度傳感器AM2301驅動程序

單片機源程序如下:
  1. #include "AM23XX.h"
  2. uint8_t a=0;
  3. uint8_t flag11=0;
  4. uint16_t count =0;
  5. /*
  6. * 函數名:DHT11_GPIO_Config
  7. * 描述  :配置DHT11用到的I/O口
  8. * 輸入  :無
  9. * 輸出  :無
  10. */
  11. void delay(int tt)
  12. {           int j;
  13.     for(;tt!=0;tt--)
  14.                 for(j=44;j>0;j--);
  15. }
  16. void DHT11_GPIO_Config(void)
  17. {               
  18.         /*定義一個GPIO_InitTypeDef類型的結構體*/
  19.         GPIO_InitTypeDef GPIO_InitStructure;

  20.         /*開啟GPIOD的外設時鐘*/
  21.         RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);

  22.         /*選擇要控制的GPIOD引腳*/                                                                                                                          
  23.           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;       

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

  26.         /*設置引腳速率為50MHz */   
  27.           GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;

  28.         /*調用庫函數,初始化GPIOD*/
  29.           GPIO_Init(GPIOA, &GPIO_InitStructure);                  

  30.         /* 拉高GPIOD12        */
  31.         GPIO_SetBits(GPIOA, GPIO_Pin_5);
  32.         printf("DHT11 配置完!!");         
  33. }

  34. /*
  35. * 函數名:DHT11_Mode_IPU
  36. * 描述  :使DHT11-DATA引腳變為輸入模式
  37. * 輸入  :無
  38. * 輸出  :無
  39. */
  40. static void DHT11_Mode_IN_FLOATING(void)
  41. {
  42.           GPIO_InitTypeDef GPIO_InitStructure;

  43.                   /*選擇要控制的GPIOD引腳*/       
  44.           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;

  45.            /*設置引腳模式為浮空輸入模式*/
  46.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING ;

  47.           /*調用庫函數,初始化GPIOD*/
  48.           GPIO_Init(GPIOA, &GPIO_InitStructure);         
  49. }

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

  59.                  /*選擇要控制的GPIOD引腳*/                                                                                                                          
  60.           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;       

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

  63.         /*設置引腳速率為50MHz */   
  64.           GPIO_InitStructure.GPIO_Speed =GPIO_Speed_10MHz;

  65.         /*調用庫函數,初始化GPIOD*/
  66.           GPIO_Init(GPIOA, &GPIO_InitStructure);                  
  67. }
  68. //-----------------------------------------------------------------------------------------------
  69. //-----------------------------------------------------------------------------------------------
  70. //void SDA_Pin_Output_High(void)
  71. //{
  72. //        GPIOA->DDR |= SDA_Pin;                //輸出模式
  73. //        GPIOA->ODR |= SDA_Pin;                //輸出'1'       
  74. //        GPIOA->CR1 |= SDA_Pin;                //推挽模式  開漏端口此位無效
  75. //        GPIOA->CR2 |= SDA_Pin;                //高速輸出
  76. //}
  77. //
  78. //void SDA_Pin_Output_Low(void)
  79. //{
  80. //        GPIOA->DDR |= SDA_Pin;                 //輸出模式
  81. //        GPIOA->ODR &= (~SDA_Pin);                //輸出'0'       
  82. //        GPIOA->CR1 |= SDA_Pin;                  //推挽模式  開漏端口此位無效
  83. //        GPIOA->CR2 |= SDA_Pin;                 //高速輸出
  84. //}
  85. //
  86. //void SDA_Pin_IN_FLOATING(void)
  87. //{
  88. //        GPIOA->CR2 &= ~(SDA_Pin);                        //禁止外部中斷
  89. //        GPIOA->DDR &= ~(SDA_Pin);                        //輸入模式
  90. //        GPIOA->CR1 &= ~(SDA_Pin);                        //懸浮輸入
  91. //}
  92. //-----------------------------------------------------------------------------------------------
  93. static uint8_t Read_Byte(void)
  94. {          

  95.             uint8_t i, temp=0;

  96.          for(i=0;i<8;i++)   
  97.          {
  98.            /*每bit以50us低電平標置開始,輪詢直到從機發出 的50us 低電平 結束*/  
  99.             while(DHT11_DATA_IN()==Bit_RESET);//{if(++count>5000) break;};
  100.                  
  101.                  /*DHT11 以27~28us的高電平表示“0”,以70us高電平表示“1”,
  102.                           通過檢測60us后的電平即可區別這兩個狀態*/

  103.                 //delay(5); //延時60us
  104.                 SysTickDelay(40);                             
  105.        
  106.                   if(DHT11_DATA_IN()==Bit_SET)//60us后仍為高電平表示數據“1”
  107.                    {
  108.                            /*輪詢直到從機發出的剩余的 30us 高電平結束*/
  109.                                     while(DHT11_DATA_IN() ==Bit_SET);//{if(++count>500) break;}
  110.                                  // SysTickDelay(1);
  111.                                  temp|=(uint8_t)(0x01<<(7-i));  //把第7-i位置1
  112.                        
  113.                    }
  114.                    else         //60us后為低電平表示數據“0”
  115.                    {//SysTickDelay(1);                          
  116.                              temp&=(uint8_t)~(0x01<<(7-i)); //把第7-i位置0
  117.                    }
  118.          }
  119.           return temp;
  120. }

  121. uint8_t Read_DHT11(DHT11_Data_TypeDef *DHT11_Data)
  122. {  

  123.         DHT11_Mode_Out_PP();
  124.                 DHT11_DATA_OUT(HIGH);
  125.                 SysTickDelay(500000);
  126.         /*主機拉低*/
  127.         //DHT11_Mode_Out_PP();
  128.           DHT11_DATA_OUT(LOW);
  129.    //*延時18ms*/800US
  130.            SysTickDelay(2000);        //一定要2MS 的起始信號
  131.   //        DHT11_Mode_IN_FLOATING();
  132.    /*總線拉高 主機延時30us*/
  133.            //DHT11_DATA_OUT(HIGH);
  134.         DHT11_DATA_OUT(HIGH);
  135.           SysTickDelay(30);
  136.            /*主機設為輸入 判斷從機響應信號*/
  137.    //        DHT11_Mode_IN_FLOATING();
  138.         DHT11_Mode_IN_FLOATING();
  139.   //delay(3);
  140. /*判斷從機是否有低電平響應信號 如不響應則跳出,響應則向下運行*/   
  141.   //while(DHT11_DATA_IN() ==Bit_SET){a++;if(a>10) break;}
  142.    SysTickDelay(10);
  143.                         if(DHT11_DATA_IN()==Bit_RESET)
  144.                                 {       
  145.                                           /*輪詢直到從機發出的 80us 高電平 標置信號結束*/
  146.                                         count =0;
  147.                                         while(DHT11_DATA_IN()==Bit_RESET);// {if(++count>500) break;}
  148.                                         count =0;
  149.                                         while(DHT11_DATA_IN()==Bit_SET);//{if(++count>500) break;}

  150.           /*輪詢直到從機發出的 80us 高電平 標置信號結束*/
  151.           /*開始接收數據*/   
  152.                                           DHT11_Data->humi_int= Read_Byte();           //0
  153.                                                                
  154.                                          DHT11_Data->humi_deci= Read_Byte();          //1
  155.                                
  156.                                          DHT11_Data->temp_int= Read_Byte();                         //2

  157.                                          DHT11_Data->temp_deci= Read_Byte();                        //3
  158.                                                 
  159.                                          DHT11_Data->check_sum= Read_Byte();
  160.                                                                                    
  161.                  delay(1);
  162.                          /*讀取結束,引腳改為輸出模式*/
  163.                    DHT11_Mode_Out_PP();
  164.                    /*主機拉高*/
  165.                  DHT11_DATA_OUT(HIGH);
  166.                  DHT11_Data->check_sum_tep=DHT11_Data->humi_int + DHT11_Data->humi_deci + DHT11_Data->temp_int+ DHT11_Data->temp_deci;
  167.                    /*檢查讀取的數據是否正確*/
  168.                  if(DHT11_Data->check_sum == DHT11_Data->check_sum_tep)
  169.                           {
  170.                         //        display(DHT11_Data->temp_int,DHT11_Data->humi_int) ;
  171.                         //        delay(200000);
  172.                         //        display(DHT11_Data->temp_deci,DHT11_Data->humi_deci) ;
  173.                         //        delay(200000);
  174.                         /* AM23XX 處理程序********/
  175.                                 DHT11_Data->hh = DHT11_Data->humi_int;
  176.                                 DHT11_Data->hh <<= 8;
  177.                                 DHT11_Data->hh |= DHT11_Data->humi_deci;
  178.                                 if(0>DHT11_Data->hh||DHT11_Data->hh>=1000)DHT11_Data->hh=999;
  179.                                

  180.                                 DHT11_Data->tem = DHT11_Data->temp_int;
  181.                                 DHT11_Data->tem <<= 8;
  182.                                 DHT11_Data->tem |= DHT11_Data->temp_deci;
  183.                                 if(0>DHT11_Data->tem||DHT11_Data->tem>=1000)DHT11_Data->tem=999;


  184.                                 DHT11_Data->hh_10=DHT11_Data->hh/10;
  185.                                 DHT11_Data->tem_10 =DHT11_Data->tem/10;


  186.                                 return SUCCESS;

  187.                         }
  188.                   else
  189.                           {
  190.                 //        printf("和值不相等\n");
  191.                         return ERROR;
  192.                         }
  193.    }
  194.    else
  195.            {               
  196.                         return ERROR;
  197.                 }
  198.                                    
  199. }

  200.           


  201. /*************************************END OF FILE******************************/
復制代碼
51hei.png
所有資料51hei提供下載:
AM2301.7z (199.84 KB, 下載次數: 26)

評分

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

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人黄色在线视频 | 久久久一 | 亚洲国产欧美一区 | 成人av播放| 国产乱码精品一区二区三区中文 | 久久久久亚洲 | 国产精品久久久久不卡 | 一区二区精品 | 天天操夜夜操免费视频 | 亚洲国产欧美国产综合一区 | 亚洲高清视频在线观看 | 黄色网址在线播放 | 91一区二区三区 | 美女天天操 | 日本一级淫片免费啪啪3 | 成人自拍视频 | 亚洲国产精品99久久久久久久久 | 91影片| 中国大陆高清aⅴ毛片 | 久草资源在线视频 | 日韩视频高清 | 欧美xxxx在线 | 亚洲黄色高清视频 | 国产精品乱码一区二三区小蝌蚪 | 黄色一级片在线播放 | 日韩福利在线 | 天天成人综合网 | 91在线 | 欧美日韩亚洲国产 | 中文字幕在线第一页 | 97人人干 | 91传媒在线观看 | 国产精品99久久久久久宅男 | 国产三级一区二区 | 日韩欧美一级精品久久 | av网站免费 | 国产日韩一区二区三免费高清 | 国产精品九九九 | 亚洲综合色视频在线观看 | 99久久影院| 激情毛片|