基于51单片机的温湿度检测设计拟写一篇毕业设计
时间: 2023-12-13 08:06:15 浏览: 111
基于51单片机温湿度检测仪设计
基于51单片机的温湿度检测设计是一种常见的毕业设计,下面是一个简单的设计方案:
一、设计思路
本设计主要利用DHT11进行湿度检测,18B20用于温度检测,通过LCD1602显示温湿度信息,利用电机进行灌溉,同时可以使用蓝牙或者2.4G远程控制进行手动灌溉。
二、硬件设计
1.主控芯片:STC89C52单片机
2.温湿度传感器:DHT11
3.温度传感器:18B20
4.液晶显示屏:LCD1602
5.电机:直流电机
6.蓝牙模块:HC-05
三、软件设计
1.温湿度检测:通过DHT11和18B20传感器获取温湿度数据,并将数据显示在LCD1602上。
2.自动调温和灌溉:当温度或湿度超过一定阈值时,自动开启电机进行灌溉。
3.手动灌溉:通过蓝牙或2.4G远程控制,手动开启电机进行灌溉。
四、代码实现
以下是主要代码实现:
```c
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DHT11=P3^7; //DHT11数据线
sbit motor=P1^0; //电机控制引脚
uchar code table[]="Temp: 00.0C Humi: 00.0%"; //LCD显示字符串
uchar humi,tem; //湿度和温度变量
void delay(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void start() //DHT11开始信号
{
DHT11=0;
delay(20);
DHT11=1;
delay(30);
}
void check() //DHT11响应信号
{
while(DHT11==1);
while(DHT11==0);
while(DHT11==1);
}
uchar read_data() //读取数据
{
uchar i=0,j,dat=0;
for(j=0;j<8;j++)
{
while(DHT11==0);
delay(30);
if(DHT11==1)
{
i=(~i);
if(j<4)
humi|=(1<<j);
else if(j<8)
tem|=(1<<(j-4));
}
while(DHT11==1);
}
return i;
}
void get_data() //获取温湿度数据
{
uchar i;
start();
check();
humi=0;tem=0;
for(i=0;i<5;i++)
read_data();
}
void display() //LCD显示温湿度数据
{
uchar i;
table[6]=tem/10+'0';
table[7]=tem%10+'0';
table[16]=humi/10+'0';
table[17]=humi%10+'0';
for(i=0;i<16;i++)
{
P0=table[i];
P2=0x00;
P2=0x04;
delay(5);
P2=0x00;
}
}
void motor_on() //电机开启
{
motor=1;
}
void motor_off() //电机关闭
{
motor=0;
}
void main()
{
while(1)
{
get_data();
display();
if(tem>30 || humi>60) //温度或湿度超过阈值,开启电机
motor_on();
else
motor_off();
}
}
```
五、完整工程
完整工程代码可以参考引用中的main.c文件。
阅读全文