Hola.
Con esas funciones lo que hacen es enviar los datos a los registros de desplazamiento para que se
carguen en las filas.
Para una matriz de 5x7 se puede hacer de la siguiente manera (de pronto el ejemplo te clarifica las cosas):
void visualizar(void)
{
for(i=0;i<=6;i++)
{
output_a(0);
output_c(col[i]);
output_a(row[i]);
delay_ms(1);
}
}
en donde en la variable
col[ i ]={0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF}, estan guardadas las secuencias para el desplazamiento de las filas, seria lo analogo de hacer el corrimiento con
PORTB<<1 + 1, y en la variable
row[ i ] = {14,17,17,17,31,17,17}; estaran los datos correspondientes para escribir la letra A (esto ya te lo explique antes).
Al entrar en el ciclo
for(i=0;i<=6;i++), se hace el despliegue de las variables 7 veces, es decir vamos a recorrer cada una de las 7 posiciones de las filas para forma la letra que esta guardada en la variable, una imagen vale mas cierto?:
Fila 1:
Fila2:
Fila3:
Fila4:
Fila5:
Fila6:
Fila7:
Si van a haber mas pines de columnas, obviamente no alcanzarian a mostrarse en un puerto de 8 bits (aca estoy usando 5 pines para una letra), por lo que se usan los registros de desplazamiento, ya que de esta manera sacamos los datos de forma serial y los registros se encargan de pasarlos a paralelo.
Ojala no te haya enredado mas
Saludos