10121-基于单片机的农业蔬菜大棚温湿度智能监测系统设计(详细设计说明书+源码+protues+原理图)
10121-基于单片机的农业蔬菜大棚温湿度智能监测系统设计(详细设计说明书+源码+protues+原理图)
功能需求:
本次设计需要具体要求以下几点:
○1大棚内的温度和湿度数据用传感器进行实时监测,将数据采集并传输到处理器进行分析。
○2设定温湿度的上下限,当数据超过设定限制时,蜂鸣器会发出警报以提醒管理者及时采取措施。
○3使用LCD显示屏来反馈当前检测的温湿度信息,方便使用者了解大棚内的环境状况,并作出相应的调整。
○4通过对不同植物适宜生长环境的调整,可以提高生产效率和质量,同时降低农业生产成本,为使用者提供更好的管理服务。这种智能化系统设计可使得大棚管理更加便捷、高效,也有助于推动现代农业的发展。
资料摘要:
该系统可以通过传感器采集蔬菜大棚内部的温度、湿度等环境参数,并将这些数据发送到单片机进行处理。通过程序设计,单片机可以根据预设的控制策略自动调节降温、通风等操作,从而实现对蔬菜大棚内部环境的精密控制与管理。此外,该系统还可以配备显示屏、报警器等功能模块,方便用户随时了解蔬菜大棚内部状况并做出相应调整。
使用该系统可以提高蔬菜存活率和生产效率,降低管理成本和风险。同时,也为蔬菜大棚的环境保护和资源节约做出了贡献。因此,智能化监测系统是现代农业生产中不可或缺的重要工具,对于推动农业产业升级、提高农业经济效益有着积极的意义。
资料包含:
1、源码
2、详细设计说明书-20245字
3、搭建过程录屏
4、任务书
5、流程图
6、开题报告
#include "reg51.h"
#include "ADC0832.h"
#include "lcd1602.h"
#include "DHT11.h"
sbit k1=P2^5;//按钮
sbit k2=P2^6;
sbit k3=P2^7;
sbit beep=P1^4;//蜂鸣器
sbit jiangwen = P1^0;
sbit shengwen = P1^1;
sbit jiashi = P1^2;
sbit chushi = P1^3;
//========================================
uchar air=0;//空气质量 0-100
uchar alc=0;//酒精检测 0-100
uchar time=0;//系统定时
uchar mode=0;//系统模式,测量、设置
uchar disp1[]=" Control System";
uchar disp2[]="T:00 C S:00%";
uchar disp3[]=" UP T:00 S:00";
uchar disp4[]="DOWN 00 00";
uchar temp1=20,temp2=40,humi1=30,humi2=60;
uchar shidu=0;
//========================================
void disp()//显示阀值
{
write_string(1,0," ");
write_string(2,0," ");
disp3[7]=temp2/10+0x30;
disp3[8]=temp2%10+0x30;
disp3[12]=humi2/10+0x30;
disp3[13]=humi2%10+0x30;
disp4[7]=temp1/10+0x30;
disp4[8]=temp1%10+0x30;
disp4[12]=humi1/10+0x30;
disp4[13]=humi1%10+0x30;
write_string(1,0,disp3);
write_string(2,0,disp4);
//设置光标
switch(mode)
{
case 1:write_sfm(1,8);break;
case 2:write_sfm(1,13);break;
case 3:write_sfm(2,8);break;
case 4:write_sfm(2,13);
}
}
//主函数
void main()
{
init_1602();//初始化
disp2[4]=0xdf;
SCON=0X50; //设置为工作方式1
TMOD=0X21; //设置计数器工作方式2
TH1=0XFD;
TL1=0XFD;
ES=1; //打开接收中断
TR1=1; //打开计数器
TH0=0X3C;
TL0=0XB0;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
while(1)
{
if(!k1)//设置,确认
{
delay_uint(5000);//延时防抖
if(!k1)
{
if(mode<4)
mode++;
else
mode=0;
if(mode>0)
disp();
write_com(0x0e);
//设置光标
switch(mode)
{
case 1:write_sfm(1,8);break;
case 2:write_sfm(1,13);break;
case 3:write_sfm(2,8);break;
case 4:write_sfm(2,13);
}
while(!k1);
}
}
if(mode>0)//设置
{
if(!k2)//加
{
delay_uint(5000);//延时防抖
if(!k2)
{
switch(mode)
{
case 1://温度上限
if(temp2<99)
temp2++;
disp();
break;
case 2://湿度上限
if(humi2<99)
humi2++;
disp();
break;
case 3://温度下限
if(temp1<temp2)
temp1++;
disp();
break;
case 4://湿度下限
if(humi1<humi2)
humi1++;
disp();
}
while(!k2);
}
}
if(!k3)//减
{
delay_uint(5000);//延时防抖
if(!k3)
{
switch(mode)
{
case 1://温度上限
if(temp2>temp1)
temp2--;
disp();
break;
case 2://湿度上限
if(humi2>humi1)
humi2--;
disp();
break;
case 3://温度下限
if(temp1>0)
temp1--;
disp();
break;
case 4://湿度下限
if(humi1>0)
humi1--;
disp();
}
while(!k3);
}
}
}
}
}
//定时器0中断
void Timer0() interrupt 1
{
uint i=0,a=0;
if(time<10)//0.5s
time++;
else
{
time=0;
disp3[7]=temp2/10+0x30;
disp3[8]=temp2%10+0x30;
disp3[12]=humi2/10+0x30;
disp3[13]=humi2%10+0x30;
disp4[7]=temp1/10+0x30;
disp4[8]=temp1%10+0x30;
disp4[12]=humi1/10+0x30;
disp4[13]=humi1%10+0x30;
dht11_recive();//测量温湿度
shidu=dht11_dat[0];
disp2[2]=dht11_dat[2]/10+0x30;
disp2[3]=dht11_dat[2]%10+0x30;
disp2[9]=shidu/10+0x30;
disp2[10]=shidu%10+0x30;
if(mode==0)//显示
{
write_string(1,0," ");
write_string(2,0," ");
write_string(1,0,disp1);
write_string(2,0,disp2);
//报警
if((dht11_dat[2]>temp2)||(dht11_dat[2]<temp1)||(shidu>humi2)||(shidu<humi1) )
beep=0;
else
{
beep=1;
write_com(0x0c);
}
if((dht11_dat[2]>temp2)||(dht11_dat[2]<temp1))
{
write_com(0x0e);
write_sfm(2,3);
}
if((dht11_dat[2]>temp2))
{
jiangwen = 0;
}else jiangwen = 1;
if((dht11_dat[2]<temp1))
{
shengwen = 0;
}else shengwen = 1;
if((shidu>humi2))
{
chushi = 0;
}else chushi = 1;
if((shidu<humi1))
{
jiashi = 0;
}else jiashi = 1;
if((shidu>humi2)||(shidu<humi1))
{
write_com(0x0e);
write_sfm(2,10);
}
}
}
TH0=0X3C;
TL0=0XB0;
}
作者:cqtianxingkeji