|
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
typedef unsigned char U8;
typedef unsigned int U16;
sbit DataPort= P2^0 ;
U8 U8FLAG;
U8 U8temp;
U16 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
U16 U8comdata;
U8 count;
void Delay(int j)
{
U8 i;
for(;j>0;j--)
{
for(i=0;i<27;i++);
}
}
void Delay_10us(void)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void dht11_init(void)
{
U8 i;
for(i=0;i<8;i++)
{
U8FLAG=2;
while((!DataPort)&&U8FLAG++);
Delay_10us();
Delay_10us();
Delay_10us();
U8temp=0;
if(DataPort)
U8temp=1;
U8FLAG=2;
while((DataPort)&&U8FLAG++);
if(U8FLAG==1)break;
U8comdata<<=1;
U8comdata|=U8temp;
}
}
void RH(void)
{
//Ö÷»úà-μí18ms
DataPort=0;
Delay(180);
DataPort=1;
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
DataPort=1;
if(!DataPort) //T !
{
U8FLAG=2;
while((!DataPort)&&U8FLAG++);
U8FLAG=2;
while((DataPort)&&U8FLAG++);
dht11_init();
U8RH_data_H=U8comdata;
dht11_init();
U8RH_data_L=U8comdata;
dht11_init();
U8T_data_H=U8comdata;
dht11_init();
U8T_data_L=U8comdata;
dht11_init();
U8checkdata=U8comdata;
DataPort=1;
}
}
void uart_init()
{
TMOD = 0x20;
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1;
SCON = 0x50;
ES = 1;
EA = 1;
TI = 0;
RI = 0;
}
void main()
{
uart_init();
Delay(1);
while(1)
{
RH();
U8RH_data_L=U8RH_data_L>>8;
TI=1;
ES=0;
printf("目前溫度是:");
printf("%d",U8T_data_H);
printf("攝氏度");
printf(" \r\n");
printf(“目前的濕度是");
printf("%d",U8RH_data_L);
printf("%%");
printf("\r\n");
Delay(20000);
}
}
好東西就要分享
|
評分
-
查看全部評分
|