新闻  |   论坛  |   博客  |   在线研讨会
FPGA开发板DIY过程(七)
mmqm | 2012-10-05 17:09:42    阅读:1174   发布文章

测试按键功能,主要是去抖动问题。
软件一般按键抖动通过延时10~20ms判断,硬件一般用RS触发器电路。
实际应用中,按键功能比较复杂,比如长按、短按、多键等。

这里简化处理,测试去抖时间为100ms,因此如果在100ms内按下又弹起,就认为按键无效;按下超过100ms,就有效。最终应用可以修改成20ms。
同时按下多键也能识别。


视频:
http://v.qq.com/boke/page/i/2/c/i0105jszk2c.html



代码:

//KEY模块
module m_key(clk, rst, key, led);
 
input clk; //系统时钟输入,50MHz,0.02us
input rst; //系统复位输入
 
input[7:0] key;

 

output[7:0] led; //led输出
reg[7:0] led;
 
reg key_down;
reg[7:0] key_reg;
reg[22:0] key_cnt;

always @(posedge clk or negedge rst)
begin
    if(!rst)
    begin
       key_down <= 1'b1;
       key_reg <= 8'hff;
       key_cnt <= 23'd0;
    end
    else if(key != key_reg)
    begin
        key_reg <= key;
        key_cnt <= 23'd0;
    end
    else
    begin
        if(key_cnt == 23'd5000000) //5000000*0.02us=100ms
            key_down <= key_reg == 8'hff;
        else
            key_cnt <= key_cnt + 1'b1;
    end
end

always @(negedge key_down)
begin
    if(led == key_reg)
        led <= 8'hff;
    else
        led <= key_reg;
end

endmodule

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客