DHT11
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DHT11函数
主函数
Main.c
#include"display.h"
#include<reg51.h>
#include"dht11.h"
#define uint unsigned int
#define uchar unsigned char extern uchar group[5];
void main()
{
dht11_init();
while(1)
{
if(dht11_read())
while(1)
display(group[2]);
else
while(1)
display(0);
}
}
头文件
display.h
#ifndef __DHT11_H_
#define __DHT11_H_
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit dat=P3^7;
void dht11_init();
bit dht11_read();
#endif
#ifndef __DISPLAY_H_
#define __DISPLAY_H_
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit guan1=P2^4; //位选:第1个数码管io
sbit guan2=P2^5; //位选:第2个数码管io
sbit guan3=P2^6; //位选:第3个数码管io
sbit guan4=P2^7; //位选:第4个数码管io
void display(uint num);
#endif
下面函数为读取函数
/*****************************************************
*函数:单总线读操作
*备注:使用定时器 0
***************************************************/
#include"dht11.h"
uchar group[5];//一二位湿度整数小数三四位温度整数小数五温湿度和
/*****************************************************
*函数名:void dht11_init()
*函数功能:
*输入:无
*输出:0 或 1
*备注:使用定时器0用于计数
***************************************************/
void dht11_init()
{
TMOD|=0x01; //设置定时器0为工作方式1
TMOD&=0xfd;
TR0=1;
ET0=0;
}
/*****************************************************
*函数名:uchar dht11_read()
*函数功能:单总线读操作
*输入:无
*输出:0 或 1
*备注:使用定时器0用于计数
***************************************************/
bit dht11_read()
uchar a,b;
dat=1;
dat=0;
TH0=0xb8;
TL0=0x00;
TF0=0; //计数20毫秒
while(TF0==0);
dat=1;
TH0=0xff;
TL0=0xdb; //计数40微秒
TF0=0;//将溢出标志位清零
while(TF0==0);//等待溢出
if(dat==0)
{
while(dat==0);
while(dat==1);
for(a=0;a<5;a++)
{
for(b=0;b<8;b++)
{
while(dat==0);
TH0=0xff;
TL0=0xe4; //计数30微秒
TF0=0;//将溢出标志位清零
while(TF0==0);
group[a]<<=1;
if(dat==1)group[a]|=0x01;
else group[a]&=0xfe;
while(dat==1);
}
}
if(group[4]==group[0]+group[1]+group[2]+group[3])
{//P2=0;
return 1; }
else
{//P2=0;
return 0; }
}
else
{//P2=0;
return 0; }
}。