连接到GPIO引脚的led闪烁而不是持续亮起



我实际上已经问过这个代码之前的问题,但那是在它"工作"之前。代码如下:

module MatrixInput(CLOCK_50,MOutput, MInput, LEDR);
//10 -> 16 Cols INPUTS
//24 -> 18 rows OUTPUTS
input [16:10] MInput;
output reg [24:18] MOutput;
output [7:0] LEDR;
integer counter = 0;
input CLOCK_50; //50Mhz
reg [3:0] ButtonFlag;
initial counter = 0;

assign LEDR[7] = ~MInput[10]; //Assign Cols to Leds 7 to 4
assign LEDR[6] = ~MInput[12];
assign LEDR[5] = ~MInput[14];
assign LEDR[4] = ~MInput[16];
assign LEDR[3] = ButtonFlag[3]; //assign LED Rows to button Flag indicator
assign LEDR[2] = ButtonFlag[2];
assign LEDR[1] = ButtonFlag[1];
assign LEDR[0] = ButtonFlag[0];

always@(posedge CLOCK_50) begin
    if (counter > 3) //if counter is larger than amount of cases. reset to 0
        counter = 0;
    case(counter) //go through and set every row except one high which we will compare against columns
        0: MOutput[24:18] = 7'b1x0x1x1; //dont care about GPIO  23, 21 or 19 
        1:  MOutput[24:18] = 7'b1x1x0x1;
        2:  MOutput[24:18] = 7'b1x1x1x0;
        3:  MOutput[24:18] = 7'b0x1x1x1;
        default: counter = 0; //ideally shouldn't be needing a default case
    endcase

    if (MInput[10] == 1 && MInput[12] == 1 && MInput[14] == 1 && MInput[16] == 1)   begin
        ButtonFlag[counter] = 0;
    end else
        ButtonFlag[counter] = 1;
    counter = counter + 1;
end
endmodule

现在,led 7到4在"全"亮度下,当相关列按钮被按下时,表明它实际上是快速闪烁的。MOutput和Minput被分配给GPIO引脚。

我的问题是如何解决这个问题,并让他们在他们的列按下按钮时不断打开。

我刚刚意识到这是因为我正在循环MOutput和Minput,只有当MOutput处于正确的周期时才能打开,因此列LED闪烁。

最新更新