|
根據(jù)網(wǎng)絡(luò)上找到的資料, 實(shí)現(xiàn)了模擬鍵盤的發(fā)送和接收, 使用USB轉(zhuǎn)PS2的轉(zhuǎn)接線可以正常使用, 但直接接在主板的PS2鍵盤接口. 無法通過系統(tǒng)的上電自檢, 操作系統(tǒng)無法識別. 我覺得問題應(yīng)該出在應(yīng)答函數(shù)這一塊, 但網(wǎng)絡(luò)上關(guān)于PS2鍵盤上電檢測應(yīng)答的資料太少了. 下面是應(yīng)答的函數(shù). 所有的代碼在附件中. 請幫忙看看這個(gè)上電檢測應(yīng)答的問題在哪里. 或者幫忙提供PS2鍵盤上電檢測的相關(guān)資料. 感謝.
PS: 這是在CSDN上找到的一個(gè)代碼, 對著我的環(huán)境修改了一些. 之前我寫的也是同樣的結(jié)果.
單片機(jī)源碼:
- unsigned char PS2Response(void) //開機(jī)應(yīng)答,使電腦能識別到鍵盤
- {
- unsigned char PS2RecChar;
-
- //while(PS2RecChar != 0xFF)
- PS2RecChar = PS2Rece();
-
- if(PS2RecChar != 0xCC)
- switch(PS2RecChar)
- {
- // delayms(4);
- case 0xFF: //主機(jī)命令設(shè)備復(fù)位(0xff),設(shè)備必須應(yīng)答0xfa后回復(fù)0xaa;
- PS2Send(0xFA);
- delayms(3);
- PS2Send(0xAA);
-
- break;
- case 0xF2: // 主機(jī)請求獲得設(shè)備ID命令(0xf2),設(shè)備必須應(yīng)答0xfa后回復(fù)0xab,0x83;
- PS2Send(0xFA);
- delayms(3);
- PS2Send(0xAB);
- delayms(3);
- PS2Send(0x83);
- // LED = 1;
- break;
- case 0xEE: //主機(jī)ECHO命令(0xee),設(shè)備直接回復(fù)0xee;
- PS2Send(0xEE);
-
- break;
- case 0xEF:
- PS2Send(0xFA);
- delayms(3);
- PS2Send(0xBF);
- delayms(3);
- PS2Send(0xB0);
- break;
- //除以上命令之外的其它命令,設(shè)備只要回復(fù)0xfa即可,當(dāng)然要視設(shè)備的功能作相應(yīng)的動作。
- /*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;
-
- }
復(fù)制代碼 |
|