欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
關于單片機dht11傳感器lcd1602只亮屏不顯示數據的問題 求幫助
[打印本頁]
作者:
GIANTXV
時間:
2020-12-8 18:16
標題:
關于單片機dht11傳感器lcd1602只亮屏不顯示數據的問題 求幫助
做的是1602和dht11結合的溫濕度傳感器,但是為什么1602上不顯示數據,只是亮起
4112f8ef9eda8d64011b7924186fc96a.png
(96.7 KB, 下載次數: 53)
下載附件
2020-12-8 18:36 上傳
單片機源程序如下:
#include<reg51.h>
#include<intrins.h>
#include<stdio.h>
#define uint unsigned int
#define uchar unsigned char
sbit rs=P2^0; //lcd數據/指令選擇控制線
sbit rw=P2^1; //lcd讀寫控制線
sbit e=P2^2; //lcd使能控制線
sbit temp_data=P2^3;//dht11數據線
sbit lcd_data=P1;
uchar table[8];
void delayxms(uchar xms)
{
uchar i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void delayxus(uchar xus)
{
while(--xus);
}
void lcdms(uint ms)
{
uchar a,b;
for(;ms>0;ms--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
void lcd_busy()//判斷lcd是否處于忙的狀態
{
uchar temp;
lcd_data=0xff;
rs=0;
rw=1;
do
{
e=1;
temp=lcd_data;
e=0;
}while(temp&0x80);
}
void w_com(uchar com)
{
lcd_busy();
rs=0;//命令端
rw=0;//寫
lcd_data=com;
lcdms(1);
e=1;//使能開關
lcdms(1);
e=0;
}
void w_data(uchar dat)
{
lcd_busy();
rs=1;
rw=0;
lcd_data=dat;
lcdms(1);
e=1;
lcdms(1);
e=0;
}
void lcd_init() //lcd初始化
{
w_com(0x38);
w_com(0x0C);
w_com(0x06);
w_com(0x01);
w_com(0x80);
}
void DHT_start() //dht啟動程序
{
temp_data=1;
delayxus(2);
temp_data=0;
delayxms(20);
temp_data=1;
delayxus(13);
}
uchar rec_byte() //dht11接收一個字節數據
{
uchar i,dat=0;
for(i=0;i<8;i++)
{
while(!temp_data);
delayxus(8);
dat<<=1;
if(temp_data==1)
{
dat+=1;
}
while(temp_data);
}
return dat;
}
void DH_receive() //接收溫濕度數據
{
uchar R_S,R_G,T_S,T_G;
uchar RS,RG,TS,TG,revise;
DHT_start();
if(temp_data==0)
{
while(temp_data==0);
while(temp_data);
R_S=rec_byte();
R_G=rec_byte();
T_S=rec_byte();
T_G=rec_byte();
revise=rec_byte();//校驗位
delayxus(25);
if((R_S+R_G+T_S+T_G)==revise)
{
RS=R_S;
RG=R_G;
TS=T_S;
TG=T_G;
}
table[0]='S';
table[1]='0'+RS/10;
table[2]='0'+RS%10;
table[3]=' ';
table[4]=' ';
table[5]='w';
table[6]='0'+TS/10;
table[7]='0'+TS%10;
}
}
void lcdCursor(uchar x,uchar y,uchar *s)
{
if(y==0)
{
w_com(0x80+x);
}
else
{
w_com(0xC0+x);
}
while(*s)
{
w_data(*s);
s++;
}
}
void lcdshow(uchar x,uchar y,uchar date)
{
if(y==0)
{
w_com(0x80+x);
}
else
{
w_com(0xC0+x);
}
w_data(date);
}
void main()
{
uint i;
lcd_init();
while(1)
{
delayxus(1000);
DH_receive();
for(i=0;i<8;i++)
{
lcdshow(i,0,table[i]);
}
}
}
復制代碼
作者:
suncat0504
時間:
2020-12-8 19:36
調試程序, 你可以分塊處理實驗。先調通LCD1602的顯示模塊是否正常。正常后,再試著調試DHT11模塊。
這樣可以快速知道問題出在哪里。從你的代碼來看,在主函數的循環中,僅僅有個1000微秒的延時。但是,我看到DHT11的資料,要求DHT11的采樣時間間隔必須是2秒以上。
你的程序讀取周期明顯太小,前面的數據還沒有讀出來呢,后續又開始讀,你覺得能得到結果嗎?
作者:
suncat0504
時間:
2020-12-8 20:07
這里有一個可以參考的例子,是別的網友提供的,我沒試過是否可行,但是建議你看看。
http://m.raoushi.com/bbs/dpj-189858-1.html
作者:
2048858214
時間:
2020-12-8 21:34
并一個排阻上去
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1