差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 | 后一修订版 两侧同时换到之后的修订记录 | ||
7._按键消抖 [2017/03/06 09:54] zhijun [Verilog代码] |
7._按键消抖 [2017/03/23 10:22] zhijun [Verilog代码] |
||
---|---|---|---|
行 37: | 行 37: | ||
====Verilog代码==== | ====Verilog代码==== | ||
------ | ------ | ||
+ | 本实验主要通过按键来控制led的翻转,当按下一次led变亮,再按下一次led变暗。首先我们做个试验,对按键不做处理通过按键来控制led翻转。 | ||
+ | |||
+ | <code verilog> | ||
+ | |||
+ | // ******************************************************************** | ||
+ | // >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<< | ||
+ | // ******************************************************************** | ||
+ | // File name : top.v | ||
+ | // Module name : top | ||
+ | // Author : STEP | ||
+ | // Description : control led through the button | ||
+ | // Web : www.stepfpga.com | ||
+ | // | ||
+ | // -------------------------------------------------------------------- | ||
+ | // Code Revision History : | ||
+ | // -------------------------------------------------------------------- | ||
+ | // Version: |Mod. Date: |Changes Made: | ||
+ | // V1.0 |2017/03/02 |Initial ver | ||
+ | // -------------------------------------------------------------------- | ||
+ | // Module Function:按键控制led翻转,未做消抖 | ||
+ | |||
+ | module top( | ||
+ | key, //按键输入 | ||
+ | rst, //复位输入 | ||
+ | led //led输出 | ||
+ | ); | ||
+ | |||
+ | input key,rst; | ||
+ | output reg led; | ||
+ | |||
+ | always @(key or rst) | ||
+ | if (!rst) //复位时led熄灭 | ||
+ | led = 1; | ||
+ | else if(key == 0) | ||
+ | led = ~led; //按键按下时led翻转 | ||
+ | else | ||
+ | led = led; | ||
+ | endmodule | ||
+ | </code> | ||
+ | \\ | ||
+ | 未经过消抖的程序下载到小脚丫上会发现按键有时不能够控制led翻转,这是因为按键的抖动造成了led状态变化不可控,所以我们必须将抖动消除。下面是一种延时去抖的程序 | ||
+ | |||
<code verilog> | <code verilog> |