//记忆通码,以便发相应断码
switch( KeyOnCode ){ //根据KeyOnCode发送通码
OnCode_A: Ps2Out(0x1C); break;
OnCode_ArrowR: Ps2Out(0xE0); Ps2Out(0x74); break;
……..}}
void KeySendOff( void ) //发送断码的扫描码
{ if( KeyOnCodeOff ) return; //没发过通码,所有没有断码
KeyOnCodeOff = 1; //防止连续发断码
switch( KeyOnCode){ //根据最后发送的通码KeyOnCode补发断码
OnCode_A: Ps2Out(0xF0); Ps2Out(0x1C);
………}}
void KeyMessage( unsigned char Kn) //Kn是原始按键值
{ if( Kn==31){ KeyStatus="1"; return; }
if( KeyStatus==1){ if(Kn != 0 ){ KeySet="Kn"; KeyStatus="2"; } return; }
if( KeyStatus==2){
if( Kn==0){ KeySendOff(); return; }
if( KeySet==1){
switch( Kn ){
1: CapsLock =! CapsLock; KeySend(OnCapsLock); break;