|
楼主 |
发表于 2011-8-21 11:36:26
|
显示全部楼层
module key
(
clk,
row,
col,
key_value
);
input clk;
input [3:0] row;
output [3:0] col;
output [7:0] key_value;
reg [3:0] col;
reg [7:0] key_value;
reg [30:0] counter;
reg [2:0] state;
reg key_flag;
reg [3:0] col_reg;
reg [3:0] row_reg;
always @(posedge clk)
begin
case (state)
0:
begin
col[3:0]<=4'b0000;
if(row[3:0]!=4'b1111) begin state=1;col[3:0]=4'b1110;end
else state=0;
end
1:
begin
if(row[3:0]!=4'b1111) begin state=5; end
else begin state=2;col[3:0]=4'b1101;end
end
2:
begin
if(row[3:0]!=4'b1111) begin state=5; end
else begin state=3;col[3:0]=4'b1011;end
end
3:
begin
if(row[3:0]!=4'b1111) begin state=5; end
else begin state=4;col[3:0]=4'b0111;end
end
4:
begin
if(row[3:0]!=4'b1111) begin state<=5;end
else state<=0;
end
5:
begin
if(row[3:0]!=4'b1111)
///////////////////////////////////////此处就是我修改的消除抖动程序,>=50ms的是输入,<=50ms的是抖动///////////////////
begin
counter<=counter+1;
state=5;
if(counter==31'd500000)
begin
col_reg=col;
row_reg=row;
counter<=0;
end
end
//////////////////////////////////////////////////////消除结束啊/////////////////////////////////////////////////////
else
begin state=0;end
end
endcase
end
always @(posedge clk)
begin
case ({col_reg,row_reg})
8'b1110_1110: key_value<=8'd100;
8'b1110_1101: key_value<=8'd70;
8'b1110_1011: key_value<=8'd60;
8'b1110_0111: key_value<=8'd50;
8'b1101_1110: key_value<=8'd40;
8'b1101_1101: key_value<=8'd30;
8'b1101_1011: key_value<=8'd20;
8'b1101_0111: key_value<=8'd18;
8'b1011_1110: key_value<=8'd16;
8'b1011_1101: key_value<=8'd14;
8'b1011_1011: key_value<=8'd12;
8'b1011_0111: key_value<=8'd10;
8'b0111_1110: key_value<=8'd8;
8'b0111_1101: key_value<=8'd6;
8'b0111_1011: key_value<=8'd4;
8'b0111_0111: key_value<=8'd2;
endcase
end
endmodule |
|