【题目要求】
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定义为"设置"按键,按键按下后数码管进入"流转间隔"设置界面,如下图所示:
通过按键S6可切换选择“运行模式”和"流转间隔"两个显示单元,当前被选择的显示单元以0.8秒为间隔亮灭。
<3> 按键S5定义为"加"按键,在设置界面下,按下该键,若当前选择的是运行模式,则运行模式编号加1,若当前选择的是流转间隔,则流转间隔增加100ms。
<4> 按键S4定义为"减"按键,在设置界面下,按下该键,若当前选择的是运行模式,则运行模式编号减1,若当前选择的是流转间隔,则流转间隔减少100ms。
<5> 按键S4、S5的"加"、"减"功能只在"设置状态"下有效,数值的调整应注意边界属性。
<6> 在非"设置状态"下,按键S4按键可显示指示灯当前的亮度等级,4个亮度等级从暗到亮,依次用数字1、2、3、4表示;松开按键S4,数码管显示关闭,亮度等级的显示格式如下图所示:
【1】首先引入必要的头文件,定义变量。
【2】数码管动态显示的基础函数。
【3】显示彩灯亮度等级函数。
【4】显示彩灯运行模式的设置。
【5】显示彩灯流转间隔的设置。
【6】初始化定时器0的函数。
【7】定时器0中断服务函数。
【8】24C02的字节读与字节写函数。
【9】读取PCF8591中电位器的电压数据。
【10】根据电位器的电压进行彩灯亮度控制。
【11】彩灯工作状态与模式切换函数。
A-模式1的工作状态
B-模式2的工作状态
C-模式3与模式4的工作状态
D-4种工作模式的循环切换
【12】独立按键扫描与处理函数。
A-按键S7的处理逻辑
按键S6的处理逻辑
按键S5的处理逻辑
【13】参数配置保存。
【14】系统初始化函数。
【15】最后就是主函数。
【特别提示】:上述程序的HEX可执行文件,可在群文件下载。
【特别注意】:在调用竞赛举办方提供的IIC总线接口底层驱动代码的时候,务必认真阅读代码文件,确保无误。另外,在读取PCF8591的模拟输入数据时,在代码正确的情况下,仍然无法获得准确数据,可以增大IIC驱动程序中的时序延时长度,即“iic.h”文件中的somenop。