51单片机通过c语言实现dht11显示
以下是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 著作权归作者所有。请勿转载和采集!