找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2409|回复: 2
收起左侧

51单片机模拟PS2键盘的问题, 无法通过电脑主板上电自检

[复制链接]
ID:365802 发表于 2019-1-26 11:13 | 显示全部楼层 |阅读模式
根据网络上找到的资料, 实现了模拟键盘的发送和接收, 使用USB转PS2的转接线可以正常使用, 但直接接在主板的PS2键盘接口. 无法通过系统的上电自检, 操作系统无法识别. 我觉得问题应该出在应答函数这一块, 但网络上关于PS2键盘上电检测应答的资料太少了. 下面是应答的函数. 所有的代码在附件中. 请帮忙看看这个上电检测应答的问题在哪里. 或者帮忙提供PS2键盘上电检测的相关资料. 感谢.

PS: 这是在CSDN上找到的一个代码, 对着我的环境修改了一些.  之前我写的也是同样的结果.

单片机源码:
  1. unsigned char PS2Response(void)                        //开机应答,使电脑能识别到键盘               
  2. {
  3.         unsigned char PS2RecChar;

  4.         //while(PS2RecChar != 0xFF)
  5.         PS2RecChar = PS2Rece();

  6.         if(PS2RecChar != 0xCC)
  7.                 switch(PS2RecChar)
  8.                 {
  9. //                        delayms(4);
  10.                         case 0xFF:                         //主机命令设备复位(0xff),设备必须应答0xfa后回复0xaa;
  11.                                         PS2Send(0xFA);
  12.                                         delayms(3);
  13.                                         PS2Send(0xAA);
  14.                                        
  15.                                         break;
  16.                         case 0xF2:         // 主机请求获得设备ID命令(0xf2),设备必须应答0xfa后回复0xab,0x83;
  17.                                         PS2Send(0xFA);
  18.                                         delayms(3);
  19.                                         PS2Send(0xAB);
  20.                                         delayms(3);
  21.                                         PS2Send(0x83);
  22. //                                        LED = 1;
  23.                                         break;
  24.                         case 0xEE:                //主机ECHO命令(0xee),设备直接回复0xee;
  25.                                         PS2Send(0xEE);
  26.                                        
  27.                                         break;
  28.                         case 0xEF:
  29.                                         PS2Send(0xFA);
  30.                                         delayms(3);
  31.                                         PS2Send(0xBF);
  32.                                         delayms(3);
  33.                                         PS2Send(0xB0);
  34.                                         break;
  35.                         //除以上命令之外的其它命令,设备只要回复0xfa即可,当然要视设备的功能作相应的动作。
  36.                         /*case 0xF5:
  37.                                         PS2Send(0xFA);
  38.                                         break;*/
  39.                         case 0xF3:
  40.                                         PS2Send(0xFA);
  41.                                         break;
  42.                         case 0x00:
  43.                                         PS2Send(0xFA);
  44.                                         break;
  45.                         case 0x02:
  46.                                         PS2Send(0xFA);
  47.                                         break;
  48.                         case 0x20:
  49.                                         PS2Send(0xFA);
  50.                                         break;
  51.                         case 0xED:
  52.                                         PS2Send(0xFA);
  53.                                         break;
  54.                         case 0xF0:
  55.                                         PS2Send(0xFA);
  56.                                         break;
  57.                         case 0xEC:
  58.                                         PS2Send(0xFE);
  59.                                         break;        
  60.                         case 0xFE:
  61.                                         PS2Send(0xFA);
  62.                                         break;
  63.                         case 0xF1:
  64.                                         PS2Send(0xFA);
  65.                                         break;
  66.                         case 0xF4:
  67.                                         PS2Send(0xFA);
  68.                                         break;
  69.                         case 0xAA:
  70.                                         PS2Send(0xAA);
  71.                                         break;
  72.                         default  :break;
  73.                 }
  74.         delayms(4);
  75.         return PS2RecChar;
  76.         
  77. }
复制代码

CSDN上的例程--分析.zip

41.47 KB, 下载次数: 31

回复

使用道具 举报

ID:272876 发表于 2019-7-15 09:00 | 显示全部楼层
你好能加个QQ一起讨论下吗
回复

使用道具 举报

ID:551771 发表于 2021-2-6 11:41 来自手机 | 显示全部楼层
请问问题解决了吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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