【蓝桥杯单片机】十四届省赛“重难点”解析(附源码)

【蓝桥杯单片机】十四届省赛“重难点”解析

  • 一、题目难点解析
  • 二、易出错点提示
  • 三、完整代码链接


笔记包括:①题目难点解析、②易出错点提示、③完整代码链接
本文提供的所有代码都是使用第十四届竞赛包完成

⭐----------系列文章链接----------⭐
【蓝桥杯单片机】十四届省赛“重难点”解析(附源码)
【蓝桥杯单片机】十三届省赛“重难点”解析(附源码)


一、题目难点解析

  1. 亮切换到暗状态
    解释:AD转换输出的值小于阈值后,认为是触发了一次;
    阈值需要在0~255之间选择,因ad输出模拟的5v即数字的255,1v映射为数码管显示的51
    方法:经过测试,阈值为51时可以很好地辨别亮与暗
    据官方的解释,会以0为暗状态进行考评,所以阈值的设定能实现亮暗转换即可
  1. 立刻切换
    方法:亮变暗状态后(即处于暗状态),数码管显示的界面(stat_smg)需要赋新值(100)
  1. 3s内不能重复触发
    解释:由亮变为暗状态后(即处于暗状态),切换到的界面(stat_smg = 100)需要持续显示3s;
    方法:设置一个触发标志(enable_flag)与计时变量(time_3s)
    亮变暗即触发一次,enable_flag = 1,且作为条件,一旦满足就使定时器中time_3s++;
    且enable_flag == 1要作为单独的一个判断语句,因为在循环数码管时,并不是一直满足触发条件(ad小于阈值且enable_flag为0)的,所以不能一直进入到这个触发条件中去判断enable_flag的值从而判断是否到了3s,故要单独判断enable_flag的值,并做相应处理
  1. 返回原状态
    解释:3s过后,数码管从温湿度界面(stat_smg = 100)切换到之前亮时的界面状态
    方法:设置存储原先界面值的变量(save_smg主界面、save_mode子界面);
    在变暗时赋值一次(save_smg = stat_smg; save_mode = stat_mode)
    3s过后再次赋值(stat_smg = save_smg; stat_mode = save_mode)

在这里插入图片描述

上述逻辑部分参考代码如下

//由亮变暗标志
bit enable_flag;	//只有0或1两种状态
unsigned int time_3s;

//定时器中操作
if(enable == 1)
{
  time_3s++;
}

//数码管中操作
ad_out = AD_OUT();	//获取AD输出值

if((ad_out<51)&& (enable_flag == 0))//enable是为了重复触发而设置的一个由亮变暗的标志
//除首次触发(enable_flag初始化为0),后需要满足暗条件且3s时间到了(enable == 0)才能重新进入if语句中(即触发)
{
  enable_flag = 1//由亮变暗标志,处于暗状态下
 
  trig++//触发次数  
 
  smg_save = stat_smg;	//保存主界面数值
  mode_save = stat_mode;//保存子界面数值
  
  stat_smg == 100;		//界面转换到温湿度采集界面
}
if(enable_flag == 1)	//由亮变暗标志,处于暗状态下
{
 if(time_3s >= 3000)	//3s内 enable仍旧为1 不能进入由亮转暗的操作 即不能重复触发
    {
      enable_flag = 0;		//时间到以后,标志清零,才能重新进入由亮变暗的判断中
    
      time_3s = 0;			//计时清零
     
      stat_smg = smg_save;	//回到原主界面
      stat_mode = mode_save;  //回到原子界面
    }
}

  1. 长按按键2s后触发功能
    方法:按键按下标志位(S9_flag)和定时2s计时值(time_2s),在延时松手前后赋值、判断
    在这里插入图片描述

按键S9长按操作代码如下

C2 = 0;
R1 = R2 = C1 = 1;
if(R2 == 0)	
{
	SMG_Display();	//延时消抖
	if(R2 == 0)
	{	//先写短按操作
		if(stat_smg == 3)	//处于主界面中的参数界面下才能操作
		{	
			if(param_temperature == 0)	//最小值固定
				param_temperature = 0;
			else
				param_temperature -= 1;
		}
		//后写长按操作
		if((stat_smg ==2)&&(stat_mode == 3))	//处于回显界面中的时钟子界面才能操作
		{
			time_2s = 0;	//计时变量
			S9_flag = 1;	//标志按键按下状态
			
			while(R2 == 0)	//检测松手
			{
				SMG_Display();	
			}
			
			S9_flag = 0;	//标志按键松开状态
			if(time_2s >= 2000)	//长按超过2s后进行操作
			{
				Clear_Data();	//全部数据清除函数
			}
			time_2s = 0;	//清除计时
		}	
		
	while(R2 == 0)	//短按的检测松手
	{
		SMG_Display();	
	}
	}
}

