标题: 52RC单片机,dht11不显示数据 [打印本页]

作者: 硬瀚    时间: 2023-4-20 22:25
标题: 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)

仿真

仿真

作者: man1234567    时间: 2023-4-21 08:18
器件损坏、接线错误、延时不当......
作者: lkc8210    时间: 2023-4-21 11:24
30块包邮的逻辑分析仪,你值得拥有




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1