单片机dht11温湿度代码
时间: 2023-07-09 08:21:08 浏览: 122
以下是DHT11温湿度传感器的单片机代码示例,适用于STC89C52单片机:
```
#include <reg52.h>
#define DHT11_PIN P2_0
void delay(unsigned int i)
{
while(i--);
}
void start_signal()
{
DHT11_PIN = 0;
delay(18000);
DHT11_PIN = 1;
delay(20);
DHT11_PIN = 0;
}
unsigned char read_byte()
{
unsigned char i, j, value = 0;
for(i = 0; i < 8; i++)
{
while(!DHT11_PIN);
delay(30);
if(DHT11_PIN)
value |= (1 << (7 - i));
while(DHT11_PIN);
}
return value;
}
unsigned char read_dht11(unsigned char *temp, unsigned char *humi)
{
unsigned char buffer[5], i;
start_signal();
if(!DHT11_PIN)
return 0;
while(DHT11_PIN);
for(i = 0; i < 5; i++)
buffer[i] = read_byte();
if(buffer[4] != (buffer[0] + buffer[1] + buffer[2] + buffer[3]))
return 0;
*humi = buffer[0];
*temp = buffer[2];
return 1;
}
void main()
{
unsigned char temp, humi;
while(1)
{
if(read_dht11(&temp, &humi))
{
printf("Temperature = %d, Humidity = %d\r\n", temp, humi);
}
delay(500);
}
}
```
在此代码中,我们使用单片机的IO口来读取DHT11传感器。首先,我们定义了一个delay函数来延迟一定的时间。然后,我们定义了start_signal函数来发送开始信号。接着,我们定义了read_byte函数来读取一个字节的数据。最后,我们定义了read_dht11函数来读取温度和湿度值,并将它们打印到串口中。在主函数中,我们不断循环读取传感器的值,并使用delay函数延迟500毫秒。注意:在使用printf函数之前,需要在代码中添加对应的头文件和初始化串口。