La mejor forma de cargar las filas(y la mas rapida) es haciendo lo siguiente:
(supongo que la fila a encender se conecta a los anodos de los LEDs. Es decir, un 1 "conecta", un 0 "desconecta" la fila).
Cargar inicialmente el valor 00000000 00000000 en los registros por unica vez.
En el primer refresco, cargar solo un 1. Esto produce que en los registros se refleje el valor: 10000000 00000000
En el segundo, cargar un 0. Esto produce: 01000000 00000000
En el tercero, cargar otro 0. Esto produce: 00100000 00000000
Continuar inyectando ceros, hasta que sea turno de la primera fila nuevamente. En aquel momento debera inyectarse nuevamente otro 1.
Algoritmicamente:
Si fila es una variable que se incrementa cada vez que es momento de refrescar la proxima fila:
Cuando el programa inicia, cargar el valor 0x0000 en los registros de las filas para apagar todo e inicializar el estado logico de la matriz.
Dentro de la rutina de refresco de fila:
Si fila=0 inyecto un 1; sino inyecto un 0.
Si fila es menor a 16, incremento fila. Sino fila=0
Deberia funcionar y creo que es lo mas eficaz.