找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1184|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

溫度傳感器

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:854459 發(fā)表于 2021-1-5 23:06 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本程序使用于 STC12C5 系列單片機,使用其他單片機特別注意時序問題
#include <reg51.h>
#include <intrins.h>
unsigned char TH_data;  // 溫度高 8
unsigned char TL_data;  // 溫度低 8   
unsigned char RH_data;  // 濕度高 8   
unsigned char RL_data;  // 濕度低 8   
unsigned char CK_data;
sbit DHT11_Data = P2^0;  // DHT11 數(shù)據(jù)線
void delay_us(unsigned char us)  //@12.000MHz
{
while(us--)
{
  _nop_();
  _nop_();
}
}
void delay_ms(unsigned char ms)    //@12.000MHz
{
unsigned char i, j;
while(ms--)
{
  _nop_();
  _nop_();
   i =12;
   j =168;
   do
   {
    while (--j);
   }
  while (--i);
}
}
/****************************************************************************/
//  函數(shù)名稱 : DHT_Read
//  函數(shù)功能 : DHT11 讀取數(shù)據(jù)
/****************************************************************************/
unsigned char DHT_Read()
{
unsigned char i; // 定義變量,用于循環(huán)
unsigned char temp; // 定義變量,用于臨時返回值
unsignedchar com_data; // 定義變量,用于返回值
unsigned char respond; // 定義變量,用于響應(yīng)處理
for(i=0;i<=7;i++) // 接收 8bit 數(shù)據(jù)  
{
  respond=0;
  while((!DHT11_Data)&& respond<100)// 等待 50us 低電平開始信號結(jié)束
   {
    respond++;
    delay_us(1);
  }   
   delay_us(28);//開始信號結(jié)束后延時 26us-28us
  if(DHT11_Data)
   {
    temp=1;
    respond=0;
    while((DHT11_Data)&& respond<100)
     {
      respond++;
      delay_us(1);
     }
   }
  else
   {
    temp=0;
   }
  com_data<<=1;
  com_data|=temp;
}
return(com_data);
}
/****************************************************************************/
/****************************************************************************/
// 實現(xiàn)功能: DHT11 采集溫濕度
/***************************************************************************/
void DHT11_Gets(void)
{
unsigned char respond;//   定義變量,用于響應(yīng)處理   
unsigned charTH_temp,TL_temp,RH_temp,RL_temp,CK_temp;
DHT11_Data=0;
delay_ms(20);// 主機拉低總線必須大于 18ms, 保證 DHT11 能檢測到信號
DHT11_Data=1;// 發(fā)送信號結(jié)束,拉高電平延時 20-40us
delay_us(30);// 延時大約 30us
if(!DHT11_Data) // 判斷 DHT11 是否低電平響應(yīng)信號
{
  respond=0;
  while((!DHT11_Data)&& respond<80)
   {
    respond++;
    delay_us(1);
   }
  respond=0;
   while((DHT11_Data)&&respond<100)
   {
    respond++;
    delay_us(1);
   }
   
  RH_temp = DHT_Read();   
  RL_temp = DHT_Read();
  TH_temp = DHT_Read();
  TL_temp = DHT_Read();
  CK_temp = DHT_Read();
   
  DHT11_Data=0;
   delay_us(50);
  DHT11_Data=1;     
  if((RH_temp+RL_temp+TH_temp+TL_temp)==CK_temp)
   {
    RH_data = RH_temp;
    RL_data = RL_temp;
     
    TH_data = TH_temp;
    TL_data = TL_temp;
   }
}

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

使用道具 舉報

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

本版積分規(guī)則

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

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

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