Каркас примерно такой
OldPort = NewPort;
NewPort = PIND & KeyMask;
if(OldPort == NewPort){
if((++KeyCnt) == _KeyCntMax){
PressedKeys = (OldKeys) & (~NewKeys); // Биты PressedKeys равные 0 нажаты в этот момент
Mask = 0x01;
while(Mask != 0x00){
switch(PressedKeys & 0x80){
тут делаем чего кнопкам надо
}
Mask <<= 1;
}
}
}