|
程序如下:
這是DHT11的讀取程序,顯示程序在main文件中,用LCD1602顯示,LCD1602的程序絕對(duì)是正確的,因?yàn)槲覄e的程序也用了,現(xiàn)在的問題是溫濕度十位數(shù)據(jù)正確,個(gè)位數(shù)據(jù)錯(cuò)誤,能過校驗(yàn)
#include <reg52.h>
typedef unsigned char uchar;
sbit DATA = P1^6;
void Delay18ms() //@11.0592MHz
{
unsigned char i, j;
i = 33;
j = 66;
do
{
while (--j);
} while (--i);
}
void Delay10us() //@11.0592MHz
{
unsigned char i;
i = 2;
while (--i);
}
void DHT11Start()
{
DATA = 0;
Delay18ms();
DATA = 1;
Delay10us();
Delay10us();
Delay10us();
DATA = 1;
}
uchar GetByte()
{
uchar i,b=0;
for(i=0;i<8;i++)
{
while(!DATA);
Delay10us();
Delay10us();
Delay10us();
b <<= 1;
if(DATA == 1)b += 1;
while(DATA);
}
return b;
}
void DHT11GetData(uchar *dat)
{
uchar datacheck,RH,RL,TH,TL;
DHT11Start();
if(!DATA)
{
while(!DATA);
while(DATA);
RH = GetByte();
RL = GetByte();
TH = GetByte();
TL = GetByte();
datacheck = GetByte();
DATA = 1;
}
if(datacheck == (RH+RL+TH+TL))
{
dat[0] = (RH/10) +'0';
dat[1] = (RL%10) +'0';
dat[2] = (TH/10) +'0';
dat[3] = (TL%10) +'0';
}
else
{
dat[0] = '0';
dat[1] = '0';
dat[2] = '0';
dat[3] = '0';
}
}
|
|