Sie sind auf Seite 1von 3

Control de Matriz Esttica

Este programa sirve para demostrar el control de una matriz de 5x7 de forma esttica, se crearon 8 letras en el estndar ASCII para matrices de 5x7, la palabra escrita es "ELECTGPL " se puede modificar por cualquier letra o bien agregarle mas o quitarle algunas. El programa se realiza en dos etapas, la principal donde se realiza el multiplexado de las columnas y se muestran los valores de cada fila a una velocidad de 10ms y la interrupcin por desbordamiento del timer, dentro de la interrupcin se alojan los caracteres dentro de un switch el cual servir para ir cambiando entre cada letra, ya que al final de cada caso tiene un contador "letra++" el cual ser el valor a testear por el switch, a medida que se recorra cada una de las 5 columnas se incrementara en 1 la variable letra, de esta forma pasara al siguiente paso, por consiguiente la siguiente letra, la ultima letra en lugar de incrementar en 1, iguala a cero la variable letra, entonces comenzara de nuevo. El tiempo esta dado por set_timer1(1000), es totalmente configurable a gusto del desarrollador. Como el circuito utilizado es el ms sencillo posible para que se encienda un Led debe existir un 1 y un 0 de cada lado de la matriz, se podra haber usado el selector de columnas como 0b11111110, 0b11111101, etc... Pero para comprenderlo fcil se utilizo un 1 donde se quiere encender, para que no salga la letra negada en la matriz se utilizo el operando "~" delante del vector de las filas, de esta forma complementa el valor de la variable para que se vea correctamente. Para utilizar ms columnas debera utilizarse mas salidas, como podemos imaginarnos, podramos hacer una matriz de 8x8 con dos puertos del PIC, pero se puede hacer ms grande implementando registros de desplazamiento serie/paralelo, como el 74164, 74595, 4094, etc... Estos integrados reciben los datos de las columnas de forma serial y lo despliegan en paralelo en sus salidas, los mismos se pueden concatenar para hacer matrices ms grandes, estos integrados se controlan mediante un Clock de sincronismo, un Dato donde se enviaran los valores seriales, y un Reset que pondr el puerto paralelo de los registros a ceros.

#include <16f883.h> #fuses XT,NOWDT,NOPROTECT,PUT,NOLVP,NOMCLR,INTRC #use delay (int=4000000) int fila[5],letra=0; #INT_TIMER1

void isr() { switch(letra){ case 0: fila[0]=0b01000001; fila[1]=0b01000001; fila[2]=0b01001001; fila[3]=0b01001001; fila[4]=0b01111111; letra++; break; case 1: fila[0]=0b00000001; fila[1]=0b00000001; fila[2]=0b00000001; fila[3]=0b00000001; fila[4]=0b01111111; letra++; break; case 2: fila[0]=0b01000001; fila[1]=0b01000001; fila[2]=0b01001001; fila[3]=0b01001001; fila[4]=0b01111111; letra++; break; case 3: fila[0]=0b01000001; fila[1]=0b01000001; fila[2]=0b01000001; fila[3]=0b01000001; fila[4]=0b00111110; letra++; break; case 4: fila[0]=0b01000000; fila[1]=0b01000000; fila[2]=0b01111111; fila[3]=0b01000000; fila[4]=0b01000000; letra++; break; case 5: fila[0]=0b00000110; fila[1]=0b01001001; fila[2]=0b01001001; fila[3]=0b01000001; fila[4]=0b00111110; letra++; break; case 6: fila[0]=0b00110000; fila[1]=0b01001000; fila[2]=0b01001000; fila[3]=0b01001000; fila[4]=0b01111111; letra++; break; case 7: fila[0]=0b00000001; fila[1]=0b00000001; fila[2]=0b00000001; fila[3]=0b00000001; fila[4]=0b01111111;

letra++; break; case 8: fila[0]=0b00000000; fila[1]=0b00000000; fila[2]=0b00000000; fila[3]=0b00000000; fila[4]=0b00000000; letra = 0; break; } set_timer1(1000); } void main(void) { enable_interrupts(INT_TIMER1); setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); set_timer1(65535); enable_interrupts(GLOBAL); set_tris_c(0x00); set_tris_a(0x00); while(TRUE){ output_a(0b00000001); output_c(~fila[0]); delay_ms(10); output_a(0b00000010); output_c(~fila[1]); delay_ms(10); output_a(0b00000100); output_c(~fila[2]); delay_ms(10); output_a(0b00001000); output_c(~fila[3]); delay_ms(10); output_a(0b00010000); output_c(~fila[4]); delay_ms(10); } }

Das könnte Ihnen auch gefallen