#include <16F876.h>
#FUSES NOWDT, HS
#use delay(clock=20M)

#define DATA   PIN_C5
#define CLOCK  PIN_C3
#define LATCH  PIN_C2

void reloj (int x){
   output_bit(DATA,2^x);
   output_bit(CLOCK,1);
   output_bit(CLOCK,0);
   output_bit(LATCH,1);
   output_bit(LATCH,0);
}
#define LARGO 57                      //Longitud de la tabla

int const tabla[LARGO+40]={
                          0,0,0,0,0,0,0,0,              //Espacios
                          0,0,0,0,0,0,0,0,              //Espacios
                          0,0,0,0,0,0,0,0,              //Espacios
                          0,0,0,0,0,0,0,0,              //Espacios
                          0,0,0,0,0,0,0,0,              //Espacios
                          1,1,255,1,1,0,0,              //T
                          255,24,36,194,129,0,0,         //K
                          255,6,8,6,255,0,0,             //M
                          0,
                          255,6,8,6,255,0,0,             //M
                          129,129,255,129,129,0,0,       //I
                          255,17,17,241,142,0,0,         //R
                          255,145,145,145,129,0,0
                          };
void main(){
   int i,j,k;                         //Variables contadores
   while(TRUE){                       //Ciclo infinito
      for(i=0;i<LARGO;i++){           //Recorrido de tabla
         for(k=0;k<24;k++){           //Refresco de matriz
            for(j=0;j<40;j++){         //Barrido de columnas
               reloj(j);              //Columnas ponderadas
               output_b(tabla[j+i]);  //Desplazamiento de tabla
               delay_ms(1);           //Demora de multiplexado
            }  
         }
      }
   }  
}   
