|
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 [2:0] key_rst;
always @(posedge clk or negedge rst)
if(!rst)
key_rst <= 3'b111;
else
key_rst <= {sw3,sw2,sw1};
reg[2:0] key_rst_r;
always @(posedge clk or negedge rst)
if(!rst)
key_rst_r <= 3'b111;
else
key_rst_r <= key_rst;
wire[3:0] key_an = key_rst_r & (~key_rst);
reg[19:0] cnt;
always @(posedge clk or negedge rst)
if(!rst)
cnt <= 0;
else if(key_an) cnt <= 0;
else cnt <= cnt+1'b1;
reg [2:0] 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[2:0] low_sw_r;
always @(posedge clk or negedge rst)
if(!rst)
low_sw_r <= 3'b111;
else
low_sw_r <= low_sw;
wire [2:0] led_ctr =low_sw_r[2:0]&(~low_sw[2:0]);
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[0]) d1<=~d1;
if(led_ctr[1]) d2<=~d2;
if(led_ctr[2]) 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 |
|