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

標(biāo)題: 51單片機(jī)驅(qū)動DHT21通過串口發(fā)送溫濕度數(shù)據(jù) [打印本頁]

作者: xueren    時間: 2013-7-19 02:26
標(biāo)題: 51單片機(jī)驅(qū)動DHT21通過串口發(fā)送溫濕度數(shù)據(jù)
單片機(jī) : AT89S52 或 STC89C52RC,功能 :串口發(fā)送溫濕度數(shù)據(jù) 晶振 11.0592M 波特率 9600 ,硬件連接: P2.0口為通訊口連接DHT11,DHT11的電源和地連接單片機(jī)的電源和地,單片機(jī)串口加MAX232連接電腦 。
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int

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


  7. //----------------定義區(qū)--------------------//

  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];  //定義發(fā)送的字節(jié)數(shù)     
  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循環(huán)         
  72.      if(U8FLAG==1)break;
  73.     //判斷數(shù)據(jù)位是0還是1     
  74.         
  75.     // 如果高電平高過預(yù)定0高電平值則數(shù)據(jù)位為 1     
  76.        U8comdata<<=1;
  77.        U8comdata|=U8temp;        //0
  78.      }//rof

  79. }
  80. void RH(void)
  81. {
  82.     //主機(jī)拉低18ms
  83.     P2_0=0;
  84.     Delay(180);
  85.     P2_0=1;
  86.     //總線由上拉電阻拉高 主機(jī)延時20us
  87.     Delay_10us();
  88.     Delay_10us();
  89.     Delay_10us();
  90.     Delay_10us();
  91.     //主機(jī)設(shè)為輸入 判斷從機(jī)響應(yīng)信號
  92.     P2_0=1;
  93.     //判斷從機(jī)是否有低電平響應(yīng)信號 如不響應(yīng)則跳出,響應(yīng)則向下運(yùn)行      
  94.     if(!P2_0)        //T !   
  95.     {
  96.     U8FLAG=2;
  97.     //判斷從機(jī)是否發(fā)出 80us 的低電平響應(yīng)信號是否結(jié)束     
  98.     while((!P2_0)&&U8FLAG++);
  99.     U8FLAG=2;
  100.     //判斷從機(jī)是否發(fā)出 80us 的高電平,如發(fā)出則進(jìn)入數(shù)據(jù)接收狀態(tài)
  101.     while((P2_0)&&U8FLAG++);
  102.     //數(shù)據(jù)接收狀態(tài)         
  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.     //數(shù)據(jù)校驗(yàn)
  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  串口發(fā)
  129. //送溫濕度數(shù)據(jù),波特率 9600
  130. //----------------------------------------------
  131. void main()
  132. {
  133.     /* 系統(tǒng)初始化 */
  134.     TMOD = 0x20;      //定時器T1使用工作方式2
  135.     TH1 = 253;        // 設(shè)置初值
  136.     TL1 = 253;
  137.     TR1 = 1;          // 開始計(jì)時
  138.     SCON = 0x50;      //工作方式1,波特率9600bps,允許接收   
  139.     ES = 1;
  140.     EA = 1;           // 打開所以中斷   
  141.     TI = 0;
  142.     RI = 0;
  143.     SendData(str) ;   //發(fā)送到串口
  144.     Delay(1);         //延時100US(12M晶振)
  145.     while(1)
  146.     {  
  147.        //------------------------
  148.        //調(diào)用溫濕度讀取子程序
  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) ;  //發(fā)送到串口  
  158.        //讀取模塊數(shù)據(jù)周期不易小于 2S
  159.        Delay(20000);
  160.     }//elihw   
  161. }// main


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

  168.     if(RI==1)    //接收中斷      
  169.     {   
  170.         RI = 0;
  171.     }
  172. }
復(fù)制代碼

作者: ruya3699    時間: 2014-6-15 16:46
真好啊                     
作者: 俊杰豪邁者    時間: 2016-3-11 09:56
很好!!
作者: even    時間: 2016-4-22 13:10
開始測溫濕度前會顯示         uchar  str[5]={"RS232"};  這句嗎?

作者: even    時間: 2016-4-22 13:12
在測溫濕度前會顯示uchar  str[5]={"RS232"};這句嗎?
作者: 騰飛的龍    時間: 2016-10-21 22:08
這個程序怎么不好用,顯示00
作者: qq2511171062    時間: 2017-11-19 12:39
感謝樓主

作者: xiayunsheng    時間: 2019-8-31 10:30
謝謝大神




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 日韩伦理一区二区 | 欧美三级电影在线播放 | 久久精品91久久久久久再现 | 欧美国产日韩在线观看 | 成人精品一区二区三区中文字幕 | 久久综合九九 | 国产亚洲精品一区二区三区 | 91大神新作在线观看 | 天天天操 | 亚洲精品视频免费 | 午夜久久av | 欧美精品在线视频 | 91大神在线资源观看无广告 | 久久综合入口 | 日韩一区二区av | 欧美激情精品久久久久久 | 午夜不卡一区二区 | 亚洲视频区| 国产区第一页 | 亚洲精品一二三 | 久久久亚洲一区 | 成年人黄色免费视频 | 99久久中文字幕三级久久日本 | 综合久久色 | 夜夜操天天艹 | 逼逼网| 欧美一区视频 | 久久久国 | 国产精品爱久久久久久久 | 亚洲经典一区 | 日日骚网| 亚洲欧美日韩精品久久亚洲区 | 色橹橹欧美在线观看视频高清 | 国产精品久久久久久久免费大片 | 精品小视频 | 国产精品亚洲综合 | 欧美区日韩区 | 日韩最新网址 | 小川阿佐美pgd-606在线 | 在线观看黄色电影 | 97色免费视频|