蓝桥杯真题——模拟灌溉系统
尽量每天都自己写一遍模板,记住模板就好写了
以下内容直接在模板内进行
基本任务:要求“模拟智能灌溉系统”能够实现土壤湿度测量、土壤湿度和时间显示、湿度阈值设定及存储等基本功能。通过电位器 Rb2 输出电压信号,模拟湿度传感器输出信号,再通过AD 采集完成湿度测量功能;通过 DS1302 芯片提供时间信息;通过按键完成灌溉系统控制和湿度阈值调整功能,通过 LED 完成系统工作状态指示功能。系统硬件电路主要由单片机控制电路、显示单元、ADC 采集单元、RTC 单元、EEPROM 存储单元、继电器控制电路及报警输出电路组成.

系统功能:
1.1 自动工作状态,根据湿度数据自动控制打开或关闭灌溉设备( 初始状态),以 L1 点亮指示;1.2 手动工作状态,通过按键控制打开或关闭灌溉设备,以 L2 点亮指示;1.3 系统上电后处于自动工作状态,系统初始湿度阈值为 50%,此时若湿度低于50%,灌溉设备自动打开,达到 50%后,灌溉设备自动关闭;1.4 灌溉设备打开或关闭通过继电器工作状态模拟。
我们现在就要一步步进行下去:
1.我们先来实现DS1302
“模拟智能灌溉系统”通过读取 DS1302 时钟芯片相关寄存器获得时间,DS1302芯片时、分、秒寄存器在程序中设定为系统进行初始化设定,时间为 08 时 30 分。开始为 ucRtc(0x80,0x30,0x00)
我们通过读取函数来读取这个时间值 Read_Rtc[ucRtc];然后在主函数设置Set_Rtc(ucRtc);
2. 湿度显示:
以电位器 Rb2 输出电压信号模拟湿度传感器输出信号,且假定电压信号与湿度成正比例关系 H 湿度 = KVRb2(K 为常数),Rb2 电压输出为 5V 时对应湿度为 99%
湿度我们是能够控制的,他就包括了阈值 控制值,以及一个显示值。
Humidity = Ad_Read(0x03) / 2.56;我们让AD读取R3的值给到湿度,之后也可以调试
3.按键功能:
S7为模式切换功能,初始为自动模式,按下后为手动。
自动工作状态下按键 S6、S5、S4 功能设定如下:S6 功能设定为湿度阈值调整按键,按下 S6 后,进入湿度阈值调整界面(如图 3所示),此时按下 S5 为湿度阈值加 1,按下 S4 湿度阈值减 1,再次按下 S6 后,系统将新的湿度阈值保存到 EEPROM 中,并退出湿度阈值设定界面。
这也就是我们再 Mode 0 状态下,通过按键完成的功能加上条件就可以。
4.Led显示模式:
这个比较简单后续再继续补充纤细内容
/* 和参考的区别最大的在于内容写入的内容不同 *//* Í·ÎļþÉùÃ÷Çø */
#include <STC15F2K60S2.H>
#include "LED.h"
#include "key.h"
#include "Seg.h"
#include "HC573.h"
#include "init.h"
#include "ds1302.h"
#include "iic.h"
#include "onewire.h"/* ±äÁ¿ÉùÃ÷Çø */
unsigned char Key_Down,Key_Val,Key_Old,Key_Up;
unsigned char Key_Slow_Down;unsigned char Seg_Buf[8]={10,10,10,10,10,10,10,10};
unsigned char Seg_Point[8]={0,0,0,0,0,0,0,0};
unsigned char Seg_Pos;
unsigned int Seg_Slow_Down;unsigned char ucRtc[3]={0x08,0x30,0x00};
unsigned char ucLed[8]={0,0,0,0,0,0,0,0};unsigned char Seg_Mode = 0;
unsigned char Seg_Mode_set = 0;bit Work_Mode = 0;
bit Beep_Flag = 0;unsigned char Humidity;
unsigned char Hum_Disp = 50;
unsigned char Hum_Ctrol = 50;/* °´¼ü´¦ÀíÇø */
void Key_Proc()
{if(Key_Slow_Down) return;Key_Slow_Down =1;Key_Val = Key_Read();Key_Down = Key_Val & (Key_Old ^ Key_Val);Key_Up = ~Key_Val & (Key_Old ^ Key_Val);Key_Old = Key_Val;switch(Key_Down){case 7:Work_Mode ^= 1; // Çл»Ä£Ê½break;case 6:if(Work_Mode == 0 && Seg_Mode ==0) //×Ô¶¯Ä£Ê½£¬½øÈëãÐֵ״̬{Seg_Mode = 2;}if(Work_Mode == 0 && Seg_Mode ==2 && Seg_Mode_set==1) //Ìø³öÅжÏÌõ¼þ£¬Ð´Èë¿ØÖÆ²ÎÊý{Hum_Ctrol = Hum_Disp;EEPROM_Write(&Hum_Disp,0,1); //±£´æãÐÖµ²ÎÊýSeg_Mode_set=0;Seg_Mode = 0;}break;if(Work_Mode == 1) //ÊÖ¶¯Ä£Ê½{Beep_Flag ^= 1;}break;case 5:if(Seg_Mode == 2 && Work_Mode ==0){Seg_Mode_set = 1;if(++Hum_Disp == 100){EEPROM_Write(&Hum_Disp,0,1); Hum_Ctrol = Hum_Disp; Hum_Disp = 99;}}if(Work_Mode == 1){Relay(1);}break;case 4:if(Seg_Mode == 2 && Work_Mode ==0){Seg_Mode_set = 1;if(--Hum_Disp == 255){EEPROM_Write(&Hum_Disp,0,1);Hum_Ctrol = Hum_Disp; Hum_Disp = 0;}}if(Work_Mode == 1){Relay(0);}break;}}/* Êý¾Ý´¦ÀíÇø */
void Seg_Proc()
{if(Seg_Slow_Down) return;Seg_Slow_Down =1;/* Êý¾Ý¶ÁÈ¡ÇøÓò */Read_Rtc(ucRtc);Humidity = Ad_Read(0x03) / 2.56;/* Êý¾ÝÏÔÊ¾ÇøÓò */switch(Seg_Mode){case 0: //ÉϵçÏÔʾʵʱ״̬/* ×Ô¶¯Ä£Ê½ */Seg_Buf[0] = ucRtc[0] / 16;Seg_Buf[1] = ucRtc[0] % 16;Seg_Buf[3] = ucRtc[1] / 16;Seg_Buf[4] = ucRtc[1] % 16;Seg_Buf[2] = 11;// ζÈÏÔʾSeg_Buf[6] = Humidity / 10;Seg_Buf[7] = Humidity % 10;break;case 1:Seg_Buf[0] = ucRtc[0] / 16;Seg_Buf[1] = ucRtc[0] % 16;Seg_Buf[3] = ucRtc[1] / 16;Seg_Buf[4] = ucRtc[1] % 16;Seg_Buf[2] = 11;// ζÈÏÔʾSeg_Buf[6] = Humidity / 10;Seg_Buf[7] = Humidity % 10;break;case 2: //ÏÔʾãÐÖµSeg_Mode_set=1;Seg_Buf[0] = Seg_Buf[1] = 11;Seg_Buf[2] = Seg_Buf[3] = Seg_Buf[4] = 10;Seg_Buf[6] = Hum_Disp / 10;Seg_Buf[7] = Hum_Disp % 10;break;}
}void Led_Proc()
{if(Work_Mode ==0){ucLed[0] = 1;ucLed[1]=0;if(Humidity >=50)Relay(0);elseRelay(1);}if(Work_Mode ==1){ucLed[0] = 0;ucLed[1]=1;Beep(Beep_Flag);}}void Timer0Init(void) //@12.000MHz
{AUXR &= 0x7F; TMOD &= 0xF0; TL0 = 0x18; TH0 = 0xFC; TF0 = 0; TR0 = 1; ET0 = 1; EA = 1;
}void Timer0Server() interrupt 1
{ if(++Key_Slow_Down == 10) Key_Slow_Down = 0;if(++Seg_Slow_Down == 500) Seg_Slow_Down = 0;if(++Seg_Pos == 8) Seg_Pos = 0;Seg_Disp(Seg_Pos,Seg_Buf[Seg_Pos],Seg_Point[Seg_Pos]);Led_Disp(Seg_Pos,ucLed[Seg_Pos]);
}void main()
{Humidity = Ad_Read(0x03) / 2.56; //Ö÷º¯ÊýÔÙ¶ÁÒ»´ÎHum_Disp = Hum_Ctrol; //±ãÓÚ¸ÄÕýEEPROM_Read(&Hum_Disp,0,1);//¶ÁÈ¡ãÐÖµ²ÎÊýSystem_init();Timer0Init();Set_Rtc(ucRtc);while(1){Key_Proc();Led_Proc();Seg_Proc();}
}
相关文章:
蓝桥杯真题——模拟灌溉系统
尽量每天都自己写一遍模板,记住模板就好写了 以下内容直接在模板内进行 基本任务:要求“模拟智能灌溉系统”能够实现土壤湿度测量、土壤湿度和时间显示、湿度阈值设 定及存储等基本功能。通过电位器 Rb2 输出电压信号,模拟湿度传感器输出信号…...
【数据结构】双向链表实现
Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员,2024届电子信息研究生 目录 一、什么是双向链表 二、双向链表的实现 一、什么是双向链表 双向链表也叫双链表,是链表的一种,它的每个数据节点中都有两个指针,分别指向直接后…...
无公网IP,SSH远程连接Linux CentOS服务器【内网穿透】
文章目录1. Linux CentOS安装cpolar2. 创建TCP隧道3. 随机地址公网远程连接4. 固定TCP地址5. 使用固定公网TCP地址SSH远程本次教程我们来实现如何在外公网环境下,SSH远程连接家里/公司的Linux CentOS服务器,无需公网IP,也不需要设置路由器。 …...
CentOS 7+Docker搭建rabbitMQ无法访问15672端口
CentOS 7Docker搭建rabbitMQ无法访问15672端口 1.我拉取的镜像自带管理UI界面 所以不可能是没有开启管理UI界面的原因 2.防火墙关闭状态 所以也不是防火墙的问题 3.在虚拟机本机localhost:15672也访问不了 4.端口监听是正常的 5.最后发现我容器内curl能够通,容…...
面试官:如何保证接口幂等性?一口气说了9种方法!
本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~ Github地址 大家好,我是大彬~ 今…...
蓝桥杯刷题冲刺 | 倒计时14天
作者:指针不指南吗 专栏:蓝桥杯倒计时冲刺 🐾马上就要蓝桥杯了,最后的这几天尤为重要,不可懈怠哦🐾 文章目录1.最长递增2.走迷宫3.解立方根4.回文特判5.修改数组1.最长递增 题目 链接: 最长递增…...
【数据结构】树的概念
Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法......感兴趣就关注我吧!你定不会失望。 🌈个人主页:主页链接 🌈算法专栏:专栏链接 我会一直往里填充内容哒! &…...
Qt Glog toStdWString转char* 中文乱码
#include <QTextCodec>void LogWriter::init(void) {InitGoogleLogging("ui-fundus");char log_path[256] {0};FLAGS_stderrthreshold GLOG_INFO; // INFO WARNING ERROR FATAL, 是输出到stderr(app Output/cli)的阀值FLAGS_alsologtostderr false; // 当这…...
基于线性Kalman观测器(LKF)的2、4、7自由度悬架主动控制合集
目录 前言 1. 1/4车悬架仿真分析 2. 1/2车悬架仿真分析 3. 整车车悬架仿真分析 3.1 KF观测状态 3.2性能指标 4 .KF调参总结 5.文章总结 前言 对于kalman的原理介绍在上篇文章中已经做了详尽剖析,本篇进行实战,将其应用于悬架系统,其实…...
第二章 作业(6789B)【编译原理】
第二章 作业【编译原理】前言推荐第二章 作业678911最后前言 以下内容源自《编译原理》 仅供学习交流使用 推荐 无 第二章 作业 6 6.令文法G6为 N→D|ND D→0|1|2|3|4|5|6|7|8|9 (1)G6的语言L(G6)是什么? (2)给出句子0127、34和568的最左推导和最右推导。 (…...
【java】连续最大和、统计回文
目录 1.连续最大和 2.统计回文 1.连续最大和 链接:连续最大和_牛客题霸_牛客网 (nowcoder.com) 描述:一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3 输…...
AI真的快让我们失业了,从ChatGPT到Midjourney
参考文章: https://mp.weixin.qq.com/s/3RdHPPhYgDfB6KY6Y9Sk2A跟AI有关的新闻,一个接着一个。前一天你还和往常一样进入梦乡,第二天醒来就能被新的AI新闻“炸弹”震得心惊。 以ChatGPT为代表的AI语言模型,以Midjourney为代表的…...
JVM学习 GC垃圾回收机制 (堆内存结构、GC分类、四大垃圾回收算法)
🤖 作者简介:努力的clz ,一个努力编程的菜鸟 🐣🐤🐥 👀 文章专栏:《JVM 学习笔记》 ,本专栏会专门记录博主在学习 JVM 中学习的知识点,以及遇到的问题。 …...
ChatGPT 有哪些神奇的使用方式?
ChatGPT在语言处理领域有着非常广泛的应用,可以用来进行语音识别、文本摘要、问答系统、机器翻译、智能客服、情感分析、智能写作等方面的应用。随着技术的不断发展和进步,ChatGPT在未来的应用场景和领域也将会有更加广泛的拓展和应用。ChatGPT可以应用于…...
【JavaEE】Java设计模式-单例模式(饿汉式与懒汉式)
目录 1.设计模式是啥? 2.单例模式 2.1什么是单例模式 2.2饿汉模式 2.3懒汉模式 3.懒汉模式与饿汉模式的区别 3.1.线程安全方面 3.2.资源加载和性能 4.如何保证懒汉模式的线程安全 1.设计模式是啥? 设计模式是前人经过总结,通过…...
(算法基础)朴素版Prim算法
适用情景在最小生成树问题当中,涉及到权重和最小值。并且这个图是稠密图(n^2 ~ m)的情形下时间复杂度O(N^2)算法解释先得知道一下什么是无向图的生成树,树总该知道的吧,生成树就是包含这个无向图中的n个点,并且有n-1条边ÿ…...
第十四届蓝桥杯三月真题刷题训练——第 23 天
目录 第 1 题:长草 题目描述 输入描述 输出描述 输入输出样例 运行限制 代码: 思路: 第 2 题:蓝肽子序列_LCS_最长公共子序列dp问题 题目描述 输入描述 输出描述 输入输出样例 运行限制 代码: 思路&am…...
基于springboot实现医院信息管理系统【源码+论文】
基于springboot实现医院信管系统演示开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包…...
CODESYS增量式PID功能块(ST完整源代码)
增量式PID的详细算法公式和博途源代码,请参看下面的文章链接: 博途1200/1500PLC增量式PID算法(详细SCL代码)_博图scl语言pid增量编码器_RXXW_Dor的博客-CSDN博客SMART200PLC增量式PID可以参看下面这篇博文,文章里有完整的增量式PID算法公式,这里不在赘述西门子SMARTPLC增量…...
代码质量提升,代码扫描 review 之 Codacy 工具使用
目录一、什么是Codacy二、GitHub 上使用 Codacy三、Codacy上导入GitHub项目一、什么是Codacy Codacy 是用于代码 review 检测(即代码审查)的工具,目前支持对40多种编程语言检测,如 c、c、c#、java 、python、javascript 等。 Codacy 可用于 GitHub 和 …...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
