欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
51單片機 用LCD1602顯示DHT11采集的溫濕度,仿真溫濕度顯示不出來,求指點
[打印本頁]
作者:
孤勇
時間:
2020-7-1 18:27
標題:
51單片機 用LCD1602顯示DHT11采集的溫濕度,仿真溫濕度顯示不出來,求指點
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit Data=P3^5;
uchar rec_dat[9];
sbit RS=P3^0;
sbit RW=P3^1;
sbit E=P3^2;
unsigned char str1[]={"123456"};
unsigned char str2[]={" "};
int shidu=0;
int wendu=0;
void lcd_init();
unsigned char r_status();
void w_com(unsigned char com);
void w_data(unsigned char dat);
void delay(unsigned int k);
void DL();
void DHT11_delay_ms(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void DHT11_delay_us(uchar n)
{
while(--n);
}
void DHT11_start()
{
Data=1;
DHT11_delay_us(2);
Data=0;
DHT11_delay_ms(30);
Data=1;
DHT11_delay_us(30);
}
void DHT11_receive()
{
uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
DHT11_start();
if(Data==0)
{
while(Data==0);
DHT11_delay_us(40);
R_H=DHT11_rec_byte();
R_L=DHT11_rec_byte();
T_H=DHT11_rec_byte();
T_L=DHT11_rec_byte();
revise=DHT11_rec_byte();
DHT11_delay_us(25);
if((R_H+R_L+T_H+T_L)==revise)
{
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 main()
{
unsigned char i;
lcd_init();
w_com(0x01);
w_com(0x80);
for(i=0;i<14;i++)
{
w_data(str1[i]);
DL();
}
DHT11_delay_ms(100);
DHT11_receive();
w_com(0xc0);
for(i=0;i<10;i++)
{
w_data(str2[i]);
DL();
}
while(1);
}
void delay(unsigned int k)
{
unsigned int i,j;
for(i=0;i>k;i++)
for(j=0;j>200;j++);
}
void DL()
{
_nop_();
_nop_();
_nop_();
}
void lcd_init()
{
w_com(0x38);
w_com(0x0f);
w_com(0x01);
w_com(0x06);
w_com(0x80);
}
unsigned char r_status()
{
unsigned char s;
RS=0;
RW=1;
E=1;
DL();
s=P2;
E=0;
RW=0;
return(s);
}
void w_com(unsigned char com)
{
unsigned char m;
do{
m=r_status();
m&=0x80;
DL();
}while(m!=0);
RS=0;
P2=com;
DL();
E=1;
DL();
E=0;
}
void w_data(unsigned char dat)
{
unsigned char m;
do{
m=r_status();
m&=0x80;
DL();
}while(m!=0);
RW=0;
RS=1;
P2=dat;
DL();
E=1;
DL();
E=0;
}
復制代碼
111111111.png
(17.09 KB, 下載次數: 69)
下載附件
2020-7-1 18:26 上傳
作者:
lovezjf234
時間:
2020-7-2 09:05
w_data(str2[i]);一直 在寫空,在while(1)中又不采集數據,自然什么都沒有了
作者:
孤勇
時間:
2020-7-2 15:57
現在顯示的問題解決了,但怎么在我這個新的程序的while中加入延時循環采集呀
作者:
孤勇
時間:
2020-7-2 15:58
標題:
RE: 51單片機 用LCD1602顯示DHT11采集的溫濕度,仿真溫濕度顯示不出來,求指點
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit Data=P3^6;
unsigned char rec_dat[9];
sbit RS=P3^0;
sbit RW=P3^1;
sbit E=P3^2;
unsigned char code lcd[]={"123456789"};
void lcd_init();
unsigned char r_status();
//void w_com(unsigned char com);
//void w_data(unsigned char dat);
void delay(unsigned int k);
void DL();
void delay(unsigned int k)
{
unsigned int i,j;
for(i=0;i>k;i++)
for(j=0;j>200;j++);
}
void DHT11_delay_us(uchar n)
{
while(--n);
}
void DHT11_delay_ms(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void DHT11_start()
{
Data=1;
DHT11_delay_us(2);
Data=0;
DHT11_delay_ms(30);
Data=1;
DHT11_delay_us(30);
}
uchar DHT11_rec_byte()
{
uchar i,dat=0;
for(i=0;i<8;i++)
{
while(!Data);
DHT11_delay_us(8);
dat<<=1;
if(Data==1)
dat+=1;
while(Data);
}
return dat;
}
void DHT11_receive()
{
uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
DHT11_start();
if(Data==0)
{
while(Data==0);
DHT11_delay_us(40);
R_H=DHT11_rec_byte();
R_L=DHT11_rec_byte();
T_H=DHT11_rec_byte();
T_L=DHT11_rec_byte();
revise=DHT11_rec_byte();
DHT11_delay_us(25);
if((R_H+R_L+T_H+T_L)==revise)
{
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 write_com(unsigned char com)
{
unsigned char m;
do{
m=r_status();
m&=0x80;
DL();
}while(m!=0);
RS=0;
P2=com;
delay(5);
//DL();
E=1;
delay(5);
//DL();
E=0;
}
void write_dat(unsigned char dat)
{
unsigned char m;
do{
m=r_status();
m&=0x80;
DL();
}while(m!=0);
RW=0;
RS=1;
P2=dat;
delay(5);
//DL();
E=1;
delay(5);
//DL();
E=0;
}
void lcd_init()
{
write_com(0x38);
write_com(0x0f);
write_com(0x01);
write_com(0x06);
write_com(0x80);
}
unsigned char r_status()
{
unsigned char s;
RS=0;
RW=1;
E=1;
DL();
s=P2;
E=0;
RW=0;
return(s);
}
void main()
{
//while(1);
{
unsigned char i;
lcd_init();
DHT11_delay_ms(100);
DHT11_receive();
write_com(0x80);
for(i=0;i<12;i++)
write_dat(lcd[i]);
write_com(0xc0);
for(i=0;i<9;i++)
write_dat(rec_dat[i]);
DL();
}
while(1);
}
void DL()
{
_nop_();
_nop_();
_nop_();
}
作者:
l834746645
時間:
2020-7-2 16:48
我不久前曾做過這個,想提醒一下吧,DHT11部分,需要嚴格按照他的時序來寫,精確到微秒級us,不然就達不到提取溫濕度信號的作用,其他的注意分號,大小寫之類的就差不多了,如果只是采集信息的話
作者:
larrychen
時間:
2020-8-12 17:29
void main()
{
unsigned char i;
lcd_init();
DHT11_delay_ms(100);
While(1)
{
DHT11_receive();
write_com(0x80);
for(i=0;i<12;i++)
write_dat(lcd[i]);
write_com(0xc0);
for(i=0;i<9;i++)
write_dat(rec_dat[i]);
DL();
}
}
把數據采聚寫在while()循環內,這樣不斷刷新數據。
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1