<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        DHT11使用范例

        作者:huqin   來源:本站原創   點擊數:  更新時間:2014年03月01日   【字體:
        //****************************************************************//
        //                 DHT11使用范例
        //單片機 : AT89S52 或 STC89C52RC
        // 功能  :串口發送溫濕度數據  波特率 9600
        //硬件連接: P2.0口為通訊口連接DHT11,DHT11的電源和地連接單片機的電源和地,單片機串口加MAX232連接電腦
        // 陳永飛 轉載于2011年3月,QQ:49204743  ,信箱:baiyni888@163.com
        //****************************************************************//
        #include <reg51.h>
        #include <intrins.h>
        //
        typedef unsigned char  U8;       /* defined for unsigned 8-bits integer variable    無符號8位整型變量  */
        typedef signed   char  S8;       /* defined for signed 8-bits integer variable    有符號8位整型變量  */
        typedef unsigned int   U16;      /* defined for unsigned 16-bits integer variable    無符號16位整型變量 */
        typedef signed   int   S16;      /* defined for signed 16-bits integer variable    有符號16位整型變量 */
        typedef unsigned long  U32;      /* defined for unsigned 32-bits integer variable    無符號32位整型變量 */
        typedef signed   long  S32;      /* defined for signed 32-bits integer variable    有符號32位整型變量 */
        typedef float          F32;      /* single precision floating point variable (32bits) 單精度浮點數(32位長度) */
        typedef double         F64;      /* double precision floating point variable (64bits) 雙精度浮點數(64位長度) */
        //
        #define uchar unsigned char
        #define uint unsigned int
        #define   Data_0_time    4
        //----------------------------------------------//
        //----------------IO口定義區--------------------//
        //----------------------------------------------//
        sbit  P2_0  = P2^0 ;
        sbit  P2_1  = P2^1 ;
        sbit  P2_2  = P2^2 ;
        sbit  P2_3  = P2^3 ;
        //----------------------------------------------//
        //----------------定義區--------------------//
        //----------------------------------------------//
        U8  U8FLAG,k;
        U8  U8count,U8temp;
        U8  U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
        U8  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
        U8  U8comdata;
        U8  outdata[5];  //定義發送的字節數   
        U8  indata[5];
        U8  count, count_r=0;
        U8  str[5]={"RS232"};
        U16 U16temp1,U16temp2;
        SendData(U8 *a)
        {
         outdata[0] = a[0];
         outdata[1] = a[1];
         outdata[2] = a[2];
         outdata[3] = a[3];
         outdata[4] = a[4];
         count = 1;
         SBUF=outdata[0];
        }
               void Delay(U16 j)
            {      U8 i;
             for(;j>0;j--)
           {  
          for(i=0;i<27;i++);
           }
            }
               void  Delay_10us(void)
              {
                U8 i;
                i--;
                i--;
                i--;
                i--;
                i--;
                i--;
               }
         
                void  COM(void)
              {
            
                 U8 i;
               for(i=0;i<8;i++)   
             {
          
                 U8FLAG=2;
             //----------------------
                  P2_1=0 ;  //T
                  P2_1=1 ;  //T
             //----------------------
         
             while((!P2_0)&&U8FLAG++);
           Delay_10us();
           Delay_10us();
          // Delay_10us();
             U8temp=0;
              if(P2_0)U8temp=1;
              U8FLAG=2;
           while((P2_0)&&U8FLAG++);
            
             //----------------------
                   P2_1=0 ;  //T
                   P2_1=1 ;  //T
            //----------------------
             //超時則跳出for循環   
              if(U8FLAG==1)break;
             //判斷數據位是0還是1 
               
          // 如果高電平高過預定0高電平值則數據位為 1
             
             U8comdata<<=1;
                U8comdata|=U8temp;        //0
              }//rof
           
         }
         //--------------------------------
         //-----濕度讀取子程序 ------------
         //--------------------------------
         //----以下變量均為全局變量--------
         //----溫度高8位== U8T_data_H------
         //----溫度低8位== U8T_data_L------
         //----濕度高8位== U8RH_data_H-----
         //----濕度低8位== U8RH_data_L-----
         //----校驗 8位 == U8checkdata-----
         //----調用相關子程序如下----------
         //---- Delay();, Delay_10us();,COM();
         //--------------------------------
         void RH(void)
         {
           //主機拉低18ms
               P2_0=0;
            Delay(180);
            P2_0=1;
          //總線由上拉電阻拉高 主機延時20us
            Delay_10us();
            Delay_10us();
            Delay_10us();
            Delay_10us();
          //主機設為輸入 判斷從機響應信號
            P2_0=1;
          //判斷從機是否有低電平響應信號 如不響應則跳出,響應則向下運行  
            if(!P2_0)   //T !  
            {
            U8FLAG=2;
          //判斷從機是否發出 80us 的低電平響應信號是否結束 
            while((!P2_0)&&U8FLAG++);
            U8FLAG=2;
          //判斷從機是否發出 80us 的高電平,如發出則進入數據接收狀態
            while((P2_0)&&U8FLAG++);
          //數據接收狀態  
            COM();
            U8RH_data_H_temp=U8comdata;
            COM();
            U8RH_data_L_temp=U8comdata;
            COM();
            U8T_data_H_temp=U8comdata;
            COM();
            U8T_data_L_temp=U8comdata;
            COM();
            U8checkdata_temp=U8comdata;
            P2_0=1;
          //數據校驗
         
            U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
            if(U8temp==U8checkdata_temp)
            {
               U8RH_data_H=U8RH_data_H_temp;
               U8RH_data_L=U8RH_data_L_temp;
            U8T_data_H=U8T_data_H_temp;
               U8T_data_L=U8T_data_L_temp;
               U8checkdata=U8checkdata_temp;
            }//fi
            }//fi
         }
         
        //----------------------------------------------
        //main()功能描述:  AT89C51  11.0592MHz  串口發
        //送溫濕度數據,波特率 9600
        //----------------------------------------------
        void main()
        {
         U8  i,j;
         
         //uchar str[6]={"RS232"};
         /* 系統初始化 */
         TMOD = 0x20;   //定時器T1使用工作方式2
         TH1 = 253;        // 設置初值
         TL1 = 253;
         TR1 = 1;          // 開始計時
         SCON = 0x50;   //工作方式1,波特率9600bps,允許接收  
         ES = 1;
         EA = 1;           // 打開所以中斷  
         TI = 0;
         RI = 0;
         SendData(str) ;   //發送到串口
         Delay(1);         //延時100US(12M晶振)
         while(1)
         { 
            //------------------------
            //調用溫濕度讀取子程序
            RH();
            //串口顯示程序
            //--------------------------
            str[0]=U8RH_data_H;
            str[1]=U8RH_data_L;
            str[2]=U8T_data_H;
            str[3]=U8T_data_L;
            str[4]=U8checkdata;
            SendData(str) ;  //發送到串口 
            //讀取模塊數據周期不易小于 2S
            Delay(20000);
         }//elihw
         
        }// main
        void RSINTR() interrupt 4 using 2
        {
         U8 InPut3;
         if(TI==1) //發送中斷  
         {
          TI=0;
          if(count!=5) //發送完5位數據 
          {
           SBUF= outdata[count];
           count++;
          }
         }
         if(RI==1)  //接收中斷   
         { 
          InPut3=SBUF;
          indata[count_r]=InPut3;
          count_r++;
          RI=0;        
          if (count_r==5)//接收完4位數據
          {
          //數據接收完畢處理。
           count_r=0;
          str[0]=indata[0];
           str[1]=indata[1];
             str[2]=indata[2];
            str[3]=indata[3];
             str[4]=indata[4];
             P0=0;
          }
         }
        }

         

        參數
        條件
        Min
        Typ
        Max
        單位
        濕度
        分辨率
         
        1
        1
        1
        %RH
         
        8
         
        Bit
        重復性
         
         
        ±1
         
        %RH
        精度
        25
         
        ±4
         
        %RH
        050℃
         
         
        ±5
        %RH
        互換性
        可完全互換
        量程范圍
        0
        30
         
        90
        %RH
        25
        20
         
        90
        %RH
        50
        20
         
        80
        %RH
        響應時間
        1/e(63%)25,1m/s 空氣
        6
        10
        15
        S
        遲滯
         
         
        ±1
         
        %RH
        長期穩定性
        典型值
         
        ±1
         
        %RH/yr
        溫度
        分辨率
         
         
        1
        1
        1
        8
        8
        8
        Bit
        重復性
         
         
        ±1
         
        精度
         
        ±1
         
        ±2
        量程范圍
         
        0
         
        50
        響應時間
        1/e(63%)
        6
         
        30
        S

        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