设为首页收藏本站帮助中心
查看: 47|回复: 0
收起左侧

Quartus Verilog HDL/FPGA 按键双击(N连击)加按键消抖实现控制1个LED的亮灭翻转

[复制链接]
发表于 2022-1-4 17:01:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?加入我们

x
main.png
晶振频率:50Mhz 按键:低电平按下 LED:低电平点亮
上电初始熄灭LED,按键消抖25毫秒,按键按下后并松开,250毫秒内再次按下,翻转LED亮灭状态。
  1. module main(
  2.         input clk,                        //50Mhz时钟输入 Pin17
  3.         input skey,                        //按键 Pin144 按下清0 松开置1 (未消抖)
  4.         output reg sled        //LED Pin3 (低电平点亮)
  5. );

  6. reg khz1 = 0;                        //1Khz 频率输出
  7. reg [15:0] i = 0;                //用于将50Mhz分频到1Khz
  8. always @(posedge clk) begin
  9.         sled = led;
  10.         i = i + 1;
  11.         if(i == 25000) begin
  12.                 i = 0;
  13.                 khz1 <= !khz1;
  14.         end
  15. end

  16. reg [7:0] KEYms = 0;                //按键按下计数时间(毫秒 最大255) 松开清0
  17. reg [7:0] Leave = 0;                //按键松开时间 减到0 则连击清0
  18. reg [7:0] add = 0;                //按键连击次数
  19. reg key;                                                //按键按下清0 松开置1 (已消抖)
  20. reg okey;                                        //上次按键状态
  21. reg led = 1;                                //上电初始灭灯

  22. always @(posedge khz1) begin        //1Khz
  23.         if(skey) begin
  24.                 KEYms = 0;
  25.         end else begin
  26.                 if(KEYms != 255) begin
  27.                         KEYms = KEYms + 1;
  28.                 end
  29.         end
  30.         key = (KEYms >= 25) ? 0 : 1;
  31.        
  32.         if(key) begin
  33.                 if(Leave != 0) begin
  34.                         Leave = Leave - 1;
  35.                         if(Leave == 0) begin
  36.                                 add = 0;
  37.                         end
  38.                 end
  39.         end else begin
  40.                 if(okey != key) begin
  41.                         Leave = 250;
  42.                         add = add + 1;
  43.                         if(add >= 2) begin                //双击为2 三击为3 以此类推
  44.                                 add = 0;
  45.                                 Leave = 0;
  46.                                 led = !led;
  47.                         end
  48.                 end
  49.         end
  50.         okey = key;
  51. end
  52. endmodule
复制代码

相关帖子

这个小可爱很神秘,什么都没留下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则