Paso 4: Multiplexación por código
Para llevar a cabo la multiplexación te necesitará código de una determinada manera. Realmente no es complicado, permite decir que la fila es "dominante" sobre las columnas. Esto significa que el transistor de una fila se activa mientras que la columna de esa fila es funcionó a través de una vez. Después de mueve a la fila siguiente y hacer lo mismo una y otra vez hasta que se repite!El problema con refrescantes los LEDs suficientemente rápidos como para no aviso es que no se puede tener un sistema sincrónico. Esto significa que no puede haber retrasos que duran por un largo período de tiempo. Así que si tienes un retraso de 1 segundo, donde cada vez las filas y las columnas son sólo mostrará que uno para todo el segundo.
La forma más fácil de lograrlo es utilizar dos funciones donde uno llama al otro varias veces. Ya que en este caso las filas son "dominantes" sobre columnas tenemos dos funciones permite llamarlos:
-Display_LED()
-Column_Load()
Así que aquí está un código de sudo:
void Display_LED (char, char b, char c). Repetir dependiendo del número de filas
{
Column_Load(a);
digitalWrite (transistor_pin1, HIGH);
Delay(1);
digitalWrite (transistor_pin1, bajo);
}
Así que la función Display_LED anterior es la función de "dominante" para filas. Otra vez puede utilizar las filas o columnas como el dominante no importa. Primero llame a la función de la columna para activar los transistores o desactivar. Luego pones el transistor cierta fila alta. Tengo un breve retraso por lo que el LED está encendido para 1ms. Si se cambia a 1000ms realmente puede ver cada uno de los cambios. Eso es por qué no se pueden utilizar retrasos en el resto de su programa. Desde allí usted apaga el transistor y repetir el código con el cambio de a b y pasar a la segunda fila.
void Column_Load(char LEDs)
{
Si (LEDs_on == 0x07)
{
digitalWrite (colum1_transistor, HIGH)
digitalWrite (colum2_transistor, HIGH)
digitalWrite (colum3_transistor, HIGH)
}
}
Esta función es bastante simple, dependiendo del valor que el parámetro tiene fijar los LEDs como quiere. Si utilizas PORT_ y DDR_ es realmente más simple código a escribir que el uso de digitalWrites. En la mayoría de los casos puse el valle como un valor hexadecimal así si introducir un 0 x 03 que significa 1 LED y 3 Encienda mientras 2 está apagado.
El paso siguiente es un ejemplo de una matriz de LED 3 x 3 con las siguientes funciones anteriores. La única diferencia es las filas y columnas están invertidas.