#include "STC12C5A60S2.h"
#include"HW_Printf.h"
#include "BH1750.h"
#include"Sys_Setting.h"
#include "HW_iic.h"
#include <intrins.h>
#include <math.h>
#include<stdio.h>
void delaytime(u16 ms)
{
u16 i=0;
u16 j=0;
for(i=0;i<ms;i++)
{
for(j=0;j<110;j++);
}
}
void delay(unsigned int i)
{
while(i--);
}
void delay_ms(unsigned int i)
{
while(i--)
delay(90);
}
void Delay10u()
{
unsigned char i;
_nop_();
_nop_();
_nop_();
i = 24;
while (--i);
}
void Delay18ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 1;
j = 194;
k = 159;
do
{
do
{
while (--k);
} while (--j);
}while (--i);
}
sbit TRH = P2^0;//溫濕度傳感器DHT11數據接入
int TH_temp,TL_temp,RH_temp,RL_temp,CK_temp,respond,com_data,temp;
//-------dht11函數區---------
char DHT11_rec_byte()
{
char i;
com_data=0;
for(i=0;i<=7;i++)
{
respond=2;
while((!TRH)&&respond++);
Delay10u();
Delay10u();
Delay10u();
if(TRH)
{
temp=1;
respond=2;
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
//調用的程序有 delay();, Delay_5us();,RECEIVE();
/***************************************************************************/
void DHT11_receive()
{
//主機拉低18ms
TRH=0;
Delay18ms();
TRH=1;
//DATA總線由上拉電阻拉高 主機延時50us
Delay10u();
Delay10u();
//delay_us();delay_us();delay_us();delay_us();
//主機設為輸入 判斷從機響應信號
TRH=1;
//判斷DHT11是否有低電平響應信號 如不響應則跳出,響應則向下運行
if(!TRH)
{
respond=2;
//判斷DHT11發出 80us 的低電平響應信號是否結束
while((!TRH)&& respond++);
respond=2;
//判斷從機是否發出 80us 的高電平,如發出則進入數據接收狀態
while(TRH && respond++);
//數據接收狀態
RH_temp = DHT11_rec_byte();
RL_temp = DHT11_rec_byte();
TH_temp = DHT11_rec_byte();
TL_temp = DHT11_rec_byte();
CK_temp = DHT11_rec_byte();
TRH=1;
}
}
void main()
{
u16 Rec_Val = 0;
Uart1_Init();
Init_BH1750();
delaytime(100);
DHT11_receive(); //溫濕度讀取
while(1)
{
Single_Write_BH1750(0x01); // power on
Single_Write_BH1750(0x10); // H- resolution mode
delay(500);
Rec_Val = Multiple_read_BH1750();
DHT11_receive(); //溫濕度讀取
delay(100);
printf("**************************\n");
printf("The light value is %d \n",Rec_Val);
delaytime(2000);
printf("The tempature is:%d\n",(int)TH_temp);
delaytime(2000);
printf("The humdity is:%d\n",(int)RH_temp);
delaytime(2000);
printf("**************************\n");
delaytime(8000);
}
}
|