微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于特权同学按键消抖的问题

关于特权同学按键消抖的问题

时间:10-02 整理:3721RD 点击:
对按键消抖是设计思想已经理解了,但有一处纠结了很久,还是不解:
wire[2:0] key_an = key_rst_r & ( ~key_rst);
else if(key_an) cnt <=20'd0;
key_an不是三位位宽吗,那怎么判断其整体的大小呢?如key_an=110

下面一段是用Verilog写的按钮去抖动,及按住不放间隔取值的描述,会不会对你有帮助?       
    对于按钮使用除了物理的抖动,还可能出现人按压按钮是手颤动,为了预防手颤动或按压时间过长的问题,也需要对按压动作取值控制一定的时间间隔。在计算物理抖动时,必须是没有取值的状态。按钮下压值为0。这里的设计使我们按住按钮不松手,就可以按照一定的间隔时间(大约1秒),连续取值。这种情况用在浏览按钮使用非常方便。按住左或右浏览按钮不松手,可以连续浏览缓冲区的内容。
        always@(posedge clk18)       
        //去抖动
        begin
            if (  SW[0]==1 && KEY[0]==0 && kz==0)          //有效键按下输入
               begin
                   Co  <= Co+1'b1;                                //有效按下按钮计时        
                   if (Co==10800 )  writ<=1;                        //越过抖动时间正确取值
                   else  
                      begin
                        writ <= 0;                                //取值延长一个节拍
                        if (Co[22]==1)                                //进入连续取值计时
                           begin
                            kz<=1;                              //不准取值标志
                            coo<=0;                        //开始间隔计时
                           end
                      end
              end
            else                                                                //没有按压按钮的情况:
              begin
                 Co<=0;
                 writ <= 0;
                 coo <= coo+1'b1;                        //为无效按压计时
                 if (coo[22]==1) kz <= 0;                //预备输入按钮按压
              end
       

嗯,非常感谢,这段程序基本上看懂了,不过我对那个还是有些纠结

我也很纠结这个问题,想不明白,求大神解决!

同样的问题!

能判断的按键按下时key_an就只有一位是1,其余位是0
key_rst   1110
~key_rst  0001
key_rst_r   1110
key_an=     0010
对准来看结果就这样

我写了个四个位宽的解释,三个位宽同理

/////////////////////////

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top