Hallo Andreas,
Ich habe mir das mal angesehen und etwas vereinfacht.
Ich hoffe durch die Kommentare, verstehst du jetzt, warum die Spalten auf "0" gesetzt werden müssen.

Code:
Ddrd = &B10000100
Portd = &HFF
'bei den Eingängen Pullup's ein und Ausgänge auf high

Dim Spalte As Byte
Dim Zeile As Byte
Dim Taste As Byte
'Jetzt sind alle Portpins "1". Wenn eine Taste gedrückt wird passiert nichts!

Do
  For Spalte = 0 To 1

  'Deshalb wird jetzt jeweils 1 Spalte "0" gesetzt
    If Spalte = 0 Then Reset Portd.2
    If Spalte = 1 Then Reset Portd.7
    For Zeile = 3 To 6
      Select Case Zeile
      'ist jetzt eine Taste gedrückt,wird der entsprechende Eingang auch "0"

        Case 3 : If Pind.3 = 0 Then Taste = Spalte + 1
        'Portd.2=0 und Pind.3=0 => Taste1 / Portd.7=0 und Pind.3=0 => Taste2

        Case 4 : If Pind.4 = 0 Then Taste = Spalte + 3
        'Portd.2=0 und Pind.4=0 => Taste3 / Portd.7=0 und Pind.4=0 => Taste4

        Case 5 : If Pind.5 = 0 Then Taste = Spalte + 5
        Case 6 : If Pind.6 = 0 Then Taste = Spalte + 7
      End Select
    Next
    Portd = &HFF
  Next
Locate 1 , 1
Lcd "Taste " ; Taste ; " gedrueckt"
Loop

End