通过单片机8个LED闪烁控制8个LED指示灯按照特定的顺序(工作模式)亮灭;指示灯的流转间隔可通过按键调整亮度可由电位器RB2进行控制;各工作模式的流转间隔时间需在E2PROM中保存,并可在硬件重新上电后自动载入。
<1> 关闭蜂鸣器、继电器等与本试题程序设计无关的外设资源
<2> 设备上电后默认数码管、LED指示灯均为熄灭状态。
<4> 设备固定安照模式1、模式2、模式3、模式4的次序循环往复运行
3-LED指示灯工作模式
检测电位器RB2的输出电压,控制8个LED指示灯的亮度偠求在0V~5V的可调区间内,实现4个均匀分布的LED指示灯亮度等级
<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文件】
下载小蜜蜂编写的第九届代码并执行的时候如果是第一次运行,在按S7按键启動彩灯时有可能发现异常,或者彩灯变化超慢什么原因?嗯...在程序中上电初始化的时候,就会从24C02中读取出四个模式的流转间隔的时間参数如果之前没有在这些内存单元写如果数据的话,读出来的将是0xFF即255,流转时间是2500ms或者读出的是一个随机值。这时候你按下S6按键進入“流转时间”设置模式再按下S5按键增加时间,这时流转时间就变为1200ms如果按下S4键减小,将会按100ms的单位2400,23002200...往回减小。通过这种方式实际上是给24C02流转间隔时间的内存单元做一个初始化,以后再开始使用就一切按照要求正常运行的了那这样,程序不是有Bug吗是的,尛问题不影响比赛题目的正常功能。因为你在做程序设计的时候会调试运行,只要你对24C02写入过正确的数据以后就可以正常运行所有功能了。那有办法修正完善得更完美吗有,你可按下以下思路进行改进
升级完善思路很简单:不管是第一次运行程序,还是已经正常運行程序在上电初始化读出24C02中流转时间参数的时候,没读出一个模式的参数都做一个判断。如果该参数大于1200或者小于400的统一回复默認值400。这样不管是在任何时候,都可以保证24C02相应单元存储的参数在读出来后都是在400-1200的正常范围内。
<3> 这个bug的修正大家可以作为一个训練项目,自己独立完成