PS2扩展按键
请问各位大侠。。。有人调出PS2的扩展按键码??想请教下。。。一定要赐教啊。。。 附上程序:
module Ascii_Convert
(
input clk,
input shift,
input key_data_r,
output reg key_val,
output reg key_val1,
output reg key_val2,
output reg key_val3,
output reg key_val4
);
always@(posedge clk)
begin
case(key_data_r)
8'h1C : begin
key_val <= 8'h41;//"A"
end
8'h32 : key_val <= 8'h42;//"B"
8'h21 : key_val <= 8'h43;//"C"
8'h23 : key_val <= 8'h44;//"D"
8'h24 : key_val <= 8'h45;//"E"
8'h2B : key_val <= 8'h46;//"F"
8'h34 : key_val <= 8'h47;//"G"
8'h33 : key_val <= 8'h48;//"H"
8'h14 : begin //L CTRL
key_val <= 8'h4c;
key_val1<= 8'h43;
key_val2<= 8'h54;
key_val3<= 8'h52;
key_val4<= 8'h4c;
end
8'h14,8'hE0 : begin //R CTRL
key_val <= 8'h52;
key_val1<= 8'h43;
key_val2<= 8'h54;
key_val3<= 8'h52;
key_val4<= 8'h4c;
end
endcase
endmodule
但是发现在1602上R CTRL显示的还是L CTRL。。。不知道是哪里出了问题。。。请指教。。。
PS2的驱动程序
module PS2(
input clk,
input rst_n,
input ps2_clk,
input ps2_data,
output reg key_data,
output reg key_r
);
reg cnt;
reg ps2_clk1;
reg ps2_clk2;
reg ps2_data_r;
wire ps2_clk_n = (~ps2_clk1) & ps2_clk2;
reg key_press;
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
ps2_clk1 <= 0;
end
else
begin
ps2_clk1 <= ps2_clk;
end
end
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
ps2_clk2<=0;
else
ps2_clk2<=ps2_clk1;
end
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
cnt<=0;
else
if(ps2_clk_n)
begin
if(cnt<4'hA)
cnt<=cnt+1'b1;
else
cnt<=0;
end
end
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
ps2_data_r<=0;
else
if(ps2_clk_n)
begin
case(cnt)
1 : ps2_data_r <= ps2_data;
2 : ps2_data_r <= ps2_data;
3 : ps2_data_r <= ps2_data;
4 : ps2_data_r <= ps2_data;
5 : ps2_data_r <= ps2_data;
6 : ps2_data_r <= ps2_data;
7 : ps2_data_r <= ps2_data;
8 : ps2_data_r <= ps2_data;
default: ;
endcase
end
end
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
key_press<=0;
else
if(cnt==4'hA)
begin
if(ps2_data_r==8'hF0)
key_press<=1'b1;
else
key_press<=1'b0;
end
end
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
key_r<=0;
else
if(cnt==4'hA)
begin
if(!key_press)
begin
key_data <=ps2_data_r;
key_r<=1;
end
else
key_r<=0;
end
end
endmodule 这是什么语言? 是Verilog 状态机的状态设置错误:
8'h14,8'hE0 : begin //R CTRL
key_val <= 8'h52;
key_val1<= 8'h43;
key_val2<= 8'h54;
key_val3<= 8'h52;
key_val4<= 8'h4c;
这个状态应该删了,改成:
8'hE0 : begin //R CTRL
key_val <= 8'h52;
key_val1<= 8'h43;
key_val2<= 8'h54;
key_val3<= 8'h52;
key_val4<= 8'h4c;
这时应该就能有R CTRL出现,不过缺点是你按右ALT等以EO开头的按键都会显示成R CTRL,这个模拟想做好的话,建议你完整地看一遍PS2协议:
点击此处下载 ourdev_608635UA3WPH.pdf(文件大小:845K) (原文件名:PS2协议中英文文档.pdf) 扩展了什么按键呢
页:
[1]