Verilog HDL语言脉冲按键电话显示器:(键盘扫描的问题)^ ^ 20
课本上的代码只写了键盘扫描部分。。(就是给X轴赋值,观察Y轴的输出来判断按的是哪个键。)然后就不知道怎么定义键盘部分。。就算定义了一个[3:0]key的数组,波形图还是很...
课本上的代码只写了键盘扫描部分。。(就是给X轴赋值,观察Y轴的输出来判断按的是哪个键。)然后就不知道怎么定义键盘部分。。就算定义了一个[3:0]key的数组,波形图还是很难出来。。。请问各位天才们有啥解决方法不?。。。(*^__^*)
keypad代码如下:
module keypad(clk,x,y,out,keypress);//键盘输入部分
input clk;
input [3:0]y;
output [3:0]x;
output [3:0]out;
output keypress;
reg keypress;
reg [3:0]x,out,y_temp,state;
reg [4:0]count;
always @ (posedge clk)
begin
case(state)
0:begin
x=4'b1111;
if(y!=4'b0000) state=0;//若有键按下,则一直循环状态0
else //若无键按下,则跳转至状态1
begin
state=1;keypress=0;
end
end
1:begin
x=4'b1111;
if(y==4'b0000) state=1;//若无键按下,则一直循环状态1
else //若有键按下,则跳转至状态10
begin
keypress=1;state=10;
end
end
10:begin
x=4'b1111;
if(y==4'b0000) state=1;//若无键按下,则跳转至状态1
else //若有键按下,则消抖30ms,确认有键按下则转向状态2
begin
count=count+1;
if({y==y_temp}&&(count==31))
state=2;count=0;
end
end
2:begin
x=4'b1000;state=3;//扫描第一列,转向状态3
end
3:begin
case(y)
4'b0000: state=4;//第一列各行无按键按下,转向状态4
4'b0001:begin //第一行第一列有按键按下,输出按键编码值0,转向状态0
out=0;state=0;
end
4'b0010:begin //第二行第一列有按键按下,输出按键编码值1,转向状态0
out=1;state=0;
end
4'b0100:begin //第三行第一列有按键按下,输出按键编码值2,转向状态0
out=2;state=0;
end
4'b1000:begin //第四行第一列有按键按下,输出按键编码值3,转向状态0
out=3;state=0;
end
endcase
end
endcase
****************
(还有剩下的代码全附上去就会超过字数限制,不过就是不停给x赋值,然后读y的值了。。。)
*******************
end
endmodule 展开
keypad代码如下:
module keypad(clk,x,y,out,keypress);//键盘输入部分
input clk;
input [3:0]y;
output [3:0]x;
output [3:0]out;
output keypress;
reg keypress;
reg [3:0]x,out,y_temp,state;
reg [4:0]count;
always @ (posedge clk)
begin
case(state)
0:begin
x=4'b1111;
if(y!=4'b0000) state=0;//若有键按下,则一直循环状态0
else //若无键按下,则跳转至状态1
begin
state=1;keypress=0;
end
end
1:begin
x=4'b1111;
if(y==4'b0000) state=1;//若无键按下,则一直循环状态1
else //若有键按下,则跳转至状态10
begin
keypress=1;state=10;
end
end
10:begin
x=4'b1111;
if(y==4'b0000) state=1;//若无键按下,则跳转至状态1
else //若有键按下,则消抖30ms,确认有键按下则转向状态2
begin
count=count+1;
if({y==y_temp}&&(count==31))
state=2;count=0;
end
end
2:begin
x=4'b1000;state=3;//扫描第一列,转向状态3
end
3:begin
case(y)
4'b0000: state=4;//第一列各行无按键按下,转向状态4
4'b0001:begin //第一行第一列有按键按下,输出按键编码值0,转向状态0
out=0;state=0;
end
4'b0010:begin //第二行第一列有按键按下,输出按键编码值1,转向状态0
out=1;state=0;
end
4'b0100:begin //第三行第一列有按键按下,输出按键编码值2,转向状态0
out=2;state=0;
end
4'b1000:begin //第四行第一列有按键按下,输出按键编码值3,转向状态0
out=3;state=0;
end
endcase
end
endcase
****************
(还有剩下的代码全附上去就会超过字数限制,不过就是不停给x赋值,然后读y的值了。。。)
*******************
end
endmodule 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询