天天看點

c語言檢測按鍵按下次數,多按鍵檢測實作(修改中斷向量)

稍作修改使之更完善

#include”dos.h”

char key_state[128], key_pressed[128];

void interrupt far  (*OldInt9Handler) ();

void far interrupt NewInt9 (void)

{

char ScanCode,temp;

ScanCode = inportb (0×60);

if (ScanCode & 0×80) {

ScanCode &= 0x7f;

key_state[ScanCode] = 0;

}

else {

key_state[ScanCode] = 1;

key_pressed[ScanCode] = 1;

}

OldInt9Handler();     

}

void InstallKeyboard (void)

{

int i;

for (i = 0; i < 128; i++)

key_state = key_pressed = 0;

OldInt9Handler = getvect (9);

setvect (9, NewInt9);

}

void ShutDownKeyboard (void)

{

setvect (9, OldInt9Handler);

}

int GetKey (int ScanCode)

{

int res;

res = key_state[ScanCode] | key_pressed[ScanCode];

key_pressed[ScanCode] = 0;

return res;

}

main ()

{

int i,press;

InstallKeyboard ();

while (GetKey (1)==0){     

press = 0;

for (i = 0; i < 128; i++)

if (GetKey (i)) {

press = 1;

printf (“%4d”,i);

}

if (press)

printf (“\n”);

else

printf (“\nNokey!\n”);

}

ShutDownKeyboard ();

}