51单片机数字湿度计代码
时间: 2023-11-28 08:47:16 浏览: 123
(含代码,含仿真)基于51单片机+DHT22+LCD1602简易温湿度检测计+温湿度达阈值控制用电器
5星 · 资源好评率100%
以下是一个简单的51单片机数字湿度计代码,使用温湿度传感器DHT11来测量环境湿度。
```
#include <reg52.h>
sbit DHT11=P2^0;
unsigned char humidity_byte1,humidity_byte2,temperature_byte1,temperature_byte2,checksum;
void delay(unsigned int time) // 延时函数
{
unsigned int i,j;
for(i=0;i<time;i++)
for(j=0;j<110;j++);
}
void start_DHT11() // 启动DHT11传感器
{
DHT11=0;
delay(20);
DHT11=1;
delay(30);
}
unsigned char check_response() // 检测DHT11传感器的响应
{
unsigned char response=0;
delay(40);
if(!DHT11)
{
delay(80);
if(DHT11) response=1;
else response=-1;
}
while(DHT11);
return response;
}
unsigned char read_data() // 读取DHT11传感器的数据
{
unsigned char i=0,j=0;
for(j=0;j<8;j++)
{
while(!DHT11);
delay(30);
if(DHT11==0)
i&= ~(1<<(7-j));
else
{
i|= (1<<(7-j));
while(DHT11);
}
}
return i;
}
void main()
{
start_DHT11(); // 启动DHT11传感器
if(check_response()==1) // 检测响应是否正常
{
humidity_byte1=read_data(); // 读取湿度数据的高8位
humidity_byte2=read_data(); // 读取湿度数据的低8位
temperature_byte1=read_data(); // 读取温度数据的高8位
temperature_byte2=read_data(); // 读取温度数据的低8位
checksum=read_data(); // 读取校验和
if(checksum==(humidity_byte1+humidity_byte2+temperature_byte1+temperature_byte2)) // 校验和是否正确
{
printf("湿度为:%d.%d%%RH\n",humidity_byte1,humidity_byte2); // 输出湿度
printf("温度为:%d.%d℃\n",temperature_byte1,temperature_byte2); // 输出温度
}
else
printf("数据传输错误!\n");
}
else
printf("没有响应!\n");
}
```
在程序中,使用了DHT11传感器的三个信号线:VCC、GND和DATA。其中,DATA线用于数据传输。程序通过发送起始信号、等待DHT11响应、读取湿度和温度数据以及校验和来完成对DHT11传感器的操作。最后,将湿度和温度值输出到串口。
阅读全文