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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機驅動DHT21通過串口發送溫濕度數據

  [復制鏈接]
跳轉到指定樓層
樓主
ID:51773 發表于 2013-7-19 02:26 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機 : AT89S52 或 STC89C52RC,功能 :串口發送溫濕度數據 晶振 11.0592M 波特率 9600 ,硬件連接: P2.0口為通訊口連接DHT11,DHT11的電源和地連接單片機的電源和地,單片機串口加MAX232連接電腦 。
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. //----------------IO口定義區--------------------//
  6. sbit  P2_0  = P1^0 ;


  7. //----------------定義區--------------------//

  8. uchar  U8FLAG,k;
  9. uchar  U8count,U8temp;
  10. uchar  U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
  11. uchar  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
  12. uchar  U8comdata;
  13. uchar  outdata[5];  //定義發送的字節數     
  14. uchar  indata[5];
  15. uchar  count, count_r=0;
  16. uchar  str[5]={"RS232"};
  17. uint U16temp1,U16temp2;
  18. SendData(uchar *a)
  19. {
  20.     outdata[0] = a[0];
  21.     outdata[1] = a[1];
  22.     outdata[2] = a[2];
  23.     outdata[3] = a[3];
  24.     outdata[4] = a[4];
  25.     count = 1;
  26.     SBUF=outdata[0];
  27.     while(!TI);
  28.     TI = 0;

  29.     SBUF=outdata[1];
  30.     while(!TI);
  31.     TI = 0;

  32.     SBUF=outdata[2];
  33.     while(!TI);
  34.     TI = 0;

  35.     SBUF=outdata[3];
  36.     while(!TI);
  37.     TI = 0;

  38.     SBUF=outdata[4];
  39.     while(!TI);
  40.     TI = 0;
  41. }

  42. void Delay(uint j)
  43. {   uchar i;
  44.     for(;j>0;j--)
  45.   {     
  46.     for(i=0;i<27;i++);

  47.   }
  48. }

  49. void  Delay_10us(void)
  50. {
  51.     unsigned char a,b;
  52.     for(b=1;b>0;b--)
  53.         for(a=2;a>0;a--);
  54. }
  55.      
  56. void COM(void)
  57. {   
  58.     uchar i;   
  59.     for(i=0;i<8;i++)   
  60.     {
  61.      
  62.         U8FLAG=2;   
  63.     while((!P2_0)&&U8FLAG++);
  64.         Delay_10us();
  65.         Delay_10us();
  66.         Delay_10us();
  67.         U8temp=0;
  68.      if(P2_0)U8temp=1;
  69.         U8FLAG=2;
  70.      while((P2_0)&&U8FLAG++);
  71.     //超時則跳出for循環         
  72.      if(U8FLAG==1)break;
  73.     //判斷數據位是0還是1     
  74.         
  75.     // 如果高電平高過預定0高電平值則數據位為 1     
  76.        U8comdata<<=1;
  77.        U8comdata|=U8temp;        //0
  78.      }//rof

  79. }
  80. void RH(void)
  81. {
  82.     //主機拉低18ms
  83.     P2_0=0;
  84.     Delay(180);
  85.     P2_0=1;
  86.     //總線由上拉電阻拉高 主機延時20us
  87.     Delay_10us();
  88.     Delay_10us();
  89.     Delay_10us();
  90.     Delay_10us();
  91.     //主機設為輸入 判斷從機響應信號
  92.     P2_0=1;
  93.     //判斷從機是否有低電平響應信號 如不響應則跳出,響應則向下運行      
  94.     if(!P2_0)        //T !   
  95.     {
  96.     U8FLAG=2;
  97.     //判斷從機是否發出 80us 的低電平響應信號是否結束     
  98.     while((!P2_0)&&U8FLAG++);
  99.     U8FLAG=2;
  100.     //判斷從機是否發出 80us 的高電平,如發出則進入數據接收狀態
  101.     while((P2_0)&&U8FLAG++);
  102.     //數據接收狀態         
  103.     COM();
  104.     U8RH_data_H_temp=U8comdata;
  105.     COM();
  106.     U8RH_data_L_temp=U8comdata;
  107.     COM();
  108.     U8T_data_H_temp=U8comdata;
  109.     COM();
  110.     U8T_data_L_temp=U8comdata;
  111.     COM();
  112.     U8checkdata_temp=U8comdata;
  113.     P2_0=1;
  114.     //數據校驗
  115.     U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
  116.         if(U8temp==U8checkdata_temp)
  117.         {
  118.           U8RH_data_H=U8RH_data_H_temp;
  119.           U8RH_data_L=U8RH_data_L_temp;
  120.           U8T_data_H=U8T_data_H_temp;
  121.           U8T_data_L=U8T_data_L_temp;
  122.           U8checkdata=U8checkdata_temp;
  123.         }//fi
  124.     }//fi

  125. }


  126.      
  127. //----------------------------------------------
  128. //main()功能描述:  AT89C51  11.0592MHz  串口發
  129. //送溫濕度數據,波特率 9600
  130. //----------------------------------------------
  131. void main()
  132. {
  133.     /* 系統初始化 */
  134.     TMOD = 0x20;      //定時器T1使用工作方式2
  135.     TH1 = 253;        // 設置初值
  136.     TL1 = 253;
  137.     TR1 = 1;          // 開始計時
  138.     SCON = 0x50;      //工作方式1,波特率9600bps,允許接收   
  139.     ES = 1;
  140.     EA = 1;           // 打開所以中斷   
  141.     TI = 0;
  142.     RI = 0;
  143.     SendData(str) ;   //發送到串口
  144.     Delay(1);         //延時100US(12M晶振)
  145.     while(1)
  146.     {  
  147.        //------------------------
  148.        //調用溫濕度讀取子程序
  149.        RH();
  150.        //串口顯示程序
  151.        //--------------------------
  152.        str[0]=U8RH_data_H;
  153.        str[1]=U8RH_data_L;
  154.        str[2]=U8T_data_H;
  155.        str[3]=U8T_data_L;
  156.        str[4]=U8checkdata;
  157.        SendData(str) ;  //發送到串口  
  158.        //讀取模塊數據周期不易小于 2S
  159.        Delay(20000);
  160.     }//elihw   
  161. }// main


  162. void RSINTR() interrupt 4 using 2
  163. {
  164.     //if(TI==1) //發送中斷   
  165.     //{
  166.     //  TI = 0;
  167.     //}

  168.     if(RI==1)    //接收中斷      
  169.     {   
  170.         RI = 0;
  171.     }
  172. }
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:62967 發表于 2014-6-15 16:46 | 只看該作者
真好啊                     
回復

