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

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

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


基本任务:
要求“模拟智能灌溉系统”能够实现土壤 湿度测量、土壤湿度和时间显示、湿度阈值设
定及存储 等基本功能。通过电位器 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 湿度 = KV Rb2 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);
		else
			Relay(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();
	}
}
	






本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/3592.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

常见排序算法(C语言实现)

文章目录排序介绍插入排序直接插入排序希尔排序选择排序选择排序堆排序交换排序冒泡排序快速排序递归实现Hoare版本挖坑法前后指针版本非递归实现Hoare版本挖坑法前后指针版本快排的优化三值取中小区间优化归并排序递归实现非递归实现计数排序排序算法复杂度及稳定性分析不同算…

C语言——字符串函数(2)和内存函数

(一)strtok函数dilimiters参数是个字符串&#xff0c;定义了用作分隔符的字符集合第一个参数指定一个字符串&#xff0c;它包含了0个或者多个由dilimiters字符串中一个或者多个分隔符分割的标记。strtok函数找到str中的下一个标记&#xff0c;并将其用 \0 结尾&#xff0c;返回…

第二章Vue组件化编程

文章目录模块与组件、模块化与组件化模块组件模块化组件化Vue中的组件含义非单文件组件基本使用组件注意事项使用 kebab-case使用 PascalCase组件的嵌套模板templateVueComponent一个重要的内置功能单文件组件Vue脚手架使用Vue CLI脚手架先配置环境初始化脚手架分析脚手架结构实…

vue路由的使用

地址&#xff1a; 入门 | Vue Router 一、导入vuerouter依赖包 注意&#xff0c;一定要先引入vue&#xff0c;再引入vue-router&#xff08;引入vue在引入vue-router的上面&#xff09;。不然会报错 <head><meta charset"utf-8"><title></ti…

算法:贪婪算法、分而治之

算法&#xff1a;贪婪算法、分而治之 文章目录1.贪婪算法计数硬币实例12.分而治之分割/歇征服/解决合并/合并实例23.动态规划对照实例34.基本概念算法数据定义数据对象内置数据类型派生数据类型基本操作1.贪婪算法 设计算法以实现给定问题的最佳解决方案。在贪婪算法方法中&am…

中国蚁剑AntSword实战

中国蚁剑AntSword实战1.基本使用方法2.绕过安全狗连接3.请求包修改UA特征伪造RSA流量加密4.插件使用1.基本使用方法 打开蚂蚁宝剑&#xff0c;右键添加数据&#xff1a; 输入已经上传马的路径和连接密码&#xff1a; 测试连接&#xff0c;连接成功&#xff01; GetShell了&…

【Linux】权限详解

前言首先我们先来看一下权限的概念&#xff1a;在多用户计算机系统的管理中&#xff0c;权限&#xff08;privilege&#xff09;是指某个特定的用户具有特定的系统资源使用权力&#xff0c;像是文件夹&#xff0c;特定系统指令的使用或存储量的限制。通常&#xff0c;系统管理员…

动态内存管理详细讲解

目录 1.为什么存在动态内存分配 2. 动态内存函数的介绍 2.1 malloc和free 2.2 calloc 2.3 realloc 今天要和大家分享的内容是的动态内存管理&#xff0c;我们先从他的定义入手学习。 1.为什么存在动态内存分配 我们到现在已经掌握了内存开辟的方式就是要么创建一个变量…

【差分数组】

差分数组一维差分差分数组的作用差分矩阵结语一维差分 输入一个长度为 n 的整数序列。接下来输入 m个操作&#xff0c;每个操作包含三个整数 l,r,c&#xff0c;表示将序列中 [l,r] 之间的每个数加上 c &#xff0c;请你输出进行完所有操作后的序列。 输入格式 第一行包含两个…

ArduPilot飞控之ubuntu22.04-Gazebo模拟

