按键消抖实验
module lcd_button2(clk,
rst,
led_d1,
led_d2,
led_d3,
sw1,
sw2,
sw3
);//按键按下,数码管依次显示0-9
input clk;
input rst;
input sw1,sw2,sw3;
output led_d1,led_d2, led_d3;
reg key_rst;
always @(posedge clk or negedge rst)
if(!rst)
key_rst <= 3'b111;
else
key_rst <= {sw3,sw2,sw1};
reg key_rst_r;
always @(posedge clk or negedge rst)
if(!rst)
key_rst_r <= 3'b111;
else
key_rst_r <= key_rst;
wire key_an = key_rst_r & (~key_rst);
reg cnt;
always @(posedge clk or negedge rst)
if(!rst)
cnt <= 0;
else if(key_an) cnt <= 0;
else cnt <= cnt+1'b1;
reg low_sw;
always @(posedge clk or negedge rst)
if(!rst)
low_sw <= 3'b111;
else if(cnt==20'hfffff)
low_sw <= {sw3,sw2,sw1};
reg low_sw_r;
always @(posedge clk or negedge rst)
if(!rst)
low_sw_r <= 3'b111;
else
low_sw_r <= low_sw;
wire led_ctr =low_sw_r&(~low_sw);
reg d1;
reg d2;
reg d3;
always @(posedge clk or negedge rst)
if(!rst) begin
d1 <= 1'b0;
d2 <= 1'b0;
d3 <= 1'b0;
end
else begin
if(led_ctr) d1<=~d1;
if(led_ctr) d2<=~d2;
if(led_ctr) d3<=~d3;
end
assign led_d3=d3?1'b1:1'b0;
assign led_d2=d2?1'b1:1'b0;
assign led_d1=d1?1'b1:1'b0;
endmodule 具体说明还未上,先贴程序 ............................ 你写程序always 不加上begin--end吗,加上吧,风格问题 你要不加,有的时候很难知道哪是一块了
wire key_an = key_rst_r & (~key_rst);这种写发行吗,程序中不少啊
注意代码风格
页:
[1]