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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于DHT11溫濕度傳感器的問題。

[復制鏈接]
跳轉到指定樓層
樓主
ID:114626 發表于 2016-4-18 10:53 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#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   
//----------------------------------------------//
//----------------定義區------------------    --//  
//----------------------------------------------//
U8  U8FLAG,k; //這里定義的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];
}          //這里用keil編譯,提示missing return valve 沒有返回值怎么能把數據傳輸給高速寄存器?
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;     
       while((!P2_0)&&U8FLAG++);   
       Delay_10us();      
       Delay_10us();   
       Delay_10us();
       U8temp=0;        
       if(P2_0)
       U8temp=1;                  //判斷數據位是0還是1      
       U8FLAG=2;     
       while((P2_0)&&U8FLAG++);   //超時則跳出for循環     
       if(U8FLAG==1)break;        // 如果高電平高過預定0高電平值則數據位為 1         
       U8comdata<<=1;      
       U8comdata|=U8temp;              
      }  
}   
//--------------------------------  
//-----濕度讀取子程序 ------------
//--------------------------------  
//----以下變量均為全局變量--------  
//----溫度高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)  
{        
  P2_0=0;     
  Delay(180); //主機拉低18ms         
  P2_0=1;        
  Delay_10us();     
  Delay_10us();   
  Delay_10us();     
  Delay_10us(); //總線由上拉電阻拉高 主機延時20us   
                //主機設為輸入 判斷從機響應信號     
  P2_0=1;      //判斷從機是否有低電平響應信號 如不響應則跳出,響應則向下運行   
  if(!P2_0)   //T !  
  {   
    U8FLAG=2;      
    while((!P2_0)&&U8FLAG++);   //判斷從機是否發出 80us 的低電平響應信號是否結束   
    U8FLAG=2;   
    while((P2_0)&&U8FLAG++); //判斷從機是否發出 80us 的高電平,如發出則進入數據接收狀態           
    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;     
    }
  }
}   
//----------------------------------------------
//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)       //發送到串口            
Delay(20000);        //讀取模塊數據周期不易小于 2S
    }
}
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)//接收完5位數據   
   {   
  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;         //數據接收完畢處理。//這里的P0是什么意思?前面完全沒有定義過這一位吧?
   }   
  }  
}
希望各位能幫幫忙,最近一直在看,有的也看懂了,可以上面的紅色標注的幾點一直沒明白,還有就只在開發板上測試時收到的數據全是0,是不是時序有問題。看好多都說這個程序能用能用,自己用的時候還是有問題啊,請各位幫幫忙。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:114626 發表于 2016-4-19 08:50 | 只看該作者
沒人來啊,好冷清
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲天堂精品一区 | 在线免费观看日本视频 | 狠狠干网站| 国产91久久精品一区二区 | 欧美一级淫片免费视频黄 | 在线不卡视频 | 国产亚洲精品美女久久久久久久久久 | 一区二区三区精品视频 | 国产精品久久久久久久久久久久冷 | 亚洲成人精品国产 | 99久久国产免费 | 黄色免费三级 | 欧美久久综合 | 日本一区二区三区精品视频 | 精产国产伦理一二三区 | 国产成人精品一区二区三区网站观看 | 欧美精品久久久久 | 丁香综合 | 伊人精品久久久久77777 | 天天操夜夜爽 | 欧美黄色绿像 | 国产区在线观看 | 国产精品一区在线观看 | 一区二区av在线 | 亚洲天堂网站 | 99热.com | 欧洲高清转码区一二区 | 欧美日韩在线高清 | 精品国产乱码久久久久久丨区2区 | 综合久久亚洲 | 久久国产精品免费一区二区三区 | 日本不卡免费新一二三区 | 国产永久免费 | 深夜福利亚洲 | 91精品国产乱码麻豆白嫩 | 羞羞羞视频| 亚洲精品国产成人 | 日韩欧美中文 | 日本不卡一区二区三区在线观看 | 精品99爱视频在线观看 | 密色视频 |