Hola, Yo he empleado esta técnica y me ha funcionado muy bien.
Debes conectar las filas del teclado a 4 puertos KBI (Puerto A) y las columnas a otro puerto (Puerto C por ejemplo)
Debes activas el KBI y sus interrupciones, y definir el puerto C como salida, con los 4 bits conectados al teclado con el valor de cero.
En el momento que se pulse una tecla el se activara la interrupción del teclado, en la atención de la interrupción lo primero que debes hacer, es inlcuir un retardo de aprox 30 ms para eliminar los rebotes, luego guarda el el puerto A, para saber que fila fue pulsada, para saber que columna debes hacer lo siguiente.
1) Borra el flag de la interrupción
2)COmienza a hacer un barrido por los 4 bits del puerto C que usaste
0111; 1011 ; 1101; 1110 ;
3) Depués de cada cambio utiliar una instrucción para saber si se volvio a setear el flag de interrupción, cuando esto ocurra significa que el bit que esta en cero del puerto C, corresponde a la columna del teclado
4) Con el valor del puerto a guardado, ocurre lo mismo, el bit que estaba en cero corresponde a la fila pulsada, y con fila y columna puedes determinar que tecla se pulso.
Espero que te resulte de ayuda