ruguo 发表于 2010-11-10 21:53:20

PS2扩展按键

请问各位大侠。。。有人调出PS2的扩展按键码??想请教下。。。
一定要赐教啊。。。

ruguo 发表于 2010-11-11 01:09:06

附上程序:
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

qq335702318 发表于 2010-11-11 08:52:52

这是什么语言?

ruguo 发表于 2010-11-15 20:19:33

是Verilog

coolxjm 发表于 2011-1-2 15:38:56

状态机的状态设置错误:
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)

kingsabbit 发表于 2011-1-2 22:20:09

扩展了什么按键呢
页: [1]
查看完整版本: PS2扩展按键