EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
i! V. W; b+ I9 ?6 Y, T; D
【Espier FPGA VHDL学习帖】第17帖 按键消抖 , i3 e. x2 u: A0 u+ i
4 N" y3 g/ z7 n: A) y1 i
2 l$ ]4 _' _3 \, U. G按键消抖程序的思路都是来源于特权同学的按键消抖,特权同学采用的是VHDL改编了他的程序。
- ]& g' v8 [( z* [2 P5 m! U! N. X/ }5 L
8 G/ o% M& J, ?% ]
20ms就会读取键值,把这个键值放到寄存器low_sw的值锁存到low_sw wire [2:0] led_ctrl = low_sw_r[2:0] &( ~low_sw[2:0]); 这是特权同学
1 M* O& y- b$ W2 Z% m v- T6 @/ `! c, t( A9 {+ N
& l" q! Z& D/ o6 ZKey_an是检测第一次按下,同时也是cnt计数,本开发板用的大概为48M晶振,并没有进行分频操作,所以 (1110101001100000000)2 这里我们直接用全1
# @: h; y9 t0 T3 s9 K 初始值 1 1 0 0 1 1 -> key_rst 0 0 1 1 0 0 ->取反 1 1 0 0 1 ->key_rst_r 0 1 0 0 0 key_an R' b8 v) P- K9 j
5 D4 z4 X8 L, n F
+ S* L) ^0 |7 I% J/ b把1跳变到led_ctrl拉高。回顾前面的20ms内如果出现按键被按下,
8 o! k, a3 P5 Q/ A2 E那么有一个时钟周期里led_ctrl的置高就使得相应的LED灯的亮灭做一次改变,这就达到了目的。 + _% D. ^2 u- u% V: a! ~
|