stc89将从DHT11上获取到的数据,显示到数码管上的代码
时间: 2024-02-12 07:08:15 浏览: 96
下面是一个示例代码,可以将从DHT11传感器获取到的温湿度数据显示在数码管上。该代码使用的是STC89单片机,需要连接一个DHT11传感器和一个4位共阳数码管。
```c
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DHT11 = P1^0; // DHT11数据引脚连接到P1.0
sbit LSA = P2^2; // 数码管引脚定义
sbit LSB = P2^3;
sbit LSC = P2^4;
uchar DHT11_Data[5]; // 存放DHT11传感器读取到的数据
uchar Display_Data[4]; // 存放需要显示在数码管上的数据
// 数码管显示函数
void Display(uchar num, uchar dat)
{
LSA = 1; LSB = 1; LSC = 1;
switch(num) // 选择哪一位数码管
{
case 0: LSA = 0; break;
case 1: LSB = 0; break;
case 2: LSC = 0; break;
default: break;
}
P0 = dat; // 显示的数据
}
// 延时函数
void Delay(uint t)
{
uint i;
while(t--)
{
for(i=0;i<120;i++);
}
}
// 从DHT11传感器读取数据
uchar DHT11_ReadData()
{
uchar i, j;
for(j=0;j<5;j++) // 一共读取5个字节的数据
{
DHT11_Data[j] = 0;
}
DHT11 = 0; // 发送起始信号
Delay(20); // 持续低电平20ms
DHT11 = 1; // 发送结束信号
Delay(30); // 等待20-40us
if(DHT11 == 0) // 等待DHT11的响应信号
{
while(DHT11 == 0); // 响应信号结束
while(DHT11 == 1); // 传输数据前的延时
for(j=0;j<5;j++) // 一共读取5个字节的数据
{
for(i=0;i<8;i++)
{
while(DHT11 == 0); // 每个bit以50us低电平开始
Delay(30); // 0bit以26-28us高电平结束,1bit以70us高电平结束
if(DHT11 == 1) // 判断接收到的bit是0还是1
{
DHT11_Data[j] |= (1<<(7-i)); // 将每个bit的值存储到数组中
}
while(DHT11 == 1); // 每个bit以50us的低电平结束
}
}
return 1; // 读取数据成功
}
else
{
return 0; // 读取数据失败
}
}
// 将温度和湿度数据存储到Display_Data数组中
void GetData()
{
uchar temp, hum;
temp = DHT11_Data[2]; // 温度数据在数组的第3个元素
hum = DHT11_Data[0]; // 湿度数据在数组的第1个元素
Display_Data[0] = temp/10; // 十位数
Display_Data[1] = temp%10; // 个位数
Display_Data[2] = hum/10; // 十位数
Display_Data[3] = hum%10; // 个位数
}
// 主函数
void main()
{
uchar i, j;
while(1)
{
if(DHT11_ReadData()) // 读取DHT11传感器数据成功
{
GetData(); // 存储温湿度数据
for(i=0;i<50;i++) // 循环50次,持续显示温湿度数据
{
for(j=0;j<4;j++) // 依次显示4位数码管
{
Display(j, Display_Data[j]); // 显示数码管
Delay(5); // 延时,使数码管的显示稳定
}
}
}
else // 读取DHT11传感器数据失败
{
for(i=0;i<4;i++) // 数码管显示8888,表示读取数据失败
{
Display(i, 0x7f); // 0x7f表示数码管显示8
}
Delay(100); // 延时等待下一次读取
}
}
}
```
需要注意的是,DHT11传感器的数据读取过程比较复杂,需要严格按照规定的时间进行信号的发送和接收,否则可能会读取失败。另外,数码管的显示需要使用适当的延时,以保证显示效果稳定。
阅读全文