|
#include <reg52.h>
#include "dht11.h"
#include "delay.h"
#include"baojing.h"
float DHT11_temp,DHT11_hum;
char receive() //讀取一個字節(jié)
{
int i,respond;
// ST=0;
char com_data=0,temp;
for(i=0;i<=7;i++)
{
respond=1;
while((!TRH)&&respond++);
delay_us();
delay_us();
delay_us();
if(TRH)
{
temp=1;
respond=3;
while((TRH)&&respond++);
}
else
temp=0;
com_data<<=1;
com_data|=temp;
}
return(com_data);
}
/****************************************************************************/
/****************************************************************************/
//濕度讀取子程序
//溫度高8位== TH_data
//溫度低8位== TL_data
//濕度高8位== RH_data
//濕度低8位== RL_data
//校驗 8位 == CK_data
//調(diào)用的程序有 delay();, Delay_5us();,RECEIVE();
/***************************************************************************/
void read_TRH()
{ int respond;
char TH_temp,TL_temp,RH_temp,RL_temp,CK_temp,ST,untemp;
//主機(jī)拉低18ms
TRH=0;
delay_ms(18);
TRH=1;
//DATA總線由上拉電阻拉高 主機(jī)延時20us
delay_us();
delay_us();
delay_us();
delay_us();
//delay_us();
//delay_us();delay_us();delay_us();delay_us();
//主機(jī)設(shè)為輸入 判斷從機(jī)響應(yīng)信號
TRH=1;
//判斷DHT11是否有低電平響應(yīng)信號 如不響應(yīng)則跳出,響應(yīng)則向下運行
if(!TRH)
{
respond=3;
//判斷DHT11發(fā)出 80us 的低電平響應(yīng)信號是否結(jié)束
while((!TRH)&& respond++);
respond=3;
//判斷從機(jī)是否發(fā)出 80us 的高電平,如發(fā)出則進(jìn)入數(shù)據(jù)接收狀態(tài)
while(TRH && respond++);
//數(shù)據(jù)接收狀態(tài)
RH_temp = receive();
RL_temp = receive();
TH_temp = receive();
TL_temp = receive();
CK_temp = receive();
TRH=1;ST=1;
//數(shù)據(jù)校驗
untemp=(RH_temp+RL_temp+TH_temp+TL_temp);
if(untemp==CK_temp)
{
// RH_ = RH_temp;
// RL_data = RL_temp;
// TH_data = TH_temp;
// TL_data = TL_temp;
// CK_data = CK_temp;
DHT11_hum=RH_temp;
// DHT11_hum=((DHT11_hum)|(RL_temp));
DHT11_temp=RH_temp;
// DHT11_temp=((DHT11_temp)|(RL_temp)) ;
}
}
}
#include <reg52.h>
#include"uart.h"
void Uart_init(void)
{
PCON &=0x7F;
SCON =0x50;
TMOD &=0x0F;
TMOD |=0x20;
TL1=0xFD;
TH1=0xFD;
ET1=0;
TR1=1;
}
void hai_uart_putchar(char i)
{
ES=0;
TI=0;
SBUF=i;
while(TI==0);
TI=0;
ES=1;
}
char putchar(char c)
{
hai_uart_putchar(c);
return c;
}
#include "dht11.h"
#include"delay.h"
#include"uart.h"
#include "stdio.h"
#include "reg52.h"
#include "baojing.h"
extern float DHT11_temp,DHT11_hum;
void main(){
read_TRH();
Uart_init();
while(1){
printf("temp is 溫度%f \n",DHT11_temp);
printf("temp is 濕度 %f \n",DHT11_hum);
hwjiance();
ywjiance();
wdjiance();
delay_ms(1000);
}
}
為什么串口輸出不了變化的溫度呢 具體代碼在壓縮包里
|
|