程序只是延时不同吗?需要修改什么地方?
/*************************************************************
DHT11头文件
实现功能: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;//温度整数位,小数位,湿度整数位,小数位,数据校验位
uchar U8FLAG;
/*****************DHT11函数定义*********************/
void Delay_ms(uint n); //ms延时函数
void Delay_us(uchar n); //us延时函数
uchar DHT11_receive(void); //DHT11接收数据函数
void DHT11_read(void); //DHT11读取温湿度函数
bit DHT11_Check(void); //DHT11校验函数,返回1:校验成功、返回0:校验失败
/********************************************************
函数名称:void Delay_ms(uint n)
函数作用:ms延时函数
参数说明:
********************************************************/
void Delay_ms(uint n)
{
unsigned char j;
while(n--)
{
for(j=0;j<125;j++);
}
}
/********************************************************
函数名称:void Delay_us(uchar n)
函数作用:us延时函数
参数说明:
********************************************************/
void Delay_us(uchar n)
{
n=n/2;
while(--n);
}
/********************************************************
函数名称:uchar DHT11_receive(void)
函数作用:接收DHT11传回来的数据
参数说明:返回接收到的八位数据
********************************************************/
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高电平值则数据位为 1
if(DHT11_DB)
Data|=1;
U8FLAG=2;
while(DHT11_DB&&U8FLAG++); //超时则跳出for循环
}
return Data;
}
/********************************************************
函数名称:void DHT11_read(void)
函数作用:读取DHT11温湿度
参数说明:
********************************************************/
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;
}
}
/********************************************************
函数名称:bit DHT11_Check(void)
函数作用:DHT11校验函数
参数说明:返回=1:校验成功;返回=0:校验失败
********************************************************/
bit DHT11_Check(void)
{
if((Temp_H+Temp_L+Humi_H+Humi_L)==Check_data) //判断校验和是否正确
return 1;
else
return 0;
}
#endif
|