当前位置: 首页 > news >正文

蓝桥杯真题——模拟灌溉系统

                                 尽量每天都自己写一遍模板,记住模板就好写了 

                                                   以下内容直接在模板内进行


基本任务:
要求“模拟智能灌溉系统”能够实现土壤湿度测量、土壤湿度和时间显示、湿度阈值设
定及存储等基本功能。通过电位器 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 湿度 = KVRb2K 为常数),Rb2 电压输出为 5V 时对应湿度为 99%

湿度我们是能够控制的,他就包括了阈值 控制值,以及一个显示值。

Humidity = Ad_Read(0x03) / 2.56;我们让AD读取R3的值给到湿度,之后也可以调试

3.按键功能:

S7为模式切换功能,初始为自动模式,按下后为手动。

自动工作状态下按键 S6S5S4 功能设定如下:
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();}
}

相关文章:

蓝桥杯真题——模拟灌溉系统

尽量每天都自己写一遍模板&#xff0c;记住模板就好写了 以下内容直接在模板内进行 基本任务&#xff1a;要求“模拟智能灌溉系统”能够实现土壤湿度测量、土壤湿度和时间显示、湿度阈值设 定及存储等基本功能。通过电位器 Rb2 输出电压信号&#xff0c;模拟湿度传感器输出信号…...

【数据结构】双向链表实现

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 一、什么是双向链表 二、双向链表的实现 一、什么是双向链表 双向链表也叫双链表&#xff0c;是链表的一种&#xff0c;它的每个数据节点中都有两个指针&#xff0c;分别指向直接后…...

无公网IP,SSH远程连接Linux CentOS服务器【内网穿透】

文章目录1. Linux CentOS安装cpolar2. 创建TCP隧道3. 随机地址公网远程连接4. 固定TCP地址5. 使用固定公网TCP地址SSH远程本次教程我们来实现如何在外公网环境下&#xff0c;SSH远程连接家里/公司的Linux CentOS服务器&#xff0c;无需公网IP&#xff0c;也不需要设置路由器。 …...

CentOS 7+Docker搭建rabbitMQ无法访问15672端口

CentOS 7Docker搭建rabbitMQ无法访问15672端口 1.我拉取的镜像自带管理UI界面 所以不可能是没有开启管理UI界面的原因 2.防火墙关闭状态 所以也不是防火墙的问题 3.在虚拟机本机localhost:15672也访问不了 4.端口监听是正常的 5.最后发现我容器内curl能够通&#xff0c;容…...

面试官:如何保证接口幂等性?一口气说了9种方法!

本文已经收录到Github仓库&#xff0c;该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点&#xff0c;欢迎star~ Github地址 大家好&#xff0c;我是大彬~ 今…...

蓝桥杯刷题冲刺 | 倒计时14天

作者&#xff1a;指针不指南吗 专栏&#xff1a;蓝桥杯倒计时冲刺 &#x1f43e;马上就要蓝桥杯了&#xff0c;最后的这几天尤为重要&#xff0c;不可懈怠哦&#x1f43e; 文章目录1.最长递增2.走迷宫3.解立方根4.回文特判5.修改数组1.最长递增 题目 链接&#xff1a; 最长递增…...

【数据结构】树的概念

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法......感兴趣就关注我吧&#xff01;你定不会失望。 &#x1f308;个人主页&#xff1a;主页链接 &#x1f308;算法专栏&#xff1a;专栏链接 我会一直往里填充内容哒&#xff01; &…...

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的原理介绍在上篇文章中已经做了详尽剖析&#xff0c;本篇进行实战&#xff0c;将其应用于悬架系统&#xff0c;其实…...

第二章 作业(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的最左推导和最右推导。 &#xff08;…...

【java】连续最大和、统计回文

目录 1.连续最大和 2.统计回文 1.连续最大和 链接&#xff1a;连续最大和_牛客题霸_牛客网 (nowcoder.com) 描述&#xff1a;一个数组有 N 个元素&#xff0c;求连续子数组的最大和。 例如&#xff1a;[-1,2,1]&#xff0c;和最大的连续子数组为[2,1]&#xff0c;其和为 3 输…...

AI真的快让我们失业了,从ChatGPT到Midjourney

参考文章&#xff1a; https://mp.weixin.qq.com/s/3RdHPPhYgDfB6KY6Y9Sk2A跟AI有关的新闻&#xff0c;一个接着一个。前一天你还和往常一样进入梦乡&#xff0c;第二天醒来就能被新的AI新闻“炸弹”震得心惊。 以ChatGPT为代表的AI语言模型&#xff0c;以Midjourney为代表的…...

JVM学习 GC垃圾回收机制 (堆内存结构、GC分类、四大垃圾回收算法)

&#x1f916; 作者简介&#xff1a;努力的clz &#xff0c;一个努力编程的菜鸟 &#x1f423;&#x1f424;&#x1f425; &#x1f440; 文章专栏&#xff1a;《JVM 学习笔记》 &#xff0c;本专栏会专门记录博主在学习 JVM 中学习的知识点&#xff0c;以及遇到的问题。 …...

ChatGPT 有哪些神奇的使用方式?

ChatGPT在语言处理领域有着非常广泛的应用&#xff0c;可以用来进行语音识别、文本摘要、问答系统、机器翻译、智能客服、情感分析、智能写作等方面的应用。随着技术的不断发展和进步&#xff0c;ChatGPT在未来的应用场景和领域也将会有更加广泛的拓展和应用。ChatGPT可以应用于…...

【JavaEE】Java设计模式-单例模式(饿汉式与懒汉式)

目录 1.设计模式是啥&#xff1f; 2.单例模式 2.1什么是单例模式 2.2饿汉模式 2.3懒汉模式 3.懒汉模式与饿汉模式的区别 3.1.线程安全方面 3.2.资源加载和性能 4.如何保证懒汉模式的线程安全 1.设计模式是啥&#xff1f; 设计模式是前人经过总结&#xff0c;通过…...

(算法基础)朴素版Prim算法

适用情景在最小生成树问题当中&#xff0c;涉及到权重和最小值。并且这个图是稠密图(n^2 ~ m)的情形下时间复杂度O(N^2)算法解释先得知道一下什么是无向图的生成树&#xff0c;树总该知道的吧&#xff0c;生成树就是包含这个无向图中的n个点&#xff0c;并且有n-1条边&#xff…...

第十四届蓝桥杯三月真题刷题训练——第 23 天

目录 第 1 题&#xff1a;长草 题目描述 输入描述 输出描述 输入输出样例 运行限制 代码&#xff1a; 思路&#xff1a; 第 2 题&#xff1a;蓝肽子序列_LCS_最长公共子序列dp问题 题目描述 输入描述 输出描述 输入输出样例 运行限制 代码&#xff1a; 思路&am…...

基于springboot实现医院信息管理系统【源码+论文】

基于springboot实现医院信管系统演示开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xf…...

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 检测(即代码审查)的工具&#xff0c;目前支持对40多种编程语言检测&#xff0c;如 c、c、c#、java 、python、javascript 等。 Codacy 可用于 GitHub 和 …...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...