一、实验目的
由 USER_BUTTON1 按键输入,切换 USER_LED1~ USER_LED8 的输出效果。
二、实验原理
实现框架如下:

(1)顶层实现按键切换 LED 的流水灯状态;
(2)需要设计一个输入控制模块及一个输出控制模块;
这个实验带大家将多个模块整合成为一个工程,涉及到的知识点有子模块设计、模块例化;子模块的设计主要是依据功能定位,确定输入输出,再做具体的设计;
模块例化方式如下:

*按键控制模块功能
接收按键输入信号。统计按键按下次数,由于流水灯模式是 3 种,计数统计范围是 0~2 循环,将计数结果传递给 LED 控制模块;
根据需求输入信号有:时钟,按键;输出信号有:流水灯控制信号;
内部功能处理:
<1>内部需要对按键信号做消抖处理;
<2>按键触发计数器(计数值输出)改变继而调整流水灯的状态;

*按键消抖模块

前后抖动时间约为 5~10ms,取按键抖动区间开始标识,持续 10-20ms 后标识归零,在抖动区间内输出保持,非消抖区间,按键状态输出。
*LED控制模块功能
3 种流水灯模式有按键传递过来的计数控制切换,每一个 LED 的显示状态完整后进入下一 模式初始化。根据需求可得到如下信息:
输入信号:时钟,流水灯模式控制信号;出信号:8bit 位宽的 LED 控制信号;功能处理注意事项:流水灯状态切换点,不同状态的切换时如何初始化;
三、实验源码设计
*顶层文件源码

*按键控制模块

*按键消抖模块

*LED控制模块


四、实验现象
每按下一次 KEY1,LED 灯状态切换一次,总共三种 LED 模式供循环切换;
LED 模式一:从高位到低位的 LED 流水灯;
LED 模式二:隔一亮一交替点亮;LED 模式三:从高位到低位暗灯流水;
更多实验教程敬请关注!