找回密碼
         注冊(cè)會(huì)員
        搜索附件  

        DHT11.rar

         

        分享一個(gè)51單片機(jī)的溫濕度傳感器DTH11的操作:
        分享一個(gè)51單片機(jī)的溫濕度傳感器DTH11的操作,經(jīng)過嚴(yán)格測(cè)試很好用

        1. //****************************************************************//
        2. //                 DHT11使用范例
        3. //單片機(jī) : AT89S52 或 STC89C52RC
        4. // 功能  :串口發(fā)送溫濕度數(shù)據(jù)  波特率 9600
        5. //硬件連接: P2.0口為通訊口連接DHT11,DHT11的電源和地連接單片機(jī)的電源和地,單片機(jī)串口加MAX232連接電腦
        6. // 公司  :濟(jì)南聯(lián)誠(chéng)創(chuàng)發(fā)科技有限公司   
        7. //****************************************************************//
        8. #include <reg51.h>
        9. #include <intrins.h>
        10. //
        11. typedef unsigned char  U8;       /* defined for unsigned 8-bits integer variable    無符號(hào)8位整型變量  */
        12. typedef signed   char  S8;       /* defined for signed 8-bits integer variable    有符號(hào)8位整型變量  */
        13. typedef unsigned int   U16;      /* defined for unsigned 16-bits integer variable    無符號(hào)16位整型變量 */
        14. typedef signed   int   S16;      /* defined for signed 16-bits integer variable    有符號(hào)16位整型變量 */
        15. typedef unsigned long  U32;      /* defined for unsigned 32-bits integer variable    無符號(hào)32位整型變量 */
        16. typedef signed   long  S32;      /* defined for signed 32-bits integer variable    有符號(hào)32位整型變量 */
        17. typedef float          F32;      /* single precision floating point variable (32bits) 單精度浮點(diǎn)數(shù)(32位長(zhǎng)度) */
        18. typedef double         F64;      /* double precision floating point variable (64bits) 雙精度浮點(diǎn)數(shù)(64位長(zhǎng)度) */
        19. //
        20. #define uchar unsigned char
        21. #define uint unsigned int
        22. #define   Data_0_time    4
        23. //----------------------------------------------//
        24. //----------------IO口定義區(qū)--------------------//
        25. //----------------------------------------------//
        26. sbit  P2_0  = P2^0 ;
        27. sbit  P2_1  = P2^1 ;
        28. sbit  P2_2  = P2^2 ;
        29. sbit  P2_3  = P2^3 ;
        30. //----------------------------------------------//
        31. //----------------定義區(qū)--------------------//
        32. //----------------------------------------------//
        33. U8  U8FLAG,k;
        34. U8  U8count,U8temp;
        35. U8  U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
        36. U8  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
        37. U8  U8comdata;
        38. U8  outdata[5];  //定義發(fā)送的字節(jié)數(shù)   
        39. U8  indata[5];
        40. U8  count, count_r=0;
        41. U8  str[5]={"RS232"};
        42. U16 U16temp1,U16temp2;
        43. SendData(U8 *a)
        44. {
        45. outdata[0] = a[0];
        46. outdata[1] = a[1];
        47. outdata[2] = a[2];
        48. outdata[3] = a[3];
        49. outdata[4] = a[4];
        50. count = 1;
        51. SBUF=outdata[0];
        52. }
        53.        void Delay(U16 j)
        54.     {      U8 i;
        55.      for(;j>0;j--)
        56.    {  
        57.   for(i=0;i<27;i++);
        58.    }
        59.     }
        60.        void  Delay_10us(void)
        61.       {
        62.         U8 i;
        63.         i--;
        64.         i--;
        65.         i--;
        66.         i--;
        67.         i--;
        68.         i--;
        69.        }

        70.         void  COM(void)
        71.       {
        72.      
        73.          U8 i;
        74.        for(i=0;i<8;i++)   
        75.      {
        76.   
        77.          U8FLAG=2;
        78.      //----------------------
        79.           P2_1=0 ;  //T
        80.           P2_1=1 ;  //T
        81.      //----------------------

        82.      while((!P2_0)&&U8FLAG++);
        83.    Delay_10us();
        84.    Delay_10us();
        85.   // Delay_10us();
        86.      U8temp=0;
        87.       if(P2_0)U8temp=1;
        88.       U8FLAG=2;
        89.    while((P2_0)&&U8FLAG++);
        90.    
        91.      //----------------------
        92.            P2_0=0 ;  //T
        93.            P2_0=1 ;  //T
        94.     //----------------------
        95.      //超時(shí)則跳出for循環(huán)   
        96.       if(U8FLAG==1)break;
        97.      //判斷數(shù)據(jù)位是0還是1  
        98.         
        99.   // 如果高電平高過預(yù)定0高電平值則數(shù)據(jù)位為 1
        100.       
        101.      U8comdata<<=1;
        102.         U8comdata|=U8temp;        //0
        103.       }//rof
        104.    
        105. }
        106. //--------------------------------
        107. //-----濕度讀取子程序 ------------
        108. //--------------------------------
        109. //----以下變量均為全局變量--------
        110. //----溫度高8位== U8T_data_H------
        111. //----溫度低8位== U8T_data_L------
        112. //----濕度高8位== U8RH_data_H-----
        113. //----濕度低8位== U8RH_data_L-----
        114. //----校驗(yàn) 8位 == U8checkdata-----
        115. //----調(diào)用相關(guān)子程序如下----------
        116. //---- Delay();, Delay_10us();,COM();
        117. //--------------------------------
        118. void RH(void)
        119. {
        120.    //主機(jī)拉低18ms
        121.        P2_0=0;
        122.     Delay(180);
        123.     P2_0=1;
        124.   //總線由上拉電阻拉高 主機(jī)延時(shí)20us
        125.     Delay_10us();
        126.     Delay_10us();
        127.     Delay_10us();
        128.     Delay_10us();
        129.   //主機(jī)設(shè)為輸入 判斷從機(jī)響應(yīng)信號(hào)
        130.     P2_0=1;
        131.   //判斷從機(jī)是否有低電平響應(yīng)信號(hào) 如不響應(yīng)則跳出,響應(yīng)則向下運(yùn)行   
        132.     if(!P2_0)   //T !   
        133.     {
        134.     U8FLAG=2;
        135.   //判斷從機(jī)是否發(fā)出 80us 的低電平響應(yīng)信號(hào)是否結(jié)束  
        136.     while((!P2_0)&&U8FLAG++);
        137.     U8FLAG=2;
        138.   //判斷從機(jī)是否發(fā)出 80us 的高電平,如發(fā)出則進(jìn)入數(shù)據(jù)接收狀態(tài)
        139.     while((P2_0)&&U8FLAG++);
        140.   //數(shù)據(jù)接收狀態(tài)   
        141.     COM();
        142.     U8RH_data_H_temp=U8comdata;
        143.     COM();
        144.     U8RH_data_L_temp=U8comdata;
        145.     COM();
        146.     U8T_data_H_temp=U8comdata;
        147.     COM();
        148.     U8T_data_L_temp=U8comdata;
        149.     COM();
        150.     U8checkdata_temp=U8comdata;
        151.     P2_0=1;
        152.   //數(shù)據(jù)校驗(yàn)
        153.   
        154.     U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
        155.     if(U8temp==U8checkdata_temp)
        156.     {
        157.        U8RH_data_H=U8RH_data_H_temp;
        158.        U8RH_data_L=U8RH_data_L_temp;
        159.     U8T_data_H=U8T_data_H_temp;
        160.        U8T_data_L=U8T_data_L_temp;
        161.        U8checkdata=U8checkdata_temp;
        162.     }//fi
        163.     }//fi
        164. }

        165. //----------------------------------------------
        166. //main()功能描述:  AT89C51  11.0592MHz  串口發(fā)
        167. //送溫濕度數(shù)據(jù),波特率 9600
        168. //----------------------------------------------
        169. void main()
        170. {
        171. U8  i,j;

        172. //uchar str[6]={"RS232"};
        173. /* 系統(tǒng)初始化 */
        174. TMOD = 0x20;   //定時(shí)器T1使用工作方式2
        175. TH1 = 253;        // 設(shè)置初值
        176. TL1 = 253;
        177. TR1 = 1;          // 開始計(jì)時(shí)
        178. SCON = 0x50;   //工作方式1,波特率9600bps,允許接收   
        179. ES = 1;
        180. EA = 1;           // 打開所以中斷   
        181. TI = 0;
        182. RI = 0;
        183. SendData(str) ;   //發(fā)送到串口
        184. Delay(1);         //延時(shí)100US(12M晶振)
        185. while(1)
        186. {  
        187.     //------------------------
        188.     //調(diào)用溫濕度讀取子程序
        189.     RH();
        190.     //串口顯示程序
        191.     //--------------------------
        192.     str[0]=U8RH_data_H;
        193.     str[1]=U8RH_data_L;
        194.     str[2]=U8T_data_H;
        195.     str[3]=U8T_data_L;
        196.     str[4]=U8checkdata;
        197.     SendData(str) ;  //發(fā)送到串口  
        198.     //讀取模塊數(shù)據(jù)周期不易小于 2S
        199.     Delay(21000);
        200. }//elihw

        201. }// main
        202. void RSINTR() interrupt 4 using 2
        203. {
        204. U8 InPut3;
        205. if(TI==1) //發(fā)送中斷   
        206. {
        207.   TI=0;
        208.   if(count!=5) //發(fā)送完5位數(shù)據(jù)  
        209.   {
        210.    SBUF= outdata[count];
        211.    count++;
        212.   }
        213. }
        214. if(RI==1)  //接收中斷   
        215. {
        216.   InPut3=SBUF;
        217.   indata[count_r]=InPut3;
        218.   count_r++;
        219.   RI=0;         
        220.   if (count_r==5)//接收完4位數(shù)據(jù)
        221.   {
        222.   //數(shù)據(jù)接收完畢處理。
        223.    count_r=0;
        224. str[0]=indata[0];
        225.    str[1]=indata[1];
        226.      str[2]=indata[2];
        227.     str[3]=indata[3];

        228.     str[4]=indata[4];
        229.      P0=0;
        230.   }
        231. }
        232. }
        復(fù)制代碼

        QQ|手機(jī)版|MCU資訊論壇 ( 京ICP備18035221號(hào)-2 )|網(wǎng)站地圖

        GMT+8, 2025-3-18 13:02 , Processed in 0.039222 second(s), 8 queries , Redis On.

        Powered by Discuz! X3.5

        © 2001-2024 Discuz! Team.

        返回頂部
        国产原创精品视频| 免费无遮挡禁18污污网站| 无码人妻精品一区二区三区99仓本| 亚洲sss综合天堂久久久| 中文字幕精品亚洲无线码一区 | 国产精品日韩欧美久久综合| 精品午夜福利1000在线观看| 亚洲精品99久久久久中文字幕 | 91麻豆精品国产| 丁香色婷婷国产精品视频| 日韩一区二区三区精品| 久久精品亚洲精品国产色婷| 91精品久久久久久无码| 午夜亚洲av永久无码精品| 青青草原精品99久久精品66| 91亚洲国产成人久久精品| 影院无码人妻精品一区二区| 成人精品视频一区二区三区| 精品久久久久一区二区三区| 亚洲国产精品高清久久久| 91精品国产麻豆国产自产在线| 亚洲精品尤物yw在线影院| 51午夜精品免费视频| 欧美精品一区二区三区免费| 精品福利一区二区三区免费视频| 国产精品99久久不卡| 亚洲国产精品无码专区| 高清在线国产午夜精品| 69福利青草视频在线观看| 欧美精品免费在线| 亚洲国产精品综合久久网络| 国产办公室秘书无码精品99| 久久亚洲精品无码观看不卡| 国产精品毛片一区二区三区| 欧美精品三区| 精品国产污污免费网站| 免费在线观看黄色小视频| 亚洲永久永久永久永久永久精品| 中文国产成人精品久久不卡 | 久久精品国产精品亚洲人人| 久久丫精品国产亚洲av不卡|