搜索
bottom↓
回复: 5

PS2扩展按键

[复制链接]

出0入0汤圆

发表于 2010-11-10 21:53:20 | 显示全部楼层 |阅读模式
请问各位大侠。。。有人调出PS2的扩展按键码??想请教下。。。
一定要赐教啊。。。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2010-11-11 01:09:06 | 显示全部楼层
附上程序:
module Ascii_Convert
                (
                input                                clk,
                input                                shift,
                input                [7:0]        key_data_r,
                output        reg        [7:0]        key_val,
                output        reg [7:0]        key_val1,
                output        reg [7:0]        key_val2,
                output        reg        [7:0]        key_val3,
                output        reg        [7:0]        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        [7:0]        key_data,
                        output        reg                        key_r
                        );

reg        [3:0]        cnt;
reg                        ps2_clk1;
reg                        ps2_clk2;
reg        [7:0]        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[0] <= ps2_data;
                        2 : ps2_data_r[1] <= ps2_data;
                        3 : ps2_data_r[2] <= ps2_data;
                        4 : ps2_data_r[3] <= ps2_data;
                        5 : ps2_data_r[4] <= ps2_data;
                        6 : ps2_data_r[5] <= ps2_data;
                        7 : ps2_data_r[6] <= ps2_data;
                        8 : ps2_data_r[7] <= 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

出0入0汤圆

发表于 2010-11-11 08:52:52 | 显示全部楼层
这是什么语言?

出0入0汤圆

 楼主| 发表于 2010-11-15 20:19:33 | 显示全部楼层
是Verilog

出0入0汤圆

发表于 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)

出0入0汤圆

发表于 2011-1-2 22:20:09 | 显示全部楼层
扩展了什么按键呢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 15:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表