程序只是延時不同嗎?需要修改什么地方?
/*************************************************************
DHT11頭文件
實現(xiàn)功能:DHT11的控制
補充說明:
***************************************************************/
#ifndef _DHT11_H_
#define _DHT11_H_
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
/*****************DHT11引腳定義*******************/
sbit DHT11_DB=P3^4;
/*****************DHT11變量定義*********************/
uchar Temp_H,Temp_L,Humi_H,Humi_L,Check_data;//溫度整數(shù)位,小數(shù)位,濕度整數(shù)位,小數(shù)位,數(shù)據(jù)校驗位
uchar U8FLAG;
/*****************DHT11函數(shù)定義*********************/
void Delay_ms(uint n); //ms延時函數(shù)
void Delay_us(uchar n); //us延時函數(shù)
uchar DHT11_receive(void); //DHT11接收數(shù)據(jù)函數(shù)
void DHT11_read(void); //DHT11讀取溫濕度函數(shù)
bit DHT11_Check(void); //DHT11校驗函數(shù),返回1:校驗成功、返回0:校驗失敗
/********************************************************
函數(shù)名稱:void Delay_ms(uint n)
函數(shù)作用:ms延時函數(shù)
參數(shù)說明:
********************************************************/
void Delay_ms(uint n)
{
unsigned char j;
while(n--)
{
for(j=0;j<125;j++);
}
}
/********************************************************
函數(shù)名稱:void Delay_us(uchar n)
函數(shù)作用:us延時函數(shù)
參數(shù)說明:
********************************************************/
void Delay_us(uchar n)
{
n=n/2;
while(--n);
}
/********************************************************
函數(shù)名稱:uchar DHT11_receive(void)
函數(shù)作用:接收DHT11傳回來的數(shù)據(jù)
參數(shù)說明:返回接收到的八位數(shù)據(jù)
********************************************************/
uchar DHT11_receive(void)
{
uchar i,Data;
for(i=0;i<8;i++)
{
U8FLAG=2;
while(!DHT11_DB&&U8FLAG++);
Delay_us(35);
Data<<=1; // 如果高電平高過預定0高電平值則數(shù)據(jù)位為 1
if(DHT11_DB)
Data|=1;
U8FLAG=2;
while(DHT11_DB&&U8FLAG++); //超時則跳出for循環(huán)
}
return Data;
}
/********************************************************
函數(shù)名稱:void DHT11_read(void)
函數(shù)作用:讀取DHT11溫濕度
參數(shù)說明:
********************************************************/
void DHT11_read(void)
{
DHT11_DB=0;
Delay_ms(20);
DHT11_DB=1;
Delay_us(60);
if(!DHT11_DB)
{
U8FLAG=2;
while(!DHT11_DB&&U8FLAG++);
U8FLAG=2;
while(DHT11_DB&&U8FLAG++);
Humi_H=DHT11_receive();
Humi_L=DHT11_receive();
Temp_H=DHT11_receive();
Temp_L=DHT11_receive();
Check_data=DHT11_receive();
DHT11_DB=1;
}
}
/********************************************************
函數(shù)名稱:bit DHT11_Check(void)
函數(shù)作用:DHT11校驗函數(shù)
參數(shù)說明:返回=1:校驗成功;返回=0:校驗失敗
********************************************************/
bit DHT11_Check(void)
{
if((Temp_H+Temp_L+Humi_H+Humi_L)==Check_data) //判斷校驗和是否正確
return 1;
else
return 0;
}
#endif
|