Key
实验目的
1 设计 8 种彩灯效果, 可通过按键切换。
2 选择一个按键作为控制输入, 按下一次换一种显示效果, 在 8 种效果中循环。
实验要求
1、 实验平台: MES2KG 开发板;
2、 按键输入由 K1 输入, LED 输出为 LD1~LD4。
实验原理
实现框架如下:
1、 顶层实现按键切换 LED 的彩灯状态;
2、 需要设计一个输入控制模块及一个输出控制模块;
这个实验带大家将多个模块整合成为一个工程, 涉及到的知识点有子模块设计、 模块例化; 子模块的设计主要是依据功能定位,确定输入输出, 再做具体的设计;
模块例化方式如下:
按键控制模块功能
接收按键输入信号。 统计按键按下次数, 由于彩灯模式是 8 种, 计数统计范围是 0~7 循环, 将计数结果传递给 LD 控制模块;
根据需求输入信号有: 时钟, 按键; 输出信号有: 彩灯控制信号;
内部功能处理:
<1>内部需要对按键信号做消抖处理;
<2>按键触发计数器( 计数值输出) 改变继而调整彩灯的状态;
按键消抖
消抖目的
机械式弹片按键, 在按下或松开时会有机械抖动, 导致在按下或松开时按键的状态不稳定, 在快速的变化, 在使用按键输入信号时如果采集了抖动时的状态,会导致工程运行出现不可控的变化, 故而我们需要将这段时间的抖动信号给滤除掉, 故此实验称之为按键消抖; 实验原理
前后抖动时间约为 5~10ms, 前后抖动共在 20ms, 以最大 20ms 做设计, 使用计数到 N 归零的计数器来做时间刻度计时; 以 20ms 的间歇对按键输入信号进行采集, 从而避开按键的抖动引起的信号快速变化;
设计 1 个 20bit 的计数器, 其计数最大值为: N = 20’ hC3500 = 20’ d800000最大计数值时, 计时为: t= N*T = N/f = 800000/40M = 20ms;注: 对于计数器完成计时功能在 LED 灯控制中已有详细讲解, 需要关注输入时钟频率以及目标计时时长, 从而得到计数器的计数范围; LED 控制模块功能
8 种流水灯模式有按键传递过来的计数控制切换, 每一个 LED 的显示状态完整后进入下一模式初始化。 根据需求可得到如下信息:
输入信号: 时钟, 彩灯模式控制信号; 出信号: 12bit 位宽的 LED 控制信号;
程序下载
实验现象
上电后下载完固件, 默认 LD1~LD4 流水, 每按下一次 KEY1, 彩灯状态切换一次, 总共 8 种状态可供循环切换;
学习体会
1-掌握了软件延时消抖原理
2-软件计时员原理的理解与应用
3-IO输出控制方法的掌握
|