【蓝桥杯单片机组】备赛实战问题记录
微信搜索:ReCclay,也可免费阅读博主蓝桥系列所有文章,后台回复“代码”即可获取蓝桥所有备赛代码!关注博主公众号,还可拥有加入博主粉丝群实时沟通技术难题、免费下载CSDN资源等多项福利,还在等什么呢?快快扫码关注,学习才不会迷路。
这里再向各位同学推荐一个CSDN博主 ReRrain 的蓝桥备赛博客,博主秉持初学者思路,向你讲述自己蓝桥备赛的心路历程,娓娓道来蓝桥备赛经验,个人觉得非常不错,值得细细品读。
文章目录
导读:《蓝桥杯单片机组》专栏文章是博主2018年参加蓝桥杯的单片机组比赛所做的学习笔记,在当年的比赛中,博主是获得了省赛一等奖,国赛二等奖的成绩。成绩虽谈不上最好,但至少问心无愧。如今2021年回头再看该系列文章,仍然感触颇多。为了能更好地帮助到单片机初学者,今年特地抽出时间对当年的文章逻辑和结构进行重构,以达到初学者快速上手的目的。需要指出的是,由于本人水平有限,如有错误还请读者指出,非常感谢。那么,接下来让我们一起开始愉快的学习吧。
靡不有初,鲜克有终。
1、关于超声波小数位
1m = 100cm
声速:340m/s
假设一个机器周期是12个时钟周期,对应晶振12M
×个机器周期(us)*10^-6(us换算成s)*340(m/s)/2(来回)*100(换算成cm)*10(取小数点后一位) = 0.17对应小数点后有一个小数
所以 time * 0.17
对应的距离单位cm
,带小数点后一位。
2、还要注意设置DAC输入参数或者ADC返回值,对应的的电压都是实际电压扩大是十倍以后的!
比如5V
对应val
为50
今天写第八届国赛题的部分代码截图如下。
3、E2初始化的问题
注意了,初始化E2必须这样写:
void ResetE2()
{u8 i, dat=1;for(i=0; i<10; i++){E2Write(&dat, i, 1);}
}
E2Write(0, i, 1);
//这样直接写数据是不行的!
4、按键按下显示,弹起不显示数据的技巧总结
涉及例题可参考:
《第九届省赛_彩灯控制器》
《第八届省赛_电子钟》
emm,,其实仔细想想也就那么点东西,很多也都是套路的堆砌!
5、关于实现数码管闪烁
模拟电子钟:
彩灯控制器:
关键理解思想咯。。。。
6、关于实现LED闪烁
第八届国赛:
第八届省赛:
7、关于实现数码管闪烁同时自加自减操作总结
数码管闪烁,需要注意的是加上一个总的开关,只有处于时钟设置状态下才打开。因为放到while(1)里面扫的,这样做还能避免耽误其他程序的执行!
还有这个闪烁以及自加自减通常出现在那种电子钟的题目中,那么对应肯定是得有时、分、秒的闪了,如何实现对应的闪烁呢?
是这样处理的:
先设置两个标志位,一个控制总的逻辑上的索引,SetClkIndex
,另一个控制实际位置的光标,SetClkCursor
。同时注意他们各自的取值范围!是不一样的!
具体怎么设置光标处于何种位置呢,是先操作索引SetClkIndex
,然后调用LedSetCursor
设置SetClkCursor
。
比如,程序中的某一段的使用:
现在能定位光标,也能让数码管闪烁了,接下来就是自加和自减的问题了。
这时候就能初步体会到SetClkIndex
的好处了,
我数码管闪烁的本质就是不断的开关,而再开的时候就有一个难点了,当前对应的数码管是哪个,对应的值是多少,这个其实我们并不容易得到,但是我们也不必管,只需要关了对应的单元,然后刷新数码管的时间,注意了不是实时刷新,因为Refresh(0)
中的参数写的是0!然后只需要我们操作buffTime
这个结构体自加和自减就行了!
再来看下IncBcd
和 DecBcd
的实现:
u8 IncBcd(u8 bcd, bit i)
{bcd += 0x01;if((bcd&0x0F) == 0x0A){bcd &= 0xF0;bcd += 0x10;}if(i == 1){if(bcd == 0x24)//0~24{bcd = 0x00;}}else//0~59{if(bcd == 0x60){bcd = 0x00;}}return bcd;
}u8 DecBcd(u8 bcd, bit i)
{bcd -= 0x01;if((bcd&0x0F) == 0x0F){bcd = (bcd&0xF0) | 0x09;}if(i == 1){if(bcd == 0xF9)//注意了0-1=0xFF,但是前面有对低位是F变为9的操作,故这里是判断0xF9!!{bcd = 0x23;}}else{if(bcd == 0xF9){bcd = 0x59;}}return bcd;
}
两点需要注意的:
1、输入参数中 i
的作用,是为了hour
的处理加入的,小时0~23
,其余0~59
。
2、还有减的时候,0
再减1
就是0xFF
了,然后由于我们前面对低位是F
的情况进行了变9
的操作,所以应该判断是否为0xF9
!
8、本次赋值和上次赋值完成后记得更新上次赋值
9、频率计的计数记得清零哇
10、一个子系统下,两种工作模式切换的总结
以频率界面为例
s5 - 更新系统状态:
s4 - 改变频率界面的两种工作模式
具体实现:
11、关于测555频率时,定时器配置。
以T0为例,即P34口。定时器的初值设置为0xFF,TMOD设置为0x04!
然后,1s监控的地方1s到了记得清零计数啊!
TH0 = 0xFF;TL0 = 0xFF;TMOD &= 0xF0;TMOD |= 0x04;ET0 = 1;TR0 = 1;
12、关于时钟赋值,BCD的高位和低位到底是什么,注意了!
傻逼了我,思路写题写的有点不清晰了
13、突发奇想的长按键
好久没写过这个了,突然想到会不会国赛涉及到,今晚也就顺便来了一波,还能写出来,甚是欣慰,还是那句话,一定要学会理解它!
具体实现呢,再来赘述下,就是阈值和按下时间的比较,然后执行动作。
结语:以上就是本篇文章的全部内容啦,希望大家可以多多支持我的原创文章。如有错误,请及时指正,非常感谢。
微信搜索:ReCclay,即可免费阅读博主蓝桥系列所有文章,后台回复“代码”即可获取蓝桥所有备赛代码!关注博主公众号,还可拥有加入博主粉丝群实时沟通技术难题、免费下载CSDN资源等多项福利,还在等什么呢?快快扫码关注,学习才不会迷路。
【蓝桥杯单片机组】备赛实战问题记录相关推荐
- 第jiu届蓝桥杯单片机省赛真题_第九届蓝桥杯单片机组省赛试题.pdf
第九届蓝桥杯单片机组省赛试题 "彩灯控制器"的程序设计与调试 (70 分) 一.基本要求 1.1 使用CT107D 单片机竞赛板,完成"彩灯控制器"功能的程序设 ...
- 十三届蓝桥杯单片机组省赛真题程序解析
第一次参加蓝桥杯,线上比赛,记录一下 比赛刚开始了十分钟才做上客观题,做上了之后才发现看一次题警告一次,当时就蚌埠住了,随便做了做就交了,手册也没怎么查(查一下直接给了3次黄牌,就没敢查了)其实老师1 ...
- 【第十四届蓝桥杯单片机组模拟赛1】
第十四届蓝桥杯单片机组模拟赛1 距第十四届蓝桥杯单片机还有不到一个月的时间啦,加油 源码 /*------------------------------第十四届蓝桥杯单片机模式赛---------- ...
- 蓝桥杯Web组备赛笔记6
目录 一.ElementUI 1.安装 2.简单使用 3.例子 4.其他内容的学习 二.echarts 1.简介 2.考点 3.安装 4.配置项:使用echarts的三步走 5.13届蓝桥真题(3)布 ...
- 蓝桥杯Web组备赛笔记1
目录 一.flex布局 1.详细的使用解释 2.简单例子 3.flex布局要认识两个轴 4.版心布局 5.13届蓝桥真题 (1,6) 二.grid布局 1.应用 2.代码例子 三.CSS动画 1.注意 ...
- 蓝桥杯Web组备赛笔记5
目录 一.vue 1.考察 2.引入式简单例子 二.生命周期 1.文档图示 2.常考模块介绍 三.组件传参方式 1.创建使用组件 2.父子传参 四.axios 1.简介 2.13届蓝桥真题(7)布局切 ...
- 蓝桥杯Web组备赛笔记4
目录 一.es6新增特性 1.定义常量及其简单的使用 2.set()函数 3.构造器 4.构造函数 二.高阶函数 1.filter():过滤器 2.find() 三.13届蓝桥真题 (9) 1.解题思 ...
- 【蓝桥杯单片机的备赛旅行日记系列】之国赛决赛第五届多功能事件记录器
目录 1.注意事项 2.部分代码展示 3.完整代码下载 1.注意事项 这是目前为止做到的最难的一套了,三个驱动都用上了,而且还增加了串口通信,最无奈的是光敏电阻和Rb2同时用上了. ADC读取 ...
- 第十一届蓝桥杯单片机组省赛模拟试题——智能门锁
试题可以直接在官网下载(试题链接),十分神奇地考了矩阵键盘. 按键功能: 矩阵键盘扫描方法很多,这里采用逐行扫描的方法:每次将某一行(R1.R2.R3.R4)置低电平,然后去读每一列(C1.C2.C3 ...
- 蓝桥杯Web组备赛笔记7
目录 一.node.js 1.概念 2.认识前后端交互 3.注意 4.下载 二.常见api 1.读写文件内容 2.更多常见的使用 3.API中文网文档 三.http 1.使用 2.监听请求 3.传回数 ...
最新文章
- 如何将光标定位到行尾
- SharpUpdater:开源的.NET桌面程序自动更新组件
- Android数据存储
- asp.net gridview 模板列 弹出窗口编辑_连云港各种新型铝模板设计软件,哪家强_威尔达建材...
- 7-40 奥运排行榜 (25 分)(详解+思路+map+vector做法)兄弟们冲压呀呀呀呀呀呀呀
- LINQ学习之旅——再次拾起
- Java、Javascript、Javaweb三者的区别
- set/multiset容器
- java两年需要,Java 两年总结
- 2021-08-27最大回文子串 leetcode
- lc用U盘更新固件_索尼电视安卓8.0固件升级完后电视连不上WIFI?最新解决方法!...
- NLP︱中文分词技术小结、几大分词引擎的介绍与比较
- docker 假死 僵尸状态
- mysql创建表报错1055的原因_[Err] 1055
- 《C++语言程序设计(第4版)学生用书》课程学习(12)——第12章 异常处理
- 2017 我所分享的技术文章总结(下)
- 5.7 将图层样式转换为普通图层 [原创Ps教程]
- 记一次糟心的前端笔试(2)
- python坐标表示_已知经纬度坐标求两点间距离,用python表示
- react native生成APP报错:You have not accepted the license agreements of the following SDK components: