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

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

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

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

系列文章链接:


一、题目难点解析

  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;elseparam_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)
参考视频①:蓝桥杯单片机第十四届省赛从新建工程到完成工程-左-岚
参考视频②:第十四届蓝桥杯单片机省赛讲解-是青不是氢


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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构和算法初阶(C语言)】队列实操(概念实现+oj题目栈和队列的双向实现以及循环链表难点题目详解!)

目录 1. 队列的概念及结构 2.队列结构存在的意义应用 3.队列实现的结构选择 4.队列实现 5.队列对数据的处理 5.1队列初始化 5.2队尾入数据 5.3队头出数据 5.4获取队列尾部元素 5.5获取队列头部元素 5.6获取队列中元素个数 5.7检测队列是否为空 5.8销毁队列 6.循环队列补充 7.使…

springboot宝鸡文理学院学生成绩动态追踪系统

摘 要 研究开发宝鸡文理学院学生成绩动态追踪系统的目的是让使用者可以更方便的将人、设备和场景更立体的连接在一起。能让用户以更科幻的方式使用产品&#xff0c;体验高科技时代带给人们的方便&#xff0c;同时也能让用户体会到与以往常规产品不同的体验风格。 与安卓&#…

Linux异步通知实验:应用程序对异步通知的处理

一. 简介 前面文章学习了 应用程序对异步通知的处理方法&#xff0c;另一篇文章实现了Linux驱动对异步通知的处理&#xff1a; Linux应用程序对异步通知的处理-CSDN博客 Linux异步通知实验&#xff1a;驱动中异步通知的处理-CSDN博客 本文继续Linux异步通知实验&#xff0c…

AI视频矩阵混剪系统|罐头鱼AI批量混剪定时发送

AI视频矩阵混剪系统&#xff1a;智能创作与发布的完美结合 随着社交媒体平台的快速发展&#xff0c;视频已成为各行业推广和传播的热门方式。然而&#xff0c;对于许多人来说&#xff0c;制作高质量的视频仍然是一项挑战。Q:290615413但现在&#xff0c;有了AI视频矩阵混剪系统…

字节面试: Mysql为什么用B+树,不用跳表?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团、蚂蚁、得物的面试资格&#xff0c;遇到很多很重要的相关面试题&#xff1a; Mysql用B树&#xff0c;不用跳表&…

【上海大学计算机组成原理实验报告】一、数据传送实验

一、实验目的 了解实验仪器数据总线的控制方式。掌握数据传送的基本原理。掌握各寄存器的结构、工作原理及其控制方法。 二、实验原理 根据实验指导书的相关内容&#xff0c;数据输入到寄存器的过程是先通过指令选择源和目标&#xff0c;再通过数据总线来传送数据&#xff0…

【ARM】UBL本地服务器离线激活license

【更多软件使用问题请点击亿道电子官方网站查询】 1、 文档目标 UBL本地服务器离线激活license。 2、 问题场景 解决有用户外出时激活 license。 3、软硬件环境 1&#xff09;、软件版本&#xff1a;MDK5.39 2&#xff09;、电脑环境&#xff1a;Ubuntu 20.04 LTS 3&…

Android U pipeline-statusbar

Android U - statusbar pipeline 写在前面 Android原生从T开始对SystemUI进行MVVM改造&#xff0c;U上状态栏部分进行了修改&#xff1b;第一次出现修改不会删除原有逻辑&#xff0c;而是两版并行&#xff0c;留给其他开发者适配的时间&#xff1b;在下一个大版本可能会删除原…

PHP<=7.4.21 Development Server源码泄露漏洞 例题

打开题目 dirsearch扫描发现存在shell.php 非预期解 访问shell.php&#xff0c;往下翻直接就看到了flag.. 正常解法 访问shell.php 看见php的版本是7.3.33 我们知道 PHP<7.4.21时通过php -S开起的WEB服务器存在源码泄露漏洞&#xff0c;可以将PHP文件作为静态文件直接输…

Linux服务器(RedHat、CentOS系)安全相关巡检shell脚本

提示&#xff1a;巡检脚本可以使用crontab定时执行&#xff0c;人工根据执行结束时间点统一收集报告文件即可。 #!/bin/bash# Define output file current_date$(date "%Y%m%d") # Gets the current date in YYYYMMDD format echo >server_security_inspection_r…

C++笔记:从零开始一步步手撕高阶数据结构AVL树

文章目录 高度平衡二叉搜索树实现一颗AVL树结点与树的描述——定义类AVL树的插入操作步骤1&#xff1a;按照二叉搜索树的方法插入结点步骤2&#xff1a;自底向上调整平衡因子步骤3&#xff1a;触发旋转操作&#xff08;AVL树平衡的精髓&#xff09;右单旋左单旋左右双旋右左双旋…

配置vscode环境极简版(C/C++)(图文)

前言 众所周知&#xff0c;vscode是一个代码编辑器&#xff0c;不能直接编译运行我们敲的代码&#xff0c;必须提前配置好环境&#xff0c;而这也是劝退一众小白的一大重要因素&#xff0c;下面我想以一种提纲挈领的方式带大家走一遍从配置环境到运行实操代码的全过程。 安装…