51单片机c语言DTH11读取数据,并用12864显示
时间: 2023-10-26 20:14:02 浏览: 186
以下是51单片机C语言DTH11读取数据并用12864显示的代码:
```c
#include <reg51.h>
#include <stdio.h>
#include "lcd12864.h" // 12864液晶库头文件
#define DTH11_PIN P3_4 // DTH11数据线连接到P3.4
sbit DTH11 = P3^4; // 定义DTH11引脚
unsigned char humi, temp; // 温湿度变量
// 延时函数
void Delay10us(unsigned char us)
{
while (us--)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
// 读取DTH11数据
unsigned char ReadDTH11(void)
{
unsigned char i, j, k;
unsigned char data[5] = {0}; // 存储读取到的数据
// 发送起始信号
DTH11 = 0;
Delay10us(20);
DTH11 = 1;
Delay10us(30);
// 等待DTH11响应
if (!DTH11)
{
Delay10us(80);
if (DTH11)
{
Delay10us(40);
return 0;
}
}
// DTH11响应后,开始读取数据
for (i = 0; i < 5; i++)
{
for (j = 0; j < 8; j++)
{
k = 0;
while (!DTH11)
{
Delay10us(1);
k++;
if (k > 100)
{
return 0;
}
}
Delay10us(30);
if (DTH11)
{
data[i] |= (1 << (7 - j));
}
while (DTH11)
{
Delay10us(1);
k++;
if (k > 100)
{
return 0;
}
}
}
}
// 校验数据
if (data[0] + data[1] + data[2] + data[3] == data[4])
{
humi = data[0];
temp = data[2];
return 1;
}
else
{
return 0;
}
}
void main()
{
Lcd12864Init(); // 初始化12864液晶屏
while (1)
{
if (ReadDTH11())
{
Lcd12864Clear(); // 清屏
Lcd12864WriteString(0, 0, "Humidity:"); // 显示湿度
Lcd12864WriteString(6, 0, "%");
Lcd12864WriteString(0, 1, "Temperature:"); // 显示温度
Lcd12864WriteString(12, 1, "C");
Lcd12864WriteNumber(9, 0, humi); // 显示湿度数值
Lcd12864WriteNumber(13, 1, temp); // 显示温度数值
}
else
{
Lcd12864Clear(); // 清屏
Lcd12864WriteString(0, 0, "Error: DTH11"); // 显示错误信息
}
Delay10us(5000); // 延时500ms
}
}
```
以上代码中的`Lcd12864Init()`函数和`Lcd12864`库中的函数实现了12864液晶屏的初始化和写入数据的功能。`ReadDTH11()`函数实现了读取DTH11传感器数据的功能。在主函数中,不断循环读取DTH11传感器数据,并将数据显示在12864液晶屏上。如果读取数据失败,则显示错误信息。
阅读全文