在大一时,我参加了第十四届蓝桥杯单片机设计与开发竞赛,并获得国家级二等奖。许多电子类专业的同学在大一时就希望参与竞赛,但常常对自己能否在初期获得高水平奖项感到迷茫。本文将分享我在备赛蓝桥杯单片机比赛过程中的经验,希望能够鼓励大一同学克服对自身能力的怀疑,认识到自己同样能够参与并取得优异成绩,也希望更多的大一及其他年级的同学能够积极参与蓝桥杯单片机竞赛。
1 入门C语言和51单片机
对于入门51单片机和C语言,向大家推荐一套宝藏级别的视频:
51单片机入门教程-2020版 程序全程纯手打 从零开始入门_哔哩哔哩_bilibili
想学习一个东西,最重要的是兴趣,也就是学习的动力。单片机可以说是一种玩具,通过编程(C语言)去实现一些功能,当我们打代码实现功能的时候何尝不是一种快乐呢?大家在学习过程中应该能够体会。无实物只看视频可以学习,但最好还是买一个51开发板,边用边学。推荐淘宝链接:https://m.tb.cn/h.gmcw7DWlhpS7rPV?tk=PK0Z3VLTb1t (69.5元)在视频开始教单片机的时候,会有一些计算机、硬件的知识,没有数电模电等相应基础的话会比较迷,但能理解多少是多少吧,这个对初学者或者说写代码影响不大,软件需要明白的是怎样写程序才能控制硬件实现功能,大多数视频最后阶段是up主教学写代码,他会根据单片机原理图等来写程序,一定要跟着up主打一遍代码,然后烧录到单片机实现功能,接着看一遍程序,有没有什么地方不理解的,如果有的话,就把视频倒回去再听听讲解,如果实在听不懂可以先略过,下述二刷的时候也会受益匪浅。
对于参加蓝桥杯单片机的同学,需要学习:(视频前标)
[1-1][1-2][1-3][2-1][2-2][2-3][3-1][3-2][3-3][3-4][4-1][4-2][5-1][5-2]
[6-1][7-1][7-2][8-1][8-2][10-1][10-2][11-1][12-1][12-2][13-1][13-2][15-1]
再学习AD/DA模块
2 用蓝桥杯单片机点亮第一个LED灯
学完51单片机入门视频后,如何检验自己的掌握情况呢?可以用所学知识学习另一块51单片机开发板,这样既可以查漏补缺,学习到不同51单片机开发板之间的异同,也会增强自信心,越来越得心应手。
学习蓝桥杯单片机之前需要先看一下用户手册,手册介绍了单片机的板载资源、硬件资源、端口资源分配等等,让你对蓝桥杯单片机有个大概了解:
学习新的开发板最关键的就是点亮第一个LED灯,新建工程cpu型号与普中单片机相同,选择AT89C52:
蓝桥杯单片机的头文件需要从stc-isp烧录软件引入,在软件上方找到头文件选项,点击后,选择STC15Fxx系列(较新的stc-isp头文件名称为__STC15_H_,比下方头文件名称短一些,效果是一样的),然后保存文件到工程文件夹下,文件名为STC15F2K60S2,类型为.h文件:
将该头文件保存在工程里:
引用头文件即可,然后按照普中单片机点灯,发现蓝桥杯单片机的LED灯并不会点亮(蓝桥杯单片机LED灯由P0口控制):
#include <STC15F2K60S2.H>
void main()
{
while(1)
{
P0 = 0xfe;
}
}
出现问题,我们优先查看的就是原理图,发现蓝桥杯单片机P0口在控制LED灯前有138译码器和74HC573锁存器:
代码需要进行以下修改:
#include <STC15F2K60S2.H>
void main()
{
/*蓝桥杯单片机P0控制LED亮灭,江协视频里面是P2,
有区别,这个板子不能直接写P0=0xfe点亮第一个LED*/
/*板子有锁存器在控制,需要先开启锁存器,再写P0=0xfe,点亮第一个LED*/
while(1)
{
P2=0x9f;
/*1001 1111开启LED锁存器(P2高三位为100可以开启LED锁存器) 为什么P2设置成0x9f
会开启锁存器 需要学习138译码器 在视频4-1静态数码管里面有讲解*/
/*比赛最好是这样写:P2=((P2&0x1f)|0x80); 这样P2的高三位也是100,但(P2&0x1f)
会防止P2原本被其他外设使用,只改变高三位而其他位不变,不影响其他外设使用*/
P0=0xfe; //1111 1110从左边数第一个LED点亮
P2&=0x1f; //0001 1111关闭锁存器
}
}
编译通过后,生成HEX文件(记得勾选之后才会生成该文件),打开stc-isp烧录软件,选择单片机型号为IAP15F2K61S2,输入用户程序运行时的IRC频率为12.000MHz,烧录HEX文件即可:
完成上述操作之后,大家成功点亮第一个LED灯,但同时会发现,一上电蜂鸣器就会响个不停,有两个解决方案:1.拔掉蜂鸣器旁边的跳线帽 2.写程序关闭蜂鸣器(推荐使用第2种方式)
3 用蓝桥杯单片机复刻普中单片机的功能
学习普中单片机的时候,大家已经编写了很多工程代码了,用蓝桥杯单片机复刻,实现相同功能是具有挑战性的事情。但请不要害怕,51单片机的本质都是相同的,当你全部复刻之后,你将不会害怕学习同一型号的单片机以及移植同一型号单片机的代码。
当然,在复刻的过程中也会遇到问题,这时就需要再回去看看视频,这一遍视频可能有不一样的收获。
在学习过程中也要写笔记,俗话说:好记性不如烂笔头。之后在做题过程中,可能会碰到和你学习过程中所遇到的相同的问题,写笔记方便回顾复习。例如,解决常见问题的方法:
在编写程序时,可能会出现各种错误。下面是一些常见错误和注意事项:
重点内容总结和归纳:
在复刻学习完一些外设后,说不定能有所创新实现一个较大的实际工程项目。下面是我当时学习之后实现的一个项目,大家感兴趣的话可以看看:http://t.csdnimg.cn/lS0gG
4 学习相关蓝桥杯备赛视频
我主要看的小蜜蜂老师的单片机视频:【小蜜蜂笔记】蓝桥杯大赛-单片机设计与开发基础技能与进阶强化教程_哔哩哔哩_bilibili
从视频中可以学习到一些好的代码编写方式,从而避免各个外设的冲突、提高硬件运行效率。也有基础和进阶练习题供大家练习,提高自己的逻辑思维能力(超声波测距可以提前学习,省赛不会考,国赛会考):
5 练习省赛题
基本准备工作做完后,就要开始练习省赛题了。我当时先练习了第九届的省赛题:彩灯控制器。第一次做题用了十几个小时,才把功能全部实现,所谓万事开头难,希望大家第一次做题也不要放弃,克服之后,再做其他省赛题就得心应手了。
做完第一套省赛题后,不要着急做下一套,带着逻辑再写一遍这套题的代码,缩短所用的时间。之后再做其他省赛题,第一次做完可能还是会花费很长时间,但慢慢找到其中逻辑之后就可以孰能生巧了。做题时要注意时间,尽量缩短做题时间。可以反复刷题,建议把做完一套题的时间缩短在4小时以内:
做完这些之后,就可以静待省赛考试前的模拟赛了(我是在大一下开学前不久,完成了上述全部内容)。
6 模拟赛+省赛考前复习
最后一次模拟赛大概在3月初左右,大家尽量做一下这个模拟赛,复习一下之前所学知识,并当作省赛来对待,按照省赛试题的提交要求进行上传提交。
完成之后,等到省赛考试前两周准备冲刺复习。先复习每个独立模块的代码,例如按键、数码管、AT24C02、DS18B20、DS1302等等:
然后复习省赛题:
考前几天记得刷一下客观题,客观题占分少,可以放得松一些,不用过分注重:
做好这些准备工作之后,就可以自信地参加省赛了,无论结果如何,尽力就好(这也是我对待其他比赛时的态度)。但十四届省赛我还是要在这里吐槽一下:我刚拿到题的时候以为是发错题,当时认为发成国赛题了(省赛比赛前正好瞄了一眼往届的国赛题),因为题目确实长得离谱。最后把5个小时都花完了,还剩下两个灯没点...不过难了都难,尽自己最大的能力也能拿到不错的成绩。由于十五届省赛题又回归正常,建议把十四届省赛题当国赛题练习。
7 国赛考前复习
国赛与省赛会间隔一个月左右,我在国赛前两周复习了基本模块、往届省赛题,再刷往届国赛题、客观题,保证国赛题也在4小时内完成。国赛分水岭在于客观题,个人感觉十四届国赛主要就是靠客观题区分国一和国二,因为能进入国赛的选手对程序题的实现基本大差不差。
8 资料
如需十四届国二资料可以私信我,本人很乐意开源,欢迎大家在评论区交流学习,预祝大家在蓝桥杯单片机设计与开发竞赛中取得优异成绩!!!