基于51单片机的窗帘控制系统DHT11程序
时间: 2023-08-12 21:05:01 浏览: 82
以下是基于51单片机的窗帘控制系统中DHT11传感器部分的程序,包含读取温湿度数据和显示温湿度数据的功能:
```c
#include <reg52.h>
#include <intrins.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit DHT11 = P3^6; // DHT11数据引脚
uchar dat[5]; // 存放读取的数据
// 延时函数
void Delay1ms(uint i)
{
while(i--);
}
// 启动DHT11传感器
void StartDHT11()
{
DHT11 = 0;
Delay1ms(20);
DHT11 = 1;
Delay1ms(30);
DHT11 = 0;
}
// 读取DHT11传感器的响应
uchar CheckResponse()
{
uchar retry = 0;
while(DHT11 && retry < 100)
{
Delay1ms(1);
retry++;
}
if(retry >= 100)
return 1;
else
retry = 0;
while(!DHT11 && retry < 100)
{
Delay1ms(1);
retry++;
}
if(retry >= 100)
return 1;
else
return 0;
}
// 从DHT11传感器读取一个位的数据
uchar ReadBit()
{
uchar retry = 0;
while(DHT11 && retry < 100)
{
Delay1ms(1);
retry++;
}
retry = 0;
while(!DHT11 && retry < 100)
{
Delay1ms(1);
retry++;
}
Delay1ms(40);
if(DHT11)
return 1;
else
return 0;
}
// 从DHT11传感器读取一个字节的数据
uchar ReadByte()
{
uchar i, dat = 0;
for(i = 0; i < 8; i++)
{
dat <<= 1;
dat |= ReadBit();
}
return dat;
}
// 从DHT11传感器读取温湿度数据
uchar ReadDHT11()
{
uchar i;
StartDHT11();
if(CheckResponse())
return 1;
for(i = 0; i < 5; i++)
dat[i] = ReadByte();
if(dat[0] + dat[1] + dat[2] + dat[3] != dat[4])
return 1;
return 0;
}
// 显示温湿度数据
void DisplayData()
{
uchar i;
for(i = 0; i < 4; i++)
{
P0 = dat[i];
Delay1ms(100);
}
}
void main()
{
while(1)
{
if(ReadDHT11() == 0)
DisplayData();
else
P0 = 0xFF;
Delay1ms(500);
}
}
```
程序中使用了延时函数、启动DHT11传感器、检测DHT11传感器的响应、从DHT11传感器读取一个位的数据、从DHT11传感器读取一个字节的数据、从DHT11传感器读取温湿度数据和显示温湿度数据等函数。其中,ReadDHT11()函数和DisplayData()函数是关键函数。ReadDHT11()函数中先启动DHT11传感器,然后检测DHT11传感器的响应,接着从DHT11传感器读取温湿度数据并进行校验,最后返回读取结果。DisplayData()函数中将读取的温湿度数据依次显示在P0口上。整个程序通过循环实现读取温湿度数据和显示温湿度数据的功能。