dht11代码51单片机
时间: 2023-11-11 07:06:32 浏览: 116
DHT11是一种数字温湿度传感器,可以通过单片机来读取温湿度数据。以下是DHT11的51单片机代码示例:
```
#include <reg52.h>
#include <intrins.h>
#define DHT11_PORT P2
#define DHT11_PIN 0
unsigned char dht11_data[5];
void delay_us(unsigned int us)
{
while(us--)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
void delay_ms(unsigned int ms)
{
while(ms--)
{
delay_us(1000);
}
}
void dht11_start()
{
DHT11_PORT &= ~(1 << DHT11_PIN);
delay_ms(18);
DHT11_PORT |= (1 << DHT11_PIN);
delay_us(30);
}
unsigned char dht11_read_byte()
{
unsigned char i, data = 0;
for(i = 0; i < 8; i++)
{
while(!(DHT11_PORT & (1 << DHT11_PIN)));
delay_us(30);
if(DHT11_PORT & (1 << DHT11_PIN))
{
data |= (1 << (7 - i));
}
while((DHT11_PORT & (1 << DHT11_PIN)));
}
return data;
}
void dht11_read_data()
{
unsigned char i;
dht11_start();
if(!(DHT11_PORT & (1 << DHT11_PIN)))
{
while(!(DHT11_PORT & (1 << DHT11_PIN)));
while((DHT11_PORT & (1 << DHT11_PIN)));
for(i = 0; i < 5; i++)
{
dht11_data[i] = dht11_read_byte();
}
}
}
void main()
{
while(1)
{
dht11_read_data();
//温度数据
printf("Temperature: %d.%d C\n", dht11_data[2], dht11_data[3]);
//湿度数据
printf("Humidity: %d.%d %%\n", dht11_data[0], dht11_data[1]);
delay_ms(1000);
}
}
```
这段代码通过P2口的第0位连接DHT11传感器,读取温湿度数据并输出到串口。在使用前需要先初始化串口。
阅读全文