


module key_led( input clk, input rst, input [3:0] key, output reg [3:0] led);reg [23:0] counter;reg [1:0] led_switch;parameter TIME = 24'd10_000_000; //0.2s// counter 计数0.2秒always @(posedge clk or negedge rst) begin if(!rst) counter <= 24'd0; else if(counter > TIME) counter <= 24'd0; else counter <= counter + 1'b1;end// led_switch 状态计数器切换always @(posedge clk or negedge rst) begin if(!rst) led_switch <= 2'd0; else if(counter == TIME) begin led_switch <= led_switch + 1'b1;// if(led_switch == 2'b11) // led_switch溢出复位// led_switch <= 2'b00;// else// led_switch <= led_switch; end else led_switch <= led_switch;end// 按键控制 LED 状态always @(posedge clk or negedge rst) begin if(!rst) led[3:0] <= 4'b0000; else begin if(key[0] == 0) begin // KEY1:自右向左流水灯 case(led_switch) 2'b00: led[3:0] <= 4'b1000; 2'b01: led[3:0] <= 4'b0100; 2'b10: led[3:0] <= 4'b0010; 2'b11: led[3:0] <= 4'b0001; default:led[3:0] <= 4'b0000; endcase end else if(key[1] == 0) begin // KEY2:自左向右流水灯 case(led_switch) 2'b00: led[3:0] <= 4'b0001; 2'b01: led[3:0] <= 4'b0010; 2'b10: led[3:0] <= 4'b0100; 2'b11: led[3:0] <= 4'b1000; default:led[3:0] <= 4'b0000; endcase end else if(key[2] == 0) begin // KEY3:四灯同时闪烁 case(led_switch) 2'b00: led[3:0] <= 4'b1111; 2'b01: led[3:0] <= 4'b0000; 2'b10: led[3:0] <= 4'b1111; 2'b11: led[3:0] <= 4'b0000; default:led[3:0] <= 4'b0000; endcase end else if(key[3] == 0) begin // KEY4:四灯全亮 led[3:0] <= 4'b1111; end else begin led[3:0] <= 4'b0000; // 默认四灯全灭 end endendendmodule
