找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2868|回复: 11
收起左侧

dht11测试温湿度,1602显示,温湿度固定为15?求助大神

[复制链接]
回帖奖励 35 黑币 回复本帖可获得 5 黑币奖励! 每人限 1 次(中奖概率 80%)
ID:167739 发表于 2017-3-2 20:07 | 显示全部楼层 |阅读模式
本帖最后由 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);      
        }  
}

回复

使用道具 举报

ID:167739 发表于 2017-3-2 20:10 | 显示全部楼层
跪求各位大神
回复

使用道具 举报

ID:85726 发表于 2017-3-3 09:43 | 显示全部楼层

注意延时,DHT11对延时要求比较高!注意你的单片机速度和晶振的频率!
回复

使用道具 举报

ID:167739 发表于 2017-3-4 20:20 | 显示全部楼层
我的晶振用的是12M的啊
回复

使用道具 举报

ID:193152 发表于 2017-5-3 16:40 | 显示全部楼层

回帖奖励 +5 黑币

没错误
回复

使用道具 举报

ID:193152 发表于 2017-5-3 16:40 | 显示全部楼层
我下我单片机上都挺对的
回复

使用道具 举报

ID:193152 发表于 2017-5-3 16:41 | 显示全部楼层
我下我单片机上都挺对
回复

使用道具 举报

ID:169944 发表于 2017-5-3 17:07 | 显示全部楼层

回帖奖励 +5 黑币

固定显示的话是不是1602没有清屏
回复

使用道具 举报

ID:82765 发表于 2017-5-3 17:16 | 显示全部楼层

回帖奖励 +5 黑币

提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

ID:140489 发表于 2017-7-26 12:54 | 显示全部楼层
11.0592的晶振可以正常显示的,在开发板上测试过的
回复

使用道具 举报

ID:105206 发表于 2017-7-28 19:40 | 显示全部楼层
我发个帖,看看
回复

使用道具 举报

ID:213173 发表于 2017-7-29 08:06 | 显示全部楼层
        if(num_check=check)  这里少个=号
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表