找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1813|回復(fù): 3
收起左側(cè)

51單片機(jī)+DHT111數(shù)碼管顯示出錯(cuò)

[復(fù)制鏈接]
ID:626743 發(fā)表于 2021-7-24 20:32 | 顯示全部樓層 |閱讀模式
首先感謝進(jìn)來(lái)看的朋友,表示感謝。請(qǐng)問(wèn)我這個(gè)DHT11數(shù)碼管顯示,為什么數(shù)碼管只顯示最后一位?
主函數(shù):
#include<reg52.h>
#include"dht11.h"
#include"delay.h"
#include"uart.h"

sbit B1 = P2^2;
sbit B2 = P2^1;
sbit B3 = P2^0;
unsigned char tempH,tempL,humiH,humiL;

unsigned char Temp_Humi[4];
unsigned char code Temp_Table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void Show_temp(void)
{

        uint i=0;
        Temp_Humi[0] = tempH/10;
        Temp_Humi[1] = tempH%10;
        Temp_Humi[2] = humiH/10;
        Temp_Humi[3] = humiH%10;
        for(i=0;i<4;i++)
        {
                switch(i)
                {       
                        case (0) : B1 = 0 ;B2 = 0 ;B3 = 0 ; break;
                        case (1) : B1 = 0 ;B2 = 0 ;B3 = 1 ; break;
                        case (2) : B1 = 0 ;B2 = 1 ;B3 = 0 ; break;
                        case (3) : B1 = 0 ;B2 = 1 ;B3 = 1 ; break;
                }                                                                                                                         
                P0 =  Temp_Table[Temp_Humi[i]];
                Delay40us();
        }

}
int main(void)
{       
        Timer0Init();
        UartInit();
        Dht11_Star();
        if(Dht11_Check()<0)       
                printf("error! \r\n");
        else
                printf("ok!  \r\n");
        while(1)
        {       
                Dht11_Read_Dat(&tempL,&tempH,&humiH,&humiL);
                Delay4ms();
                Show_temp();
                printf("temp: %bu%bu  humi: %bu%bu\r\n",Temp_Humi[0],Temp_Humi[1],Temp_Humi[2],Temp_Humi[3]);
        }
}






DHT11時(shí)序讀取

#include<intrins.h>
#include"dht11.h"
#include"delay.h"

void Dht11_Star(void)
{
        DATE = 0;
        Delay20ms();
        DATE = 1;
        Delay30us();                
               
}

char Dht11_Check(void)
{
        uint t = 0;
        while(DATE)
        {
                t++;
                _nop_();
                if(t>4000)
                {
                        return -1;
                }
        }
        t=0;
        while(!DATE)
        {
                t++;
                _nop_();
                if(t>100)
                        return -2;
        }
                t=0;
        while(DATE)
        {
                t++;
                _nop_();
                if(t>100)
                        return -3;
        }
        return 0;                               
}

uchar Dht11_Read(void)
{
        uint i,t=0;
        uchar temp=0;
        for(i=0;i<8;i++)
        {
                while(!DATE)
                {
                        t++;
                        _nop_();
                        if(t>60)
                                return -1;
                }
                Delay40us();
                temp <<= 1;
                if(DATE)
                {
                        temp |= 1;
                        t=0;
                        while(DATE)
                        {
                                t++;
                                _nop_();
                                if(t>80)
                                        return -1;
                        }
                }
        }
        return temp;
}

short Dht11_Read_Dat(char *tempL,char *tempH,char *humiH,char *humiL)
{
        uchar i;
        uchar buff[5];
        Dht11_Star();
        if(Dht11_Check() == 0)
        {
                for(i=0;i<5;i++)
                {
                        buff[i]= Dht11_Read();
                }
                Delay40us();
                if((buff[0]+buff[1]+buff[2]+buff[3]) == buff[4])
                {
                        *humiH=buff[0];
                        *humiL=buff[1];
                        *tempH=buff[2];
                        *tempL=buff[3];
                        return 0;
                }
                else
                        return -1;
        }
        else
                return -2;
}

51hei圖片_20210724202228.png
回復(fù)

使用道具 舉報(bào)

ID:747478 發(fā)表于 2021-7-25 01:54 來(lái)自手機(jī) | 顯示全部樓層
把show-temp函數(shù)里delay延時(shí)改成4ms試試
回復(fù)

使用道具 舉報(bào)

ID:626743 發(fā)表于 2021-7-25 14:38 | 顯示全部樓層
wangshangxing 發(fā)表于 2021-7-25 01:54
把show-temp函數(shù)里delay延時(shí)改成4ms試試

謝謝 解決了
回復(fù)

使用道具 舉報(bào)

ID:965153 發(fā)表于 2021-9-9 20:45 | 顯示全部樓層
怎么可以用dht11檢查溫度 當(dāng)溫度大于三十?dāng)z氏度 濕度大于60%時(shí)亮警燈阿
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表