以下是51单片机通过c语言实现dht11显示的具体代码:

#include <reg52.h>
#include <stdio.h>
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int

sbit DHT11_DATA = P1^4;

uint T1, T2, RH1, RH2;

void delay_us(uint us)    // 延时函数,单位为微秒
{
    while(us--);
}

void delay_ms(uint ms)    // 延时函数,单位为毫秒
{
    while(ms--)
    {
        delay_us(1000);
    }
}

void DHT11_START(void)    // DHT11开始信号
{
    DHT11_DATA = 0;
    delay_ms(18);
    DHT11_DATA = 1;
    delay_us(30);
}

uchar DHT11_RESPONSE(void)    // DHT11响应信号
{
    uchar i;
    uchar response;

    response = 0;

    while(DHT11_DATA && response < 100)    // 等待DHT11从机响应
    {
        delay_us(1);
        response++;
    }

    if(response >= 100)
    {
        return 0;
    }

    response = 0;

    while(!DHT11_DATA && response < 100)    // 等待DHT11从机响应
    {
        delay_us(1);
        response++;
    }

    if(response >= 100)
    {
        return 0;
    }

    response = 0;

    while(DHT11_DATA && response < 100)    // 等待DHT11从机响应
    {
        delay_us(1);
        response++;
    }

    if(response >= 100)
    {
        return 0;
    }

    return 1;
}

uchar DHT11_READ(void)    // 读取DHT11数据
{
    uchar i;
    uchar data = 0;

    for(i = 0; i < 8; i++)
    {
        while(!DHT11_DATA);

        delay_us(30);

        if(DHT11_DATA == 0)
        {
            data = data << 1;
        }
        else
        {
            data = data << 1 | 0x01;
        }

        while(DHT11_DATA);
    }

    return data;
}

void DHT11(void)    // 读取DHT11温湿度数据
{
    uchar RH_H, RH_L, T_H, T_L, CRC;

    DHT11_START();

    if(!DHT11_RESPONSE())
    {
        RH1 = 0;
        T1 = 0;
        return;
    }

    RH_H = DHT11_READ();
    RH_L = DHT11_READ();
    T_H = DHT11_READ();
    T_L = DHT11_READ();
    CRC = DHT11_READ();

    RH1 = RH_H;
    RH2 = RH_L;
    T1 = T_H;
    T2 = T_L;
}

void main(void)
{
    while(1)
    {
        DHT11();
        printf("Temperature:%d.%dC, Humidity:%d.%d%%\n", T1, T2, RH1, RH2);
        delay_ms(1000);
    }
}

在此代码中,我们使用了51单片机的P1.4口接DHT11传感器,通过DHT11传感器读取温度和湿度数据,并将数据显示在串口上。我们使用了延时函数来等待DHT11从机响应和读取数据。在主函数中,我们通过不断地调用DHT11函数来读取温度和湿度数据,并使用printf函数将数据显示在串口上。注意,由于51单片机的计算能力有限,因此我们需要使用printf函数来将温度和湿度数据转换为字符串并显示在串口上。


原文地址: http://www.cveoy.top/t/topic/bnpc 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录