51单片机数字湿度计程序
时间: 2023-12-23 22:05:27 浏览: 29
以下是51单片机数字湿度计程序的基本框架,你可以根据自己的具体需求进行修改:
```
#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
#include"lcd1602.h" // LCD1602液晶显示屏驱动程序
sbit DHT11 = P3^7; // DHT11传感器数据线引脚
unsigned char dat[5]; // 存储DHT11传感器读取的数据
// DHT11传感器开始信号
void DHT11_Start()
{
DHT11 = 0; // 主机将总线拉低至少18ms
delay_ms(30);
DHT11 = 1; // 主机将总线拉高,等待DHT11响应
while(DHT11);
while(!DHT11);
while(DHT11);
}
// 读取DHT11传感器数据
void DHT11_Read()
{
unsigned char i,j;
for(j=0;j<5;j++)
{
dat[j] = 0;
}
for(i=0;i<8;i++)
{
while(!DHT11);
_nop_();
_nop_();
dat[0]<<=1;
if(DHT11)
{
dat[0]|=1;
}
while(DHT11);
}
for(i=0;i<8;i++)
{
while(!DHT11);
_nop_();
_nop_();
dat[1]<<=1;
if(DHT11)
{
dat[1]|=1;
}
while(DHT11);
}
for(i=0;i<8;i++)
{
while(!DHT11);
_nop_();
_nop_();
dat[2]<<=1;
if(DHT11)
{
dat[2]|=1;
}
while(DHT11);
}
for(i=0;i<8;i++)
{
while(!DHT11);
_nop_();
_nop_();
dat[3]<<=1;
if(DHT11)
{
dat[3]|=1;
}
while(DHT11);
}
for(i=0;i<8;i++)
{
while(!DHT11);
_nop_();
_nop_();
dat[4]<<=1;
if(DHT11)
{
dat[4]|=1;
}
while(DHT11);
}
}
// 主函数
void main()
{
float hum,temp; // 存储湿度和温度值
char str[16]; // 存储字符串
LCD_Init(); // 初始化液晶显示屏
while(1)
{
DHT11_Start(); // 发送开始信号
DHT11_Read(); // 读取数据
hum = dat[0]; // 湿度值
temp = dat[2]; // 温度值
if(dat[1]!=0 || dat[3]!=0) // 数据校验
{
LCD_Clear(); // 清屏
sprintf(str,"Hum:%.1f%%",hum); // 格式化字符串
LCD_Write_String(0,0,"Humidity:"); // 写入字符串
LCD_Write_String(0,1,str); // 写入字符串
sprintf(str,"Temp:%.1fC",temp); // 格式化字符串
LCD_Write_String(9,1,str); // 写入字符串
delay_ms(500); // 延时500ms
}
}
}
```
上述代码依赖于 `lcd1602.h` 的液晶显示屏驱动程序,你需要自行编写该头文件并将其包含在代码中。同时,由于 DHT11 传感器的数据通信是时序严格的,因此需要使用 `_nop_()` 函数进行空操作来调整时序。