ArduPilot飞控之ubuntu22.04-Gazebo模拟1. 源由2. Gazebo安装2.1 ubuntu22.04系统更新2.2 安装Gazebo Garden2.3 安装ArduPilot Gazebo插件2.3.1 基础库安装2.3.2 源代码编译2.3.3 配置插件2.4 测试Gazebo Garden3. ArduPilot SITL Gazebo模拟3.1 Gazebo Garden模拟环境3.2 Ar…

大数据周会-本周学习内容总结07

目录 01【hadoop】 1.1【编写集群分发脚本xsync】 1.2【集群部署规划】 1.3【Hadoop集群启停脚本】 02【HDFS】 2.1【HDFS的API操作】 03【MapReduce】 3.1【P077- WordCount案例】 3.2【P097-自定义分区案例】 历史总结 01【hadoop】 1.1【编写集群分发脚本xsync】…

【Spring从成神到升仙系列 四】从源码分析 Spring 事务的来龙去脉

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小黄&#xff0c;独角兽企业的Java开发工程师&#xff0c;CSDN博客专家&#xff0c;阿里云专家博主&#x1f4d5;系列专栏&#xff1a;Java设计模式、数据结构和算法、Kafka从入门到成神、Kafka从成神到升仙…

YOLOv7训练自己的数据集(手把手教你)

YOLOv7训练自己的数据集整个过程主要包括&#xff1a;环境安装----制作数据集----模型训练----模型测试----模型推理 一&#xff1a;环境安装 conda create -n yolov7 python3.8 conda activate yolov7 #cuda cudnn torch等版本就不细说了&#xff0c;根据自己的显卡配置自行…

水果新鲜程度检测系统(UI界面+YOLOv5+训练数据集)

摘要&#xff1a;水果新鲜程度检测软件用于检测水果新鲜程度&#xff0c;利用深度学习技术识别腐败或损坏的水果&#xff0c;以辅助挑拣出新鲜水果&#xff0c;支持实时在线检测。本文详细介绍水果新鲜程度检测系统&#xff0c;在介绍算法原理的同时&#xff0c;给出Python的实…

给准备面试网络工程师岗位的应届生一些建议

你听完这个故事&#xff0c;应该会有所收获。最近有一个23届毕业的大学生和我聊天&#xff0c;他现在网络工程专业大四&#xff0c;因为今年6、7月份的时候毕业&#xff0c;所以现在面临找工作的问题。不管是现在找一份实习工作&#xff0c;还是毕业后找一份正式工作&#xff0…

100天精通Python丨基础知识篇 —— 03、Python基础知识扫盲(第一个Python程序,13个小知识点)

文章目录&#x1f41c; 1、Python 初体验Pycharm 第一个程序交互式编程第一个程序&#x1f41e; 2、Python 引号&#x1f414; 3、Python 注释&#x1f985; 4、Python 保留字符&#x1f42f; 5、Python 行和缩进&#x1f428; 6、Python 空行&#x1f439; 7、Python 输出&…

Linux基础知识点总结

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a;小刘主页 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有收获&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的绽放&#xff0…

史上最详细的改良顺序表讲解,看完不会你打我

目录 0.什么是顺序表 1.顺序表里结构体的定义 2.顺序表的初始化 3.顺序表的输入 4.增加顺序表的长度 5.1顺序表的元素查找&#xff08;按位查找&#xff09; 5.2顺序表的元素查找&#xff08;按值查找&#xff09;在顺序表进行按值查找&#xff0c;大概只能通过遍历的方…

HFish蜜罐的介绍和简单测试(三)

在学习蜜罐时&#xff0c;HFish是个不错的选择。首先是免费使用&#xff0c;其次易于安装管理&#xff0c;然后文档支持比较丰富&#xff0c;最后还有更多扩展功能。第三篇的话作为本系列的最终篇章进行总结&#xff0c;具体是看到哪里写到哪里。 0、HFish平台管理 0.1、报告…

基于SpringBoot实现冬奥会运动会科普平台【源码+论文】

基于SpringBoot实现冬奥会科普平台演示开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#…