Para hacerlo un poco mas claro y que arranques con pruebas mas pequeñas, te vpoy a explicar el paso a paso de como controlar una matriz de led... Mirá, este articulo originalmente lo escribi para picaxe, pero como estos son programados en un basic, no creoque tengas problema alguno en modificarlo para llevarlo a tus necesidades; O sea, la base de este articulo, es valida para cualqier programacion...
arranquemos:
Como controlar una pantalla del tipo matriz de LED
En otro articulo, ya hemos estado viendo un poco de lo que refiere el control matricial; Concretamente, aprendimos como controlar un teclado matricial, y tomando como base aquel proyecto, seguiremos abordando el tema de control de matrices, pero con un proyecto aun mas ambicioso… “La creación de una simple pantalla matricial a Leds”.
Si bien, se podría implementar un puerto para cada LED, esto nos llevaría a requerir de un microcontrolador con varios puertos y a su vez, estaríamos desperdiciando un microcontrolador, ya que la cantidad de puertos empleados para controlar el hardware de la pantalla, serian muchos y no aprovecharíamos su máximo rendimiento para emplearlo en mas de una cosa; Es por ello, que en este articulo, aprenderemos otro método mas de control matricial, que se lo denomina “control por multiplexacion”.
Una matriz es una tabla rectangular de números ordenados por filas y columnas. Para nuestro caso, tenemos una matriz con lógica binaria; Es decir, los valores de la matriz, pueden varían entre 1 y 0 lógico (encendido, 0 apagado).

Si nos vamos a la estructura interna de las pantallas a led, sencillamente lo que podemos encontrar en la gran mayoría de estos hardware, es un arreglo de LED conectados en filas y columnas (ver imagen inferior); que por esta misma razón, se los llama y o denomina, Pantallas Matriciales.
ANÁLISIS DE CIRCUITO
El control multiplexado de una matriz de 49 LEDs (o sea, una matriz como la de nuestro ejemplo, pero puede ser de mas o menos leds), es muy sencilla y sólo requiere un truco; La implementación del método de “persistencia de la visión”, que en si, es un sencillo efecto visual, donde son tan rápidas las conmutaciones de los Leds, que el ojo no percibe estos cambios y podemos ver figuras, números, letras, etc, en la pantalla.
O sea, lo que hacemos, es encender y apagar repetidas veces cada led afectado a la figura a una velocidad importante, y el ojo no notara el parpadeo de los led, todo lo contrario; Solo vera la figura formada por los led que se encendieron.
Notaran que mencione que nuestra matriz esta compuesta por 49 led… Bien, como el
picaxe18x tan solo posee 8 salidas digitales, nos estarían faltando, supuestamente, 6 u 7 salidas mas para poder crear nuestra matriz de 49 leds ; Para que esto ultimo no sea un impedimento en la creación de nuestro proyecto, observemos el siguiente diagrama de circuito, para ver como resolvimos nuestro pequeño dilema.

Como verán, para obtener estas salidas que nos estaban faltando, recurrimos a un circuito integrado que trabajara como auxiliar en nuestro proyecto. Este CI, es un contador Johnson (CD4017); Y básicamente, tiene la función de activar sus salidas en forma lineal, a cada pulso de reloj que tenga en su entrada. O sea, cuando recibe el 1er pulso de reloj este circuito integrado, activa la salida1, al siguiente pulso de reloj, desactiva la salida1 y activa la salida2, y así sucesivamente hasta que sea reseteado. Digamos que es ideal para nuestra aplicación, ya que nosotros solo deseamos que active una fila por vez.
Como la corriente del CD4017 es muy baja (1mA) y nosotros requerimos de una corriente de 60mA por columna; En serie a las salidas de nuestro contador Johnson, hemos implementado un circuito integrado mas a nuestro diseño, que es un Array de transistores (algo así como implementar dos transistores en configuración darlington para cada salida, pero mas reducido en un solo IC).
La implementación del ULN2803, es para obtener más corriente a través de los LEDs (este nos entrega 500mA), y si bien podría implementar un par de transistores NPN, resolví implementar este IC por una cuestión cómoda a la hora de diseñar nuestro PCB (ocupa mucho menos espacio).
INTRODUCCIÓN A LA PROGRAMACION
La rutina de control, es relativamente simple y fácil de seguir.
Primero que nada, debemos definir nuestros caracteres y o imágenes a imprimir en la pantalla de leds.
Para ello, dibujaremos una cuadricula que sea similar a nuestra matriz, y dentro de cada circulo, le asignaremos un valor absoluto hasta formar nuestra imagen...

Luego, tomaremos el valor de cada fila, y esos valores, serán los bits de cada puerto a la hora de controlar nuestro picaxe.
Por ejemplo, si tenemos la siguiente situación (dibujaremos la letra “X”):

Una vez que ya tenemos lista la tabla con los valores que adoptara cada salida, para formar la figura; Tomaremos estos valores y los introduciremos en nuestro programa del picaxe, de la siguiente manera…

Como podemos deducir en el programa, para habilitar cada fila, primero vamos al
subprograma “clock4017” (recordar que en cada pulso de reloj, este CI, desplaza sus salidas linealmente, o sea, va encendiendo y apagando sus salidas en un orden especifico).
Una vez que habilitamos la fila, volvemos al programa principal, y daremos la orden de que led deben encenderse y cuales no , osea, habilitaremos las columnas que deseemos (esto lo hacemos sencillamente con la función “let pins” mas el valor obtenido en la tabla que creamos anteriormente).
El resto del programa, básicamente es lo mismo. Volvemos a repetir los pasos para mandar el pulso de clock en el CD4017, y luego daremos la orden de que columnas queremos encender… Veamos este mismo ejemplo, un poco mas grafico:
Y así sucesivamente hasta formar la imagen…
La idea, es entrar en un bucle de parpadeos continuo, que contengan pequeños retardos para que se pueda crear el efecto visual.
El retardo mínimo que podemos emplear en la señal clock del CD4017, es de 20mS y para poder obtener el efecto visual sin notar las conmutaciones de los Leds, deberemos jugar con los valores de b2; cuando mas rápido sea el ciclo mejor.
Recuerden siempre que, las salidas de nuestro picaxe, dicen que led se enciende o no, en cada columna; y el CD4017, es el encargado de habilitar cada fila. Con estos dos importantes datos, de seguro muchos proyectos podrán comenzar a crear.

Cabe destacar, que esto mismo se puede hacer con circuitos integrados especificos (
un desplazador de registro, uno o dos 4017, dos 555,etc )
Espero poder aclarar toda duda con esto ultimo, salu2