|
根據網絡上找到的資料, 實現了模擬鍵盤的發送和接收, 使用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;
-
- }
復制代碼 |
|