使用道具 舉報

板凳
ID:108333 發表于 2016-3-11 09:56 | 只看該作者
很好!!
回復

使用道具 舉報

地板
ID:115905 發表于 2016-4-22 13:10 | 只看該作者
開始測溫濕度前會顯示         uchar  str[5]={"RS232"};  這句嗎?
回復

使用道具 舉報

5#
ID:115905 發表于 2016-4-22 13:12 | 只看該作者
在測溫濕度前會顯示uchar  str[5]={"RS232"};這句嗎?
回復

使用道具 舉報

6#
ID:79544 發表于 2016-10-21 22:08 | 只看該作者
這個程序怎么不好用,顯示00
回復

使用道具 舉報

7#
ID:249763 發表于 2017-11-19 12:39 | 只看該作者
感謝樓主
回復

使用道具 舉報

8#
ID:11792 發表于 2019-8-31 10:30 | 只看該作者
謝謝大神
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: aaa一区| 91精品久久久久久久久 | 99日韩| 国产高清免费视频 | 毛片免费观看 | 男人阁久久 | 911精品美国片911久久久 | 99精品九九| 99久久夜色精品国产亚洲96 | 婷婷丁香激情 | 国产欧美精品在线 | 久久精品视频91 | 超碰97免费观看 | 成人在线视频网 | 国产日韩欧美在线观看 | 国产精品爱久久久久久久 | 久久久久九九九女人毛片 | 国际精品鲁一鲁一区二区小说 | 国产日韩欧美一区 | 91在线观| 亚洲综合精品 | 国产精品久久久久久久久久免费看 | 成人在线观看免费 | 久久久久久久久久久久91 | 欧美视频三级 | 国产伦精品一区二区三区精品视频 | 久久久久国产一区二区三区 | 成人免费小视频 | 黄网站在线播放 | 久久精品99 | 久久网亚洲 | 国产高清一区二区三区 | 精品国产一级 | 亚洲精品国产成人 | 黄片毛片免费观看 | 黄色网址在线免费观看 | 久久久日韩精品一区二区三区 | 欧美一级毛片在线播放 | 中文在线视频 | 超级乱淫av片免费播放 | 丝袜一区二区三区 |