89 C 51チップマシンDHT 11データを読み出し、デジタルチューブで表示する
2394 ワード
先日arduinoがdht 11を読み取る文章「arduinoがDHT 11の温度、湿度データを読み取りシリアル表示する」を出しましたが、DHT 11の通信プロトコルについて説明しましたので、ここでは省略して、プログラムを貼りましょう.使用可能なものをテストしました.
結晶振動11.0592 Mhz.
結晶振動11.0592 Mhz.
#include "reg52.h"
unsigned char num[10]={0xde,0x82,0xec,0xe6,0xb2,0x76,0x7e,0xc2,0xfe,0xf6};//
unsigned char a[5]={0,0,0,0,0};// 、 , 0
unsigned char i,j,t;//for
sbit out=P0^4;//DHT11 io
void delay(unsigned char x)// 1 ms
{
unsigned char i,j;
for(i=0;i
for(j=0;j< 110;j++);
}
void display(unsigned char a,unsigned char c) //
{
unsigned char i,b,d;
b=a%10;//
a=a/10;//
d=c%10;//
c=c/10;//
for(i=0;i< 200;i++)
{
P2=num[a];//
P0=0xfe;//
delay(3);//
P2=num[b];//
P0=0xfd;//
delay(3);//
P2=num[c];//。。。。
P0=0xfb;
delay(3);
P2=num[d];
P0=0xf7;
delay(3);
}
}
void begin()//DHT11
{
out=1;
out=0;//
delay(32); // 28ms
out=1;//
}
void read1()// 、
{
for(t=0;t< 3;t++);// 30us
if(out==0)// DHT11
{
while(out==0);// 80us
for(t=0;t< 2;t++);// us
while(out==1);// 80us
for(i=0;i< 5;i++)// 、 、
{
for(j=0;j< 8;j++)//8
{
while(out==0);// 50us
a[i]=a[i]<<1;// 1
for(t=0;t< 4;t++);// 30us 70us ,
if(out==1)//
{
a[i]=a[i]|0x01;// 1
while(out==1);//
}
}
}
}
else // DHT11 , 0
{
for(i=0;i< 5;i++)
{
a[i]=0;
}
}
if(a[0]+a[2]!=a[4])// , 8888( 0, )
{
for(i=0;i< 5;i++)
{
a[i]=88;
}
}
}
void main()//
{
while(1)
{
begin();
read1();
out=1;
display(a[2],a[0]);// 0,
}
}