我实际上已经就此代码提出了上一个问题,但那是在此之前#34;正在工作"。这是代码:
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
目前LEDS 7到4还没有开启"完全"按下相关列按钮时的亮度表示它实际上非常快地闪烁。 MOutput和Minput分配给GPIO引脚。
我的问题是如何解决这个问题,并在按下列中的按钮时让它们持续亮起。
答案 0 :(得分:0)
我刚刚意识到这是因为我正在循环MOutput和Minput只能在MOutput处于正确的周期时开启,因此列LED闪烁。