同学们大家好~Long time no see.
年也快要过完啦,新的一年,大家也收到了满满的新年祝福压岁钱吧?从今天开始,我们将对“蓝桥杯”竞赛开赛以来,历届的单片机竞赛真题进行解析及代码分享。比赛日也一天天临近了,希望该阶段的系列帖子,能够帮助大家快速的掌握解题的思路和解题的技巧。
首先来看一下第九届蓝桥杯单片机省赛题之彩灯控制器赛题。
试题要求摸我下载哦(蓝桥杯单片机省赛试题-第9届-彩灯控制器.pdf)~
本次赛题使用到开发板上的模块有Pcf8591,led指示灯,按键,数码管显示以及E2PROM,这些模块我们在第一阶段的练习中,也都有接触哦~!本届赛题的难点在于使用PWM控制小灯亮度等级,以及E2PROM存储数据。而按键模块的程序,则是历届试题反复考到的了,属于老生常谈的问题啦。
对于试题要求,我们做如下分析。首先,分析赛题第一个要求实现的基本功能就是对蓝桥杯板的初始化,无非就是关掉继电器,蜂鸣器等外设资源(如果这一步操作不好,在比赛现场你的板子只要一上电,蜂鸣器就会一直瞎BB的哇~)。只要了解板子外部芯片资料加上数字电路一些逻辑知识,完成板子的初始化操作就都不是问题。
其次,我们来对题目中要实现的一些主要功能进行分析,其中要求“s7按键功能为启动或停止来控制led灯的流转”,此时就应该立即联想到之前我们练习的定时器与按键相关的程序,我们可以将led灯的流转间隔以及模式写在定时器0中断服务函数中;而按键s6的切换运行模式以及流转间隔可以在中断服务函数中可以定一个800ms的标志位,每到800ms可以对标志位进行取反,然后在主函数中判断。或者另一种方法就是到800ms是模式亮,然后到1600ms时模式灭可以实现被显示单元的亮灭,同理流转间隔也是一样。但s6按键设立标志位,具体代码看程序分析。
本届赛题按键的一个难点就是s4按下后显示亮度等级,松开后数码管处于熄灭状态,这个按键主要通过设立s4的标志位,按键s4没有松手检测,所以按键在按下时显示亮度等级,松开数码管关闭。像模式与流转间隔加减一定要注意范围选择。另一个难点是旋转RB2滑动变阻器来调节led灯亮度等级,我们可以在定时器中设立亮度变量的时间,设立在一个周期内当亮度时间从计数到亮度时间预定值时四种模式内的灯随AD读取RB2电压值变化,亮度时间在预定值到达给定周期数值时,四种模式灯处于熄灭状态。
以上是我对本题目的分析,以及编写代码的大体思路,当然编程的方法不止一种,只要能够按照题目要求实现每项功能,在评分的时候,基本上都能给到非常不错的分数。
在最后附上该题目的代码,供大家下载参考。由于时间原因和作者水平问题,可能会存在着一些不足,如有更好的方法和代码,还请大家多多指教~
----------------所有代码打包下载链接------------------
13.2018年第九届蓝桥杯省赛真题解析--彩灯控制器_代码.zip