二、易出错点提示

  1. 温度转换需要一定的延时时间,为了等待转换完成
  2. if((temp & 0xf800) == 0x0000)涉及多个运算符时,最好用括号标清楚运算顺序,以免报错
  3. stat_led 也需要初始化,赋值为 0xff;
  4. 软件生成的定时器初始化函数,要补充一些语句
    ①若将T0做计数器使用,则需要添加TMOD |= 0x05;
    ②定时器设置的语句要写全,包含定时器开启(TR)、中断允许(ET、EA)
    在这里插入图片描述

三、完整代码链接

下面提供了14届蓝桥杯单片机省赛代码,依据小蜜蜂老师风格编写,在修改bug时参考了部分B站视频
网盘链接:14届蓝桥杯单片机省赛代码-饥饿的半导体(提取码:1414)
参考视频①:蓝桥杯单片机第十四届省赛从新建工程到完成工程-左-岚
参考视频②:第十四届蓝桥杯单片机省赛讲解-是青不是氢


本文是在博主练习完部分省赛题目后总结的笔记
文章为本人对试题的观点,难免有所欠缺,欢迎大家在评论区里共同讨论

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

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

相关文章

C# 当录入错误的时候,右下角弹窗提示错误信息

做一个textbox录入数字的判断&#xff0c;当录入不是数字的时候右下角弹窗提示 右下角弹窗提示 主要代码如下&#xff1a;判断是否为数字的代码&#xff1a; private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { if(e.KeyChar13) …

计算机网络——物理层(编码与调制)

计算机网络——编码与调制 基带信号和宽带信号编码与调制数字数据编码为数字信号非归零编码归零编码反向不归零编码曼彻斯特编码差分曼彻斯特编码4B/5B编码 数字数据调制为模拟信号模拟数据编码为数字信号模拟数据调制为模拟信号 我们之前讲了物理层的一些基础知识和两个准则&a…

音频的录制及播放

在终端安装好pip install pyaudio&#xff0c;在pycharm中敲入录音的代码&#xff0c;然后点击运行可以在10s内进行录音&#xff0c;录音后的音频会保存在与录音代码同一路径项目中&#xff0c;然后再新建项目敲入播放的代码&#xff0c;点击运行&#xff0c;会把录入的录音进行…

关于UE的相机震动CameraShake

创建CameraShake资源 CameraShake配置是个蓝图类&#xff0c;我们选择创建BlueprintClass&#xff0c;父类选择CameraShakeBase即可。 参数调整 目前主要用到了 LocationAmplitudeMultiplier 1 LocationFrequencyMultiplier 10 RotationAmplitudeMultiplier 1 Rotation…

嵌入式系统和物联网常见的开发板介绍

嵌入式系统和物联网&#xff08;IoT&#xff09;领域&#xff0c;开发板是工程师和开发者进行原型设计和项目开发的重要工具。开发板通常集成了微控制器或处理器、内存、输入/输出接口和外设&#xff0c;以便于快速实现功能验证和产品原型。在本教程中&#xff0c;我们将讨论一…

Java设计模式 | 设计模式概述和分类

独孤求败五重境界 利剑&#xff08;“凌厉刚猛&#xff0c;无坚不摧&#xff0c;弱冠前以之与河朔群雄争锋。”&#xff09;软剑&#xff08;“紫薇软剑&#xff0c;三十岁前所用&#xff0c;误伤义士不祥&#xff0c;乃弃之深谷。”&#xff09;重剑&#xff08;“重剑无锋&a…

mybatis源码阅读系列(二)

前言 上一篇文章mybatis源码阅读系列&#xff08;一&#xff09;介绍了mybatis和原生jdbc的区别&#xff0c;并通过代码展示了两者的运行过程和结果&#xff0c;下面让我们继续详细了解下mybatis的执行过程&#xff1b; package com.wyl.mybatis.service;import com.wyl.mybat…

C语言字符函数和字符串函数详解

Hello, 大家好&#xff0c;我是一代&#xff0c;今天给大家带来有关字符函数和字符串函数的有关知识 所属专栏&#xff1a;C语言 创作不易&#xff0c;望得到各位佬们的互三呦 一.字符函数 在C语言中有一些函数是专门为字符设计的&#xff0c;这些函数的使用都需要包含一个头文…

Navicat 面试题及答案整理,最新面试题

Navicat 在数据库管理中的主要用途有哪些&#xff1f; Navicat 是一款数据库管理工具&#xff0c;其主要用途包括&#xff1a; 1、多数据库支持&#xff1a; Navicat 支持多种数据库连接&#xff0c;包括 MySQL、Oracle、PostgreSQL、SQLite、SQL Server 等&#xff0c;方便用…

第二门课:改善深层神经网络<超参数调试、正则化及优化>-超参数调试、Batch正则化和程序框架

