欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
有大佬用過DHT11溫濕度模塊嗎?單片機測出來的數據不太正常,求救
[打印本頁]
作者:
單片機小白一個
時間:
2019-5-6 10:41
標題:
有大佬用過DHT11溫濕度模塊嗎?單片機測出來的數據不太正常,求救
還有就是那個從機響應函數response()加上的話lcd就什么也不顯示了,不加的話現在顯示濕度68,溫度46,
程序如下
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DATA=P2^0;
sbit rs=P2^6;
sbit rw=P2^5;
sbit en=P2^7;
uchar rec_dat[9]; //用于顯示的接收數據數組
/*1ms延時函數*/
void delay1ms(uint x) //誤差 0us
{
unsigned char a,b,c;
for(c=x;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
/*80us延時函數*/
void delay80us(void) //誤差 0us
{
unsigned char a,b;
for(b=11;b>0;b--)
for(a=2;a>0;a--);
}
/*60us延時函數*/
void delay60us(void) //誤差 0us
{
unsigned char a,b;
for(b=3;b>0;b--)
for(a=8;a>0;a--);
}
/*24us延時函數*/
void delay24us(void) //誤差 0us
{
unsigned char a,b;
for(b=3;b>0;b--)
for(a=2;a>0;a--);
}
/*27us延時函數*/
void delay27us(void) //誤差 0us
{
unsigned char a;
for(a=12;a>0;a--);
}
/*主機發送起始信號*/
void start()
{
DATA=0;
delay1ms(20);
DATA=1;
delay24us();
}
/*檢測從機應答信號*/
void response()
{
DATA=0;
delay80us();
DATA=1;
delay80us();
}
/*接收1字節數據*/
uint receivebyte()
{
uchar i,dat=0;
for(i=0;i<8;i++)
{
while(!DATA);//等待50ms低電平過去
delay27us();
if(DATA==1)
dat+=1;
dat<<=1;//數據移位
while(DATA);
}
return dat;
}
void DHT11()
{
uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revive;
start();
DATA=1;
// response();
if(DATA==0)
{
while(DATA==0);
delay80us();
R_H=receivebyte(); //接收濕度高八位
R_L=receivebyte(); //接收濕度低八位
T_H=receivebyte(); //接收溫度高八位
T_L=receivebyte(); //接收溫度低八位
revive=receivebyte(); //接收校正位
delay60us();
}
if((R_H+R_L+T_H+T_L)==revive) //校正
{
RH=R_H;
RL=R_L;
TH=T_H;
TL=T_L;
}
/*數據處理,方便顯示*/
rec_dat[0]='0'+(RH/10);
rec_dat[1]='0'+(RH%10);
rec_dat[2]='R';
rec_dat[3]='H';
rec_dat[4]=' ';
rec_dat[5]=' ';
rec_dat[6]='0'+(TH/10);
rec_dat[7]='0'+(TH%10);
rec_dat[8]='C';
}
void lcd_wcom(uchar com)
{
rs=0;
rw=0;
P0=com;
delay1ms(5);
en=1;
delay1ms(5);
en=0;
}
void lcd_wdat(uchar dat)
{
rs=1;
rw=0;
P0=dat;
delay1ms(5);
en=1;
delay1ms(5);
en=0;
}
void lcd_init()
{
lcd_wcom(0x38);
lcd_wcom(0x0c);
lcd_wcom(0x06);
lcd_wcom(0x01);
}
void main()
{
uchar i;
lcd_init();
delay1ms(1000);
while(1)
{
DHT11();
lcd_wcom(0x80);
for(i=0;i<9;i++)
{
lcd_wdat(rec_dat[i]);
}
}
}
復制代碼
作者:
1qdeuuu000
時間:
2019-5-6 18:58
主函數加個延時試試,這模塊不能太過頻繁調用,最好1~2s調用一次。
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1