找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1131|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机+DHT11温湿度个位数据不正确

[复制链接]
跳转到指定楼层
楼主
ID:884998 发表于 2021-3-20 11:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序如下:
这是DHT11的读取程序,显示程序在main文件中,用LCD1602显示,LCD1602的程序绝对是正确的,因为我别的程序也用了,现在的问题是温湿度十位数据正确,个位数据错误,能过校验

#include <reg52.h>

typedef unsigned char uchar;

sbit DATA = P1^6;

void Delay18ms()        //@11.0592MHz
{
    unsigned char i, j;

    i = 33;
    j = 66;
    do
    {
        while (--j);
    } while (--i);
}

void Delay10us()        //@11.0592MHz
{
    unsigned char i;

    i = 2;
    while (--i);
}


void DHT11Start()
{
    DATA = 0;
    Delay18ms();
    DATA = 1;
    Delay10us();
    Delay10us();
    Delay10us();
    DATA = 1;
}

uchar GetByte()
{
    uchar i,b=0;
    for(i=0;i<8;i++)
    {
        while(!DATA);
    Delay10us();
    Delay10us();
    Delay10us();
        b <<= 1;
      if(DATA == 1)b += 1;
                    while(DATA);
  }
    return b;
}

void DHT11GetData(uchar *dat)
{
    uchar datacheck,RH,RL,TH,TL;

    DHT11Start();
    if(!DATA)
    {
        while(!DATA);
        while(DATA);
        RH = GetByte();
        RL = GetByte();
        TH = GetByte();
        TL = GetByte();
        datacheck = GetByte();
        DATA = 1;
    }
   
if(datacheck == (RH+RL+TH+TL))
{
        dat[0] = (RH/10) +'0';
        dat[1] = (RL%10) +'0';
        dat[2] = (TH/10) +'0';
        dat[3] = (TL%10) +'0';
    }
    else
    {
        dat[0] = '0';
        dat[1] = '0';
        dat[2] = '0';
        dat[3] = '0';
    }
   
   
}


















分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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