|
基于STC89C52的溫濕度檢測,一個很經(jīng)典的傳感器測試代碼,需要的朋友自己下載哦
//main.c
#include<reg52.h>
#include<intrins.h>
#include "HW_LCD1602.h"
#include "Sys_Define.h"
sbit TRH = P2^2;
int TH_temp,TL_temp,RH_temp,RL_temp,CK_temp,respond,com_data,temp;
void delay(unsigned int i)
{
while(i--);
}
void delay_ms(unsigned int i)
{
while(i--)
delay(90);
}
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);
}
void Delay10u()
{
unsigned char i;
_nop_();
_nop_();
_nop_();
i = 24;
while (--i);
}
//-------dht11函數(shù)區(qū)---------
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
//調(diào)用的程序有 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();
//主機設(shè)為輸入 判斷從機響應(yīng)信號
TRH=1;
//判斷DHT11是否有低電平響應(yīng)信號 如不響應(yīng)則跳出,
//響應(yīng)則向下運行
if(!TRH)
{
respond=2;
//判斷DHT11發(fā)出 80us 的低電平響應(yīng)信號是否
//結(jié)束
while((!TRH)&& respond++);
respond=2;
//判斷從機是否發(fā)出 80us 的高電平,如發(fā)出則
//進入數(shù)據(jù)接收狀態(tài)
while(TRH && respond++);
//數(shù)據(jù)接收狀態(tài)
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 LCD_DisTemAndHum(u16 Tem,u16 Hum)
{
u8 T_Decade=0,T_Digtal=0;
u8 H_Decade=0,H_Digtal=0;
T_Decade = Tem/10;
T_Digtal = Tem%10;
H_Decade = Hum/10;
H_Digtal = Hum%10;
Write_Com(0x80+5);
Write_Date(0x30+T_Decade);
Write_Date(0x30+T_Digtal);
Write_Com(0x80+13);
Write_Date(0x30+H_Decade);
Write_Date(0x30+H_Digtal);
}
void main(void)
{
LCD_Init();
Dis_Init();
DHT11_receive(); //溫濕度讀取
Delays(200);
while(1)
{
LCD_DisTemAndHum(TH_temp,RH_temp);
DHT11_receive(); //溫濕度讀取
Delays(100);
}
}
|
-
-
溫濕度檢測.zip
2021-4-14 08:21 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
56.18 KB, 下載次數(shù): 23, 下載積分: 黑幣 -5
|