这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 帮忙看看这样写按键检测有什么问题

共5条 1/1 1 跳转至

帮忙看看这样写按键检测有什么问题

菜鸟
2013-07-31 15:48:51     打赏

以前没接触过FPGA,目前只会一个always,像什么wire啊什么assign什么的还不知道什么意思。

写了个按键检测程序,有按下及松手的检测。

功能实现了,只是不知道这样写会有什么问题。

先谢谢各位了。

以下是代码:

module key(sys_clk, sys_rstn, led, key);

//输入/输出信号定义
input  key;
input  sys_clk;
input  sys_rstn;
output led;

//寄存器定义
reg [19:0] delay_cnt;
reg key_pressed;
reg key_stat;
reg led;

//逻辑部分
always@(posedge sys_clk or negedge sys_rstn)
    begin
        if (!sys_rstn)
            begin
                led<=1'b1;
                key_stat<=1'b0;
                delay_cnt<=20'h0;
            end
        else
            begin
                key_stat<=~key;
                if(key_stat)
                    begin

 //检测到按键按下,延时一段时间后如果依然为按下状态则判定为按键真实按下了。置key_pressed为1.
                        if (delay_cnt==20'hfffff)
                            begin
                                delay_cnt<=20'h0;
                                key_pressed<=1'b1;
                            end
                        else
                            begin
                                led<=led;
                                delay_cnt<=delay_cnt+1'b1;
                            end
                    end
                else
                    begin

                        //在前一状态为按键按下且松手一段时间后判定为真实松开了。
                        if(key_pressed)
                            begin
                                led<=led;
                                delay_cnt<=delay_cnt+1'b1;
                                if(delay_cnt==20'hfffff)  
                                    begin
                                        delay_cnt<=20'b0;
                                        key_pressed<=1'b0;
                                        led<=~led;
                                    end
                                else
                                    led<=led;
                            end
                    else
                        led<=led;
                end
        end
    end

endmodule




关键词: 按键     检测    

专家
2013-07-31 15:51:42     打赏
2楼

这个不懂。单片机上读相应寄存器就好了。


菜鸟
2013-07-31 15:53:59     打赏
3楼
是啊,在单片机上这程序挺好写的,但以前没接触过CPLD,不知道这样写会不会有什么问题。

助工
2013-07-31 23:29:46     打赏
4楼

看了你的代码,感觉比较复杂,建议你看下特权同学的出的《****FPGA》一书,上面的按键检测代码很精练实用。


高工
2013-08-01 10:45:24     打赏
5楼
建议楼主还是先学学verilog语法知识,别上来就写程序,像什么wire啊什么assign什么的还不知道什么意思,怎么能写好程序啊,这样可不行啊。

共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]