找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1918|回復(fù): 0
收起左側(cè)

為什么采集不到值?請大神幫忙。謝謝!

[復(fù)制鏈接]
ID:189312 發(fā)表于 2017-4-13 19:19 | 顯示全部樓層 |閱讀模式
void start()
{
DHTIO=1;
delay_10us();
DHTIO=0;
delay(25);  // 主機把總線拉低必須大于18ms保證DHT11能檢測到起始信號
DHTIO=1;  //發(fā)送開始信號結(jié)束后拉高電平延時20-40us
delay_10us();
delay_10us();
delay_10us();
}
/*-------------DHT11接受一個數(shù)據(jù)----------------*/
unsigned char COM()
{
unsigned char i,temp;
for(i=0;i<8;i++)
{
  while(!DHTIO);//等待50us低電平結(jié)束
  delay_10us();
  delay_10us();
  delay_10us();
  temp=0;
  if(DHTIO==1)
  temp=1;   //如果26us-28us之后還為高電平則表示接收的數(shù)據(jù)為'1'
  while(DHTIO) //等待數(shù)據(jù)信號高電平'0'為26us-28us'1'為70us
  comdata<<=1;
  comdata|=temp;
}
return comdata;
}
/*--------------DHT11接收數(shù)據(jù)--------------*/
void RH()
{
unsigned char wendu_h_temp,wendu_l_temp,shidu_h_temp,shidu_l_temp,check_temp,i;
start();
DHTIO=1;
if(!DHTIO)  //判斷從機是否有低電平響應(yīng)信號
{
  while(!DHTIO);//判斷從主機是否發(fā)出80us的低電平相應(yīng)是否結(jié)束
  while(DHTIO);//判斷主機是否發(fā)出80us高電平,發(fā)出則開始采集數(shù)據(jù)
  shidu_h_temp=COM();//采集濕度整數(shù)
  shidu_l_temp=COM();//采集濕度小數(shù)
  wendu_h_temp=COM();//采集溫度整數(shù)
  wendu_l_temp=COM();//采集溫度小數(shù)
  check_temp=COM();//采集校驗位

  DHTIO=0;  //當最后一bit數(shù)據(jù)接完畢后從機拉低電平50us//
  for(i=0;i<7;i++)  //差不多50us的延時
  delay_10us();
  DHTIO=1;  //總線由上拉電阻拉高進入空閑狀態(tài)
  num_check=shidu_h_temp+shidu_l_temp+wendu_h_temp+wendu_l_temp;
  if(num_check=check_temp) //判斷讀到的四個數(shù)據(jù)之和是否與校驗位相同
  {
   shidu_h_data=shidu_h_temp;
   shidu_l_data=shidu_l_temp;
   wendu_h_data=wendu_h_temp;
   wendu_l_data=wendu_l_temp;
   check_temp=num_check;
  }
}
}
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表