实验任务:

本节实验任务是使用底板上的PL_KEY0和PL_KEY1按键来控制底板上的PL_LED0和PL_LED1两个LED的闪烁方式。没有按键按下时,两个LED保持常亮;如果按键0按下,则两个LED交替闪烁;如果按键1按下,则两个LED同时闪烁。

模块示意图:

 

模块代码实现:

modulekey_led(
input                         sys_clk,
input                         sys_rst_n,4
input              [1:0]    key,
output   reg    [1:0]    led
);

//reg define
reg [24:0] cnt;
reg led_ctrl;
//*****************************************************
//**                    main code
//*****************************************************16

always@(posedgesys_clkornegedgesys_rst_n)begin
        if(!sys_rst_n)
                cnt<=25’d0;
        elseif(cnt<25’d2500_0000)//计数500ms
                cnt<=cnt+1’b1;
        else
                cnt<=25’d0;
end
//每隔500ms就更改LED的闪烁状态
always@(posedgesys_clkornegedgesys_rst_n)begin
        if(!sys_rst_n)
                led_ctrl<=1’b0;
        elseif(cnt==25’d2500_0000)
                led_ctrl<=~led_ctrl;
end

//根据按键的状态以及LED的闪烁状态来赋值LED
always@(posedgesys_clkornegedgesys_rst_n)begin
        if(!sys_rst_n)
                led<=2’b11;
        elsecase(key)

                2’b10://如果按键0按下,则两个LED交替闪烁
                        if(led_ctrl==1’b0)
                                led<=2’b01;
                        else
                                led<=2’b10;
                2’b01://如果按键1按下,则两个LED同时闪烁
                        if(led_ctrl==1’b0)
                                led<=2’b11;
                        else
                                led<=2’b00;
                 2’b11://如果两个按键都未按下,则两个LED都保持点亮
                        led<=2’b11;
                default:;
        endcase
end
endmodule


版权声明:本文为qq_45565330原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_45565330/article/details/127861461