【蓝桥杯单片机进阶强化-05】2018年第九届省赛程序设计题--彩灯控制器

【题目要求】

1-基本功能描述

      通过单片机控制8个LED指示灯按照特定的顺序(工作模式)亮灭;指示灯的流转间隔可通过按键调整,亮度可由电位器RB2进行控制;各工作模式的流转间隔时间需在E2PROM中保存,并可在硬件重新上电后,自动载入。

2-设计说明

  <1> 关闭蜂鸣器、继电器等与本试题程序设计无关的外设资源。

  <2> 设备上电后默认数码管、LED指示灯均为熄灭状态。

  <3> 流转间隔可调整范围为400ms-1200ms。

  <4> 设备固定安照模式1、模式2、模式3、模式4的次序循环往复运行。

3-LED指示灯工作模式

  <1> 模式1:按照L1、L2...L8的顺序,从左到右单循环点亮。

  <2> 模式2:按照L8、L7...L1的顺序,从右到左单循环点亮。

  <3> 模式3

<4> 模式4

4-亮度等级控制

      检测电位器RB2的输出电压,控制8个LED指示灯的亮度,要求在0V~5V的可调区间内,实现4个均匀分布的LED指示灯亮度等级。

5-按键功能

<1> 按键S7定义为"启动/停止"按键,按下后启动或停止LED的流转。

<2> 按键S6定义为"设置"按键,按键按下后数码管进入"流转间隔"设置界面,如下图所示:

<3> 按键S5定义为"加"按键,在设置界面下,按下该键,若当前选择的是运行模式,则运行模式编号加1,若当前选择的是流转间隔,则流转间隔增加100ms。

  <4> 按键S4定义为"减"按键,在设置界面下,按下该键,若当前选择的是运行模式,则运行模式编号减1,若当前选择的是流转间隔,则流转间隔减少100ms。

  <5> 按键S4、S5的"加"、"减"功能只在"设置状态"下有效,数值的调整应注意边界属性。

  <6> 在非"设置状态"下,按键S4按键可显示指示灯当前的亮度等级,4个亮度等级从暗到亮,依次用数字1、2、3、4表示;松开按键S4,数码管显示关闭,亮度等级的显示格式如下图所示:

【工程下载用的HEX文件】

    百度网盘:https://pan.baidu.com/s/1zR6CWe7u0y2cr95R-Ypi0g

    蓝桥杯-单片机训练营的QQ群文件中。

  <1> 下载小蜜蜂编写的第九届代码并执行的时候,如果是第一次运行,在按S7按键启动彩灯时,有可能发现异常,或者彩灯变化超慢,什么原因?嗯...在程序中,上电初始化的时候,就会从24C02中读取出四个模式的流转间隔的时间参数。如果之前没有在这些内存单元写如果数据的话,读出来的将是0xFF,即255,流转时间是2500ms,或者读出的是一个随机值。这时候你按下S6按键进入“流转时间”设置模式,再按下S5按键增加时间,这时流转时间就变为1200ms,如果按下S4键减小,将会按100ms的单位,2400,2300,2200...往回减小。通过这种方式,实际上是给24C02流转间隔时间的内存单元做一个初始化,以后再开始使用就一切按照要求正常运行的了。那这样,程序不是有Bug吗?是的,小问题,不影响比赛题目的正常功能。因为你在做程序设计的时候,会调试运行,只要你对24C02写入过正确的数据,以后就可以正常运行所有功能了。那有办法修正完善得更完美吗?有,你可按下以下思路进行改进。

 <2> 升级完善思路很简单:不管是第一次运行程序,还是已经正常运行程序,在上电初始化读出24C02中流转时间参数的时候,没读出一个模式的参数,都做一个判断。如果该参数大于1200或者小于400的,统一回复默认值400。这样,不管是在任何时候,都可以保证24C02相应单元存储的参数,在读出来后都是在400-1200的正常范围内。

 <3> 这个bug的修正,大家可以作为一个训练项目,自己独立完成。

 <4> 源码及注释可见小蜜蜂笔记。

猜你喜欢

转载自blog.csdn.net/ohy3686/article/details/87199951