dht11与51单片机代码
时间: 2024-01-24 20:05:20 浏览: 26
以下是DHT11与51单片机的代码:
```
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DHT11 = P3^2;
//延时函数
void Delayms(uint x)
{
uint i, j;
for(i = x; i > 0; i--)
for(j = 110; j > 0; j--);
}
//发送起始信号
void SendStartSignal()
{
DHT11 = 0;
Delayms(18);
DHT11 = 1;
Delayus(30);
}
//检测DHT11响应信号
uchar CheckResponse()
{
uchar i = 0;
while(DHT11)
{
i++;
Delayus(1);
if(i > 100)
return 0;
}
i = 0;
while(!DHT11)
{
i++;
Delayus(1);
if(i > 100)
return 0;
}
return 1;
}
//读取一个字节的数据
uchar ReadByte()
{
uchar i, dat = 0;
for(i = 0; i < 8; i++)
{
while(!DHT11);
Delayus(30);
if(DHT11)
dat |= (1<<(7-i));
while(DHT11);
}
return dat;
}
//读取温湿度数据
uchar ReadDHT11Data(uchar *temp, uchar *humi)
{
uchar buf[5];
uchar i;
SendStartSignal();
if(!CheckResponse())
return 0;
for(i = 0; i < 5; i++)
buf[i] = ReadByte();
if((buf[0]+buf[1]+buf[2]+buf[3]) == buf[4])
{
*humi = buf[0];
*temp = buf[2];
return 1;
}
else
return 0;
}
void main()
{
uchar temp, humi;
while(1)
{
if(ReadDHT11Data(&temp, &humi))
{
printf("Temperature = %d°C, Humidity = %d%%\n", temp, humi);
}
Delayms(1000);
}
}
```
注:以上代码仅供参考,具体实现需要根据硬件平台和实际情况进行调整。