左手倒影 发表于 2016-4-20 18:55:21

求高人分析讲解按键消抖程序

//4个独立按键S1/S2/S3/S4的按下与否(注意P12的PIN1-2短接),对应控制LED D2/D3/D4/D5/D6的亮灭切换
module cy4(
                        input ext_clk_25m,        //外部输入25MHz时钟信号
                        input ext_rst_n,        //外部输入复位信号,低电平有效
                        input key_v,        //4个独立按键输入,未按下为高电平,按下后为低电平
                        output reg led                //8个LED指示灯接口       
                    );

//-------------------------------------
//按键抖动判断逻辑
wire key;        //所有按键值相与的结果,用于按键触发判断
reg keyr;//按键值key的缓存寄存器

assign key = key_v & key_v & key_v & key_v;

always @(posedge ext_clk_25m or negedge ext_rst_n)
    if (!ext_rst_n) keyr <= 4'b1111;
    else keyr <= {keyr,key};

wire key_neg = ~keyr & keyr;        //有按键被按下       
wire key_pos = keyr & ~keyr;        //有按键被释放

//-------------------------------------
//定时计数逻辑,用于对按键的消抖判断
regcnt;       

        //按键消抖定时计数器
always @ (posedge ext_clk_25m or negedge ext_rst_n)
   if (!ext_rst_n) cnt <= 20'd0;       
        else if(key_pos || key_neg) cnt <= 20'd0;
        else if(cnt < 20'd999_999) cnt <= cnt + 1'b1;
        else cnt <= 20'd0;

reg key_value;

        //定时采集按键值
always @(posedge ext_clk_25m or negedge ext_rst_n)
    if (!ext_rst_n) begin
                key_value <= 4'b1111;
                key_value <= 4'b1111;
        end
        else begin
                key_value <= key_value;               
                if(cnt == 20'd999_999) key_value <= key_v;        //定时键值采集
                else ;       
        end

wire key_press = key_value & ~key_value;                //消抖后按键值变化标志位

//-------------------------------------
//LED切换控制

always @ (posedge ext_clk_25m or negedge ext_rst_n)
    if (!ext_rst_n) led <= 8'hff;
    else if(key_press) led <= ~led;
        else if(key_press) led <= ~led;
        else if(key_press) led <= ~led;
        else if(key_press) led <= ~led;
        else ;

endmodule

陈飞龙 发表于 2016-4-21 10:05:19

至芯ZX_1开发板资料整理
http://www.fpgaw.com/forum.php?mod=viewthread&tid=84726&fromuid=29512
(出处: fpga论坛|fpga设计论坛)
好多文档自己查吧:lol!

左手倒影 发表于 2016-4-21 15:02:34

万分感谢,我买的开发板是勇敢的芯,不知道是不是一样板子

陈飞龙 发表于 2016-4-22 21:32:49

不是,但代码都一样:lol
页: [1]
查看完整版本: 求高人分析讲解按键消抖程序