文章目录 1 调试处理2 为超参数选择合适的范围3 超参数调试的实践4 归一化网络的激活函数5 将Batch Norm拟合进神经网络6 Batch Norm为什么会奏效&#xff1f;7 测试时的Batch Norm8 SoftMax回归9 训练一个SoftMax分类器10 深度学习框架11 TensorFlow 1 调试处理 需要调试的参…

考研C语言复习进阶(6)

目录 1. 程序的翻译环境和执行环境 2. 详解编译链接 2.1 翻译环境 ​编辑​编辑 2.2 编译本身也分为几个阶段&#xff1a; 2.3 运行环境 3. 预处理详解 3.1 预定义符号 3.2 #define 3.2.1 #define 定义标识符 3.2.2 #define 定义宏 2.2.3 #define 替换规则 3.2.4…

FFmpeg 常用命令汇总

​​​​​​经常用到ffmpeg做一些视频数据的处理转换等&#xff0c;用来做测试&#xff0c;今天总结了一下&#xff0c;参考了网上部分朋友的经验&#xff0c;一起在这里汇总了一下。 1、ffmpeg使用语法 命令格式&#xff1a; ffmpeg -i [输入文件名] [参数选项] -f [格…

软考--软件设计师(磁盘管理的例题)

流水线的理论公式&#xff1a; 单缓冲区&#xff1a;同一时间内只能允许一个进程进行写入读出&#xff0c;所以每个盘块经过缓冲区的时间是&#xff08;155微秒&#xff09;&#xff0c;之后再用1微秒的时间进行处理。在处理的同时&#xff0c;下一个盘块写入缓冲区&#xff0c…

牛客网-SQL大厂面试题-2.平均播放进度大于60%的视频类别

题目&#xff1a;平均播放进度大于60%的视频类别 DROP TABLE IF EXISTS tb_user_video_log, tb_video_info; CREATE TABLE tb_user_video_log (id INT PRIMARY KEY AUTO_INCREMENT COMMENT 自增ID,uid INT NOT NULL COMMENT 用户ID,video_id INT NOT NULL COMMENT 视频ID,start…

perl 用 XML::DOM 解析 Freeplane.mm文件,生成测试用例.csv文件

Perl 官网 www.cpan.org 从 https://strawberryperl.com/ 下载网速太慢了 建议从 https://download.csdn.net/download/qq_36286161/87892419 下载 strawberry-perl-5.32.1.1-64bit.zip 约105MB 解压后安装.msi&#xff0c;装完后有520MB&#xff0c;建议安装在D:盘。 运行 …

【Redis】基于Redis实现查询缓存

1.缓存更新策略 主动更新用的最多。  主动更新一般是由缓存的调用者&#xff0c;在更新数据库的同时&#xff0c;更新缓存。 操作缓存和数据库时有三个问题需要考虑&#xff1a; 删除缓存还是更新缓存&#xff1f; 更新缓存&#xff1a;每次更新数据库都更新缓存&#xff0…

LeetCode 2684.矩阵中移动的最大次数:一列一列处理,只记能到哪行(BFS)

【LetMeFly】2684.矩阵中移动的最大次数&#xff1a;一列一列处理&#xff0c;只记能到哪行(BFS) 力扣题目链接&#xff1a;https://leetcode.cn/problems/maximum-number-of-moves-in-a-grid/ 给你一个下标从 0 开始、大小为 m x n 的矩阵 grid &#xff0c;矩阵由若干 正 整…

Uniapp有奖猜歌游戏系统源码,附带流量主

有奖猜歌游戏是一款基于uni-app、uniCloud、uniAD 开发的小游戏&#xff0c;通过猜歌曲、观看广告赚取现金奖励。 游戏基本特征 玩家可以通过猜歌、做任务等方式直接获取现金奖励 玩家可以通过猜歌、拆红包、做任务等方式获取金币奖励&#xff0c;当金币累积到一定数量可以兑…

solr/ES 分词插件Jcseg设置自定义词库

步骤&#xff1a; 1、找到配置文件jcseg-core/target/classes/jcseg.properties修改配置&#xff1a; 下载地址: https://gitee.com/lionsoul/jcseg#5-如何自定义使用词库 lexicon.path {jar.dir}/../custom-word 设置lexicon路径&#xff0c;我们这个配置可以自定义&#xf…

Acwing-基础算法课笔记之动态规划(线性DP)

Acwing-基础算法课笔记之动态规划&#xff08;线性DP&#xff09; 一、数字三角形1、概述2、闫氏dp分析法代码示例 二、最长上升子序列1、概述2、闫氏dp分析法3、过程模拟4、代码演示 三、最长上升子序列强化版1、概述2、代码示例 四、最长公共子序列&#xff08;LCS&#xff0…