功能介绍:
0.本系统采用STC89C52作为单片机
1.系统实时监测当前温湿度/土壤湿度/环境光强并显示
2.温湿度超过设定阈值范围,蜂鸣器响,同时开启对应控制继电器
3.土壤湿度低于设定下限,开启喷洒,直至达到上限,关闭喷洒
4.环境光强超过设定上限,启动遮阳伞,环境光强低于设定下限,停用遮阳伞
5.按键可修改阈值范围
6.采用DC002作为电源接口可直接输入5V给整个系统供电

原理图:

PCB :

主程序:

#include "main.h"#define MAXCNT (64*64-1)
#define MINCNT (1)/*******************变量定义*********************/
enum _MODE_DF_ dispMode;
uchar setIndex = 0;
uint humidity; //湿度
uint temperature; //温度
uint light;    //光强
float SH_Value = 0;//土壤湿度uint hmMin= 50;//湿度下限
uint hmMax= 70;//湿度上限uint tempMin = 25;//温度下限
uint tempMax = 40;//温度上限uint lightMin = 30;//光照下限
uint lightMax = 60;//光照上限int SH_Value_Min = 30;//土壤湿度下限
int SH_Value_Max = 60;//土壤湿度上限uint motorCnt = 0;     //记录遮光棚位置
uchar motorFlag = 2;        //标记当前控制状态,=0遮阳棚已关闭,=1过程中,=2遮阳棚已打开
bit motorDir = 0;        //方向bit dispFlag = 0;bit buzzerFlag1 = 0; //蜂鸣器标志1
bit buzzerFlag2 = 0; //蜂鸣器标志2char dis[16];/********************************************************
函数名称:void mian()
函数作用:主函数
参数说明:
********************************************************/
void main()
{Timer0_Init(); //初始化定时器0LCD_Init();   //初始化液晶DelayMs(200); //延时有助于稳定LCD_DispStr(4, 0, "Welcome!");DelayS(1);LCD_Clear();  //清屏BYJ48 = ((BYJ48 & 0xF0) | REV[0]); //取数据ULN_DQ3 = BIT3; ULN_DQ2 = BIT2; ULN_DQ1 = BIT1; ULN_DQ0 = BIT0;while (1) //死循环{if (dispFlag == 1){dispFlag = 0;if (dispMode == NORMAL){DispNormal();}}if (humidity < hmMin) //湿度低于下限{buzzerFlag1 = 1;RELAY_JS = ON; //加湿开RELAY_CS = OFF; //除湿关}else if (humidity > hmMax)  //湿度高于上限{buzzerFlag1 = 1;RELAY_JS = OFF; //加湿关RELAY_CS = ON; //除湿开}else{buzzerFlag1 = 0;RELAY_JS = OFF; //加湿关RELAY_CS = OFF; //除湿关}if (temperature < tempMin) //温度低于下限{buzzerFlag2 = 1;RELAY_HEAT = ON; //升温开RELAY_COOL = OFF; //降温关}else if (temperature > tempMax)  //温度高于上限{buzzerFlag2 = 1;RELAY_HEAT = OFF; //升温关RELAY_COOL = ON; //降温开}else{buzzerFlag2 = 0;RELAY_HEAT = OFF; //升温关RELAY_COOL = OFF; //降温关}if (SH_Value < SH_Value_Min) //土壤湿度低于下限{RELAY_NY = ON; //喷洒}else if (SH_Value >= SH_Value_Max){RELAY_NY = OFF; //停止喷洒}if (motorFlag == 2) //遮阳伞已打开{if (light > lightMax) //光照太强{//关闭遮阳伞motorFlag = 1;motorDir = 1;motorCnt = 0;}}else if (motorFlag == 0) //遮阳伞已关闭{if (light < lightMin) //光照低于下限{//打开遮阳伞motorFlag = 1;motorDir = 0;motorCnt = MAXCNT;}}if (buzzerFlag1 || buzzerFlag2) //蜂鸣器报警{BUZZER = ON;}else{BUZZER = OFF;}KeyProcess();}
}/*------------------------------------------------定时器初始化子程序
------------------------------------------------*/
void Timer0_Init(void)
{TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响TH0 = (65536 - 9216) / 256; //重新赋值 10msTL0 = (65536 - 9216) % 256;EA = 1;  //总中断打开ET0 = 1; //定时器中断打开TR0 = 1; //定时器开关打开
}
/*------------------------------------------------定时器中断子程序
------------------------------------------------*/
void Timer0_Interrupt(void) interrupt 1
{static unsigned int time1ms  = 0;TL0 = 0x66;     //设置定时初始值TH0 = 0xFC;       //设置定时初始值 1mstime1ms++;if (time1ms > 500){dispFlag = 1; //显示标志time1ms = 0;}if (motorFlag == 1){if (motorDir == 1){motorCnt++;BYJ48 = ((BYJ48 & 0xF0) | REV[motorCnt % 8]); //取数据ULN_DQ3 = BIT3; ULN_DQ2 = BIT2; ULN_DQ1 = BIT1; ULN_DQ0 = BIT0;if (motorCnt >= MAXCNT){motorFlag = 0;}}else{motorCnt--;BYJ48 = ((BYJ48 & 0xF0) | REV[motorCnt % 8]); //取数据ULN_DQ3 = BIT3; ULN_DQ2 = BIT2; ULN_DQ1 = BIT1; ULN_DQ0 = BIT0;if (motorCnt <= 0){motorFlag = 2;}}}
}void DispNormal(void)
{ET0 = 0;DHT11_0_ReadData();ET0 = 1;temperature = U8T_data_H; //读取温度humidity = U8RH_data_H; //读取湿度sprintf(dis, "Hm:%2d%% T:%3d", humidity, temperature);LCD_DispStr(0, 0, dis);LCD_DispOneChar(12, 0, 0xdf);LCD_DispOneChar(13, 0, 'C');LCD_DispOneChar(14, 0, ' ');LCD_DispOneChar(15, 0, ' ');SH_Value = 99 * (255-ReadADC(AIN0_GND)) / 210; //读取土壤湿度if (SH_Value > 99){SH_Value = 99;}light = 100 - 100 * ReadADC(AIN1_GND) / 255; //读取光强sprintf(dis, "L:%2d%% SH:%2d", light, (int)SH_Value);LCD_DispStr(0, 1, dis);if (motorFlag == 2) //遮阳伞已打开{LCD_DispStr(11, 1, " St:O");}else if (motorFlag == 1){LCD_DispStr(11, 1, " St:D");}else if (motorFlag == 0) //遮阳伞已关闭{LCD_DispStr(11, 1, " St:C");}}/************************* 设置湿度阈值 *************************/
void DispSetHm(unsigned char setIndex)
{LCD_DispStr(0, 0, "  Set Humidity  ");sprintf(dis, "   H:%2d%% L:%2d%%  ", hmMax, hmMin);LCD_DispStr(0, 1, dis);switch (setIndex){case 1: LCD_SetCursor(6, 1, 1); break;case 2: LCD_SetCursor(12, 1, 1); break;default:;}
}/************************* 设置温度阈值 *************************/
void DispSetTemp(unsigned char setIndex)
{LCD_DispStr(0, 0, "Set Temperature ");sprintf(dis, "   H:%3d L:%3d  ", tempMax, tempMin);LCD_DispStr(0, 1, dis);switch (setIndex){case 1: LCD_SetCursor(7, 1, 1); break;case 2: LCD_SetCursor(13, 1, 1); break;default:;}
}/************************* 设置光照阈值 *************************/
void DispSetLight(unsigned char setIndex)
{LCD_DispStr(0, 0, " Set LightLimit ");sprintf(dis, "   H:%2d%% L:%2d%%  ", lightMax, lightMin);LCD_DispStr(0, 1, dis);switch (setIndex){case 1: LCD_SetCursor(6, 1, 1); break;case 2: LCD_SetCursor(12, 1, 1); break;default:;}
}/************************* 设置土壤湿度阈值 *************************/
void DispSetSH(unsigned char setIndex)
{LCD_DispStr(0, 0, "  Set SH Limit  ");sprintf(dis, "  H:%3d  L:%3d  ", SH_Value_Max, SH_Value_Min);LCD_DispStr(0, 1, dis);switch (setIndex){case 1: LCD_SetCursor(6, 1, 1); break;case 2: LCD_SetCursor(13, 1, 1); break;default:;}
}

仿真演示视频:
https://www.bilibili.com/video/BV1h3411V7Jn/

实物演示视频:
https://www.bilibili.com/video/BV1ee4y1n7ZD/

基于51单片机的大棚环境土壤湿度光强监测系统proteus仿真原理图PCB相关推荐

  1. 基于51单片机的八路多路温度测控系统proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时滚动显示8路温度传感器检测的温度值及设定温度值 2.当8路平均温度超过设定温度阈值范围,蜂鸣器报警,同时启动加热或降温装 ...

  2. 基于51单片机的数字电容容值测量仪proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.系统支持15pF~450uF电容测量 2.按键可更改测量量程 3.除了采用LCD1602可以实时显示测量参数,同时具有LED可以显示各个档位 ...

  3. 基于51单片机的万年历(带温湿度)带闹钟功能proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶显示当前时间和温湿度 2.按键可切换页面,显示农历,显示闹钟设置 3.当时间到达设定闹钟时间时,蜂鸣器报警 原理图: PCB ...

  4. 基于51单片机的三路超声测距仪设计wifi通信proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时循环显示3路超声波探测距离,同时WIFI串口上报 2.带有WiFi模块,可与手机实现数据交互,WiFi模块型号采用是常见 ...

  5. 基于51单片机的水温水流量检测/智能水龙头控制系统proteus仿真原理图PCB

    功能: 0.本系统采用STC89C52作为单片机 1.液晶实时显示当前的设定温度/实际温度/水龙头状态和水流量 2.按键可开关水龙头,当温度低于设定温度时,启动加热控制继电器,给水加热, 当加热到(设 ...

  6. 基于51单片机NRF24L01的远程水压监控及控制proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.系统分为主机和从机. 2.从机负责设定压力阈值.屏幕显示及蜂鸣器报警. 3.从机负责检测当前的水压值,并通过对比设定压力阈值,控制水泵继电器 ...

  7. 基于51单片机的汽车超声波防撞声光报警系统proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时距离阈值/测试距离 2.低于距离阈值将声光报警 3.按键可更改距离阈值 原理图: PCB: 主程序: #include ...

  8. 基于51单片机GPS定位公交车自动报站系统(程序+原理图+PCB+论文+全套资料)

    功能介绍: 1.电路设计合理. 2.熟练地使用STC89C52单片机.GPR模块,掌握其原理. 3.可设置播报声音的大小.上行或下行.显示时间等内容 4.采用LCD12864显示时间,位置等信息. 5 ...

  9. 0343基于STM32单片机的茶园大棚环境土壤湿度光强WiFi监测系统proteus仿真原理图PCB

    功能介绍: 0.本系统采用STM32F103RCT6作为单片机 1.采用的LCD1602液晶实时显示当前光强土壤湿度等参数信息 2.当土壤湿度超过设定的阈值,蜂鸣器报警,同时控制水泵工作状态 3.按键 ...

最新文章

  1. [国家集训队]happiness 最小割 BZOJ 2127
  2. BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题学习笔记】
  3. KeyMob:建立一个稳定的移动广告聚合平台!
  4. 【数据迁移】使用传输表空间迁移数据
  5. TADOStoredProc返回多个数据集
  6. ASP实现数据库事务处理的方法
  7. (转)threadPoolExecutor 中的 shutdown() 、 shutdownNow() 、 awaitTermination() 的用法和区别
  8. 阿里修冶:微服务拆分之道
  9. 【SpringCloud】Spring cloud Alibaba Sentinel 热点规则
  10. 微机原理8086汇编语言上机——Masm环境搭建与常用汇编调试指令
  11. 机器学习入门——多项式回归
  12. K8S集群模式下fluent-bit日志收集方案设计和实践
  13. 通过 jstack 与 jmap 分析一次线上故障
  14. 年薪百万的市场人都在读哪些书?
  15. 编码通信与魔术初步(六)——经典魔术《傅氏幻术》赏析和《我的心灵感应》...
  16. java中token什么意思_java中Token验证用法 什么是Token
  17. 小学计算机上课课前导入视频教程,小学信息技术教学中微视频的导入实践分析...
  18. 微信小程序获取用户信息(昵称、头像、openid等)
  19. py和ipynb文件互相转化
  20. dnf用计算机算比例,DNF比例计算查询

热门文章

  1. c语言画伯努利分布图像,C++ - 随机生成器 伯努利分布(bernoulli distribution) 的 详解 及 代码...
  2. 情感日记:东部华侨城
  3. 修改Android“长按”的反应时间
  4. https证书可以保护二级域名吗
  5. 高等教师资格证考试复习笔记-高等教育学-(6)-高等学校的教师和学生
  6. Property description must be an object
  7. 构建自己的AlphaGo
  8. 100句正能量的句子经典语句
  9. 开源倾情奉献:基于.NET打造IP智能网络视频监控系统(四)服务端介绍
  10. win10安装wsl 2.0子系统 安装在非C盘