image.png
    image.png
    image.png

    1. module key_led(
    2. input clk,
    3. input rst,
    4. input [3:0] key,
    5. output reg [3:0] led
    6. );
    7. reg [23:0] counter;
    8. reg [1:0] led_switch;
    9. parameter TIME = 24'd10_000_000; //0.2s
    10. // counter 计数0.2秒
    11. always @(posedge clk or negedge rst) begin
    12. if(!rst)
    13. counter <= 24'd0;
    14. else if(counter > TIME)
    15. counter <= 24'd0;
    16. else
    17. counter <= counter + 1'b1;
    18. end
    19. // led_switch 状态计数器切换
    20. always @(posedge clk or negedge rst) begin
    21. if(!rst)
    22. led_switch <= 2'd0;
    23. else if(counter == TIME) begin
    24. led_switch <= led_switch + 1'b1;
    25. // if(led_switch == 2'b11) // led_switch溢出复位
    26. // led_switch <= 2'b00;
    27. // else
    28. // led_switch <= led_switch;
    29. end
    30. else
    31. led_switch <= led_switch;
    32. end
    33. // 按键控制 LED 状态
    34. always @(posedge clk or negedge rst) begin
    35. if(!rst)
    36. led[3:0] <= 4'b0000;
    37. else begin
    38. if(key[0] == 0) begin // KEY1:自右向左流水灯
    39. case(led_switch)
    40. 2'b00: led[3:0] <= 4'b1000;
    41. 2'b01: led[3:0] <= 4'b0100;
    42. 2'b10: led[3:0] <= 4'b0010;
    43. 2'b11: led[3:0] <= 4'b0001;
    44. default:led[3:0] <= 4'b0000;
    45. endcase
    46. end
    47. else if(key[1] == 0) begin // KEY2:自左向右流水灯
    48. case(led_switch)
    49. 2'b00: led[3:0] <= 4'b0001;
    50. 2'b01: led[3:0] <= 4'b0010;
    51. 2'b10: led[3:0] <= 4'b0100;
    52. 2'b11: led[3:0] <= 4'b1000;
    53. default:led[3:0] <= 4'b0000;
    54. endcase
    55. end
    56. else if(key[2] == 0) begin // KEY3:四灯同时闪烁
    57. case(led_switch)
    58. 2'b00: led[3:0] <= 4'b1111;
    59. 2'b01: led[3:0] <= 4'b0000;
    60. 2'b10: led[3:0] <= 4'b1111;
    61. 2'b11: led[3:0] <= 4'b0000;
    62. default:led[3:0] <= 4'b0000;
    63. endcase
    64. end
    65. else if(key[3] == 0) begin // KEY4:四灯全亮
    66. led[3:0] <= 4'b1111;
    67. end
    68. else begin
    69. led[3:0] <= 4'b0000; // 默认四灯全灭
    70. end
    71. end
    72. end
    73. endmodule

    key_led.mp4 (14.81MB)