|
根据网络上找到的资料, 实现了模拟键盘的发送和接收, 使用USB转PS2的转接线可以正常使用, 但直接接在主板的PS2键盘接口. 无法通过系统的上电自检, 操作系统无法识别. 我觉得问题应该出在应答函数这一块, 但网络上关于PS2键盘上电检测应答的资料太少了. 下面是应答的函数. 所有的代码在附件中. 请帮忙看看这个上电检测应答的问题在哪里. 或者帮忙提供PS2键盘上电检测的相关资料. 感谢.
PS: 这是在CSDN上找到的一个代码, 对着我的环境修改了一些. 之前我写的也是同样的结果.
单片机源码:
- unsigned char PS2Response(void) //开机应答,使电脑能识别到键盘
- {
- unsigned char PS2RecChar;
-
- //while(PS2RecChar != 0xFF)
- PS2RecChar = PS2Rece();
-
- if(PS2RecChar != 0xCC)
- switch(PS2RecChar)
- {
- // delayms(4);
- case 0xFF: //主机命令设备复位(0xff),设备必须应答0xfa后回复0xaa;
- PS2Send(0xFA);
- delayms(3);
- PS2Send(0xAA);
-
- break;
- case 0xF2: // 主机请求获得设备ID命令(0xf2),设备必须应答0xfa后回复0xab,0x83;
- PS2Send(0xFA);
- delayms(3);
- PS2Send(0xAB);
- delayms(3);
- PS2Send(0x83);
- // LED = 1;
- break;
- case 0xEE: //主机ECHO命令(0xee),设备直接回复0xee;
- PS2Send(0xEE);
-
- break;
- case 0xEF:
- PS2Send(0xFA);
- delayms(3);
- PS2Send(0xBF);
- delayms(3);
- PS2Send(0xB0);
- break;
- //除以上命令之外的其它命令,设备只要回复0xfa即可,当然要视设备的功能作相应的动作。
- /*case 0xF5:
- PS2Send(0xFA);
- break;*/
- case 0xF3:
- PS2Send(0xFA);
- break;
- case 0x00:
- PS2Send(0xFA);
- break;
- case 0x02:
- PS2Send(0xFA);
- break;
- case 0x20:
- PS2Send(0xFA);
- break;
- case 0xED:
- PS2Send(0xFA);
- break;
- case 0xF0:
- PS2Send(0xFA);
- break;
- case 0xEC:
- PS2Send(0xFE);
- break;
- case 0xFE:
- PS2Send(0xFA);
- break;
- case 0xF1:
- PS2Send(0xFA);
- break;
- case 0xF4:
- PS2Send(0xFA);
- break;
- case 0xAA:
- PS2Send(0xAA);
- break;
- default :break;
- }
- delayms(4);
- return PS2RecChar;
-
- }
复制代码 |
|