51单片机的DHT11驱动代码
时间: 2023-11-12 09:03:52 浏览: 96
以下是51单片机的DHT11驱动代码,仅供参考:
```
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit DHT11 = P3^3; // DHT11数据线接在P3.3口
uchar T_data_H,T_data_L,R_data_H,R_data_L;
void delay(uint z) // 延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void start_DHT11(void) // DHT11传感器开始工作
{
DHT11 = 0; // 主机发起开始信号
delay(30); // 延时至少18ms
DHT11 = 1; // 主机拉高DHT11数据线
delay(5); // 延时20~40us
DHT11 = 0; // 主机拉低DHT11数据线
delay(20); // 延时80us
DHT11 = 1; // 主机拉高DHT11数据线
}
uchar read_DHT11(void) // 读取DHT11传感器的数据
{
uchar i,dat;
dat = 0;
for(i=0;i<8;i++)
{
while(!DHT11); // 等待DHT11响应信号
delay(5); // 接收数据前延时5us
dat <<= 1;
if(DHT11) dat += 1;
while(DHT11); // 等待DHT11结束信号
}
return dat; // 返回读取的数据
}
void main()
{
while(1)
{
start_DHT11(); // 开始工作
R_data_H = read_DHT11(); // 读取湿度整数部分
R_data_L = read_DHT11(); // 读取湿度小数部分
T_data_H = read_DHT11(); // 读取温度整数部分
T_data_L = read_DHT11(); // 读取温度小数部分
if((T_data_H+T_data_L+R_data_H+R_data_L) == read_DHT11()) // 判断校验和是否正确
{
// 将读取到的温度和湿度数据写入处理代码中
}
}
}
```
注:此代码仅供参考,实际应用中需要根据具体情况进行调整。
阅读全文