找回密码
 立即注册

QQ登录

只需一步,快速开始

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

52RC单片机,dht11不显示数据

[复制链接]
跳转到指定楼层
楼主
52RC单片机11.0592MHZ晶振,dht11在lcd1602上不显示数据,仿真可以显示,但是实物不行,换了别人的模块也显示不了,按时序图来的不知道哪里的问题,请教大家/*********************************************************///
读取DHT11单总线上的一个字节
/*********************************************************/
uchar DhtReadByte(void)
{   
        bit bit_i;
        uchar j;
        uchar dat=0;

        for(j=0;j<8;j++)   
        {
                while(!DHT11_P);        // 等待低电平结束        
                Delay10us();                        // 延时
                Delay10us();
                Delay10us();
                if(DHT11_P==1)                // 判断数据线是高电平还是低电平
                {
                        bit_i=1;
                        while(DHT11_P);
                }
                else
                {
                        bit_i=0;
                }
                dat<<=1;                                   // 将该位移位保存到dat变量中
                dat|=bit_i;   
        }
        return(dat);  
}


/*********************************************************/
// 读取DHT11的一帧数据,湿高、湿低(0)、温高、温低(0)、校验码
/*********************************************************/
void ReadDhtData()
{            
        uchar HumiHig;                // 湿度高检测值
        uchar HumiLow;                // 湿度低检测值
        uchar TemHig;                        // 温度高检测值
        uchar TemLow;                        // 温度低检测值
        uchar check;                        // 校验字节
        
        DHT11_P=0;                                // 主机拉低
        DelayMs(20);                        // 保持20毫秒
        DHT11_P=1;                                // DATA总线由上拉电阻拉高

        Delay10us();                         // 延时等待30us
        Delay10us();
        Delay10us();

        while(!DHT11_P);        // 等待DHT的低电平结束
        while(DHT11_P);                // 等待DHT的高电平结束

        //进入数据接收状态
        HumiHig = DhtReadByte();         // 湿度高8位
        HumiLow = DhtReadByte();         // 湿度低8为,总为0
        TemHig  = DhtReadByte();         // 温度高8位
        TemLow  = DhtReadByte();         // 温度低8为,总为0
        check   = DhtReadByte();        // 8位校验码,其值等于读出的四个字节相加之和的低8位

        DHT11_P=1;                                // 拉高总线

        if(check==HumiHig + HumiLow + TemHig + TemLow)                 // 如果收到的数据无误
        {
                temp=TemHig;                         // 将温度的检测结果赋值给全局变量temp
                humi=HumiHig;                        // 将湿度的检测结果赋值给全局变量humi
        }
}

实物.jpg (68.25 KB, 下载次数: 30)

实物.jpg

屏幕截图 2023-04-01 172240.png (143.22 KB, 下载次数: 34)

仿真

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

使用道具 举报

沙发
ID:584814 发表于 2023-4-21 08:18 | 只看该作者
器件损坏、接线错误、延时不当......
回复

使用道具 举报

板凳
ID:161164 发表于 2023-4-21 11:24 | 只看该作者
30块包邮的逻辑分析仪,你值得拥有
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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