标题:
dht11测试温湿度,1602显示,温湿度固定为15?求助大神
[打印本页]
作者:
lx490004
时间:
2017-3-2 20:07
标题:
dht11测试温湿度,1602显示,温湿度固定为15?求助大神
本帖最后由 lx490004 于 2017-3-2 20:09 编辑
这是小弟的程序,在开发板上试的程序,89c52rc
不知道为什么温湿度固定显示15
下面是程序,麻烦各位了
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
typedef bit BOOL;
sbit io = P3^0;
sbit rs = P1^0;
sbit rw = P1^1;
sbit ep = P2^5;
uchar data_byte;
uchar RH,RL,TH,TL;
/********延时模块***********/
void delay(uchar ms)
{ // 延时子程序
uchar i;
while(ms--)
{
for(i = 0;i<250;i++);
}
}
void delay1()//延时10us
{
uchar i;
i--;
i--;
i--;
i--;
i--;
i--;
}
void longdelay(uchar s) //长延时
{
while(s--)
{
delay(60);
}
}
BOOL lcd_bz()//测试LCD忙碌状态
{
BOOL result;
rs = 0;
rw = 1;
ep = 1;
result = (BOOL)(P0 & 0x80);
ep = 0;
return result;
}
void write_cmd(uchar cmd)// 写指令
{
while(lcd_bz());
rs = 0;
rw = 0;
ep = 0;
P0 = cmd;
ep = 1;
ep = 0;
}
void write_addr(uchar addr)//写地址
{
write_cmd(addr|0x80);
}
void write_byte(uchar dat)//写字节
{
while(lcd_bz());
rs = 1;
rw = 0;
ep = 0;
P0 = dat;
ep = 1;
ep = 0;
}
void lcd_init()// 初始化
{
write_cmd(0x38);
delay(1);
write_cmd(0x08);
delay(1);
write_cmd(0x01);
delay(1);
write_cmd(0x06);
delay(1);
write_cmd(0x0c);
delay(1);
}
void display(uchar addr, uchar q)//在某一地址上显示一字节
{
delay(10);
write_addr(addr);
write_byte(q);
longdelay(2);
}
void start()//开始信号
{
io=1;
delay1();
io=0;
delay(20);//>18ms
io=1;
delay1();//20-40us
delay1();
delay1();
delay1();
delay1();
}
uchar receive_byte()//接收一个字节
{
uchar i,temp,count;
for(i=0;i<8;i++)
{
count=2;
while((!io)&&count++)//等待50us低电平结束
temp=0;
delay1();
delay1();
delay1();
delay1();
if(io==1)
temp=1;
count=2;
while((io)&&count++);
if(count==1)break;
data_byte<<=1;
data_byte|=temp;
}
return data_byte;
}
void receive()//接收数据
{
uchar T_H,T_L,R_H,R_L,check,num_check;
uchar count;
start();//开始信号
io=1;
if(!io)//读取DHT11响应信号
{
count=2;
while((!io)&&count++);//DHT11高电平80us是否结束
count=2;
while((io)&&count++);
R_H=receive_byte();
R_L=receive_byte();
T_H=receive_byte();
T_L=receive_byte();
check=receive_byte();
io=0;//拉低延时50us
delay1();
delay1();
delay1();
delay1();
delay1();
io=1;
num_check=R_H+R_L+T_H+T_L;
if(num_check=check)
{
RH=R_H;
RL=R_L;
TH=T_H;
TL=T_L;
check=num_check;
}
}
}
void main()
{
lcd_init();
delay(10);
while(1)
{
receive();
delay(100);
display(0x00,'R');
display(0x01,':');
display(0x02,RH/10+0x30);
display(0x03,RH%10+0x30);
display(0x04,'%');
display(0x40,'T');
display(0x41,':');
display(0x42,TH/10+0x30);
display(0x43,TH%10+0x30);
display(0x44,0xdf);
display(0x45,0x43);
}
}
作者:
lx490004
时间:
2017-3-2 20:10
跪求各位大神
作者:
ning
时间:
2017-3-3 09:43
lx490004 发表于 2017-3-2 20:10
跪求各位大神
注意延时,DHT11对延时要求比较高!注意你的单片机速度和晶振的频率!
作者:
lx490004
时间:
2017-3-4 20:20
我的晶振用的是12M的啊
作者:
a计划
时间:
2017-5-3 16:40
没错误
作者:
a计划
时间:
2017-5-3 16:40
我下我单片机上都挺对的
作者:
a计划
时间:
2017-5-3 16:41
我下我单片机上都挺对
作者:
zha
时间:
2017-5-3 17:07
固定显示的话是不是1602没有清屏
作者:
cjjcjj1
时间:
2017-5-3 17:16
提示:
作者被禁止或删除 内容自动屏蔽
作者:
lids
时间:
2017-7-26 12:54
11.0592的晶振可以正常显示的,在开发板上测试过的
作者:
jubaolun
时间:
2017-7-28 19:40
我发个帖,看看
作者:
wulin
时间:
2017-7-29 08:06
if(num_check=check) 这里少个=号
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1