#include <16F876.h>
#FUSES NOWDT, HS
#use delay(clock=20M)

#define DATA   PIN_C5
#define CLOCK  PIN_C3
#define LATCH  PIN_C2
#define MAS PIN_A2
#define MODE PIN_A3
#define MENOS PIN_A4



int letras [27][7] = {{254,17,17,17,254,0,0},              //A1
                     {129,255,145,145,145,110,0},       //B2
                     {126,129,129,129,66,0,0},            //C3
                     {129,255,129,129,66,60,0},         //D4
                     {255,145,145,145,129,0,0},           //E5
                     {255,17,17,17,1,0,0},                //F6
                     {255,129,153,137,241,0,0},           //G7
                     {255,16,16,16,255,0,0},              //H8
                     {129,129,255,129,129,0,0},           //I9
                     {96,129,129,255,1,1,0},            //J10
                     {255,24,36,194,129,0,0},             //K11
                     {255,128,128,128,128,0,0},           //L12
                     {255,6,8,6,255,0,0},                 //M13
                     {255,6,24,96,255,0,0},               //N14
                     {255,25,49,193,253,0,0},             //Ñ15
                     {126,129,129,129,126,0,0},           //O16
                     {255,17,17,17,14,0,0},               //P17
                     {126,129,177,65,190,128,0},        //Q18
                     {255,17,17,241,142,0,0},             //R19
                     {142,145,145,145,97,0,0},            //S20
                     {1,1,255,1,1,0,0},                   //T21
                     {127,128,128,128,127,0,0},           //U22
                     {31,96,128,96,31,0,0},               //V23
                     {255,64,32,64,255,0,0},              //W24
                     {195,36,24,36,195,0,0},              //X25
                     {7,12,248,12,7,0,0},                 //Y26
                     {193,161,145,137,135,0,0 }};         //Z27

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);
}

void main(){
   int i,j,k,l;                         //Variables contadores
   while(TRUE){                       //Ciclo infinito
      for(l=0;l<7;l++){           //Recorrido de tabla
         for(k=0;k<velocidad;k++){           //Refresco de matriz(velocidad)
            for(i=0;i<10;i++){         //Barrido de columnas
               for(j=0;j<7;j++){
                  reloj(j);              //Columnas ponderadas
                  output_b(letras[i+l][j+l]);  //Desplazamiento de tabla
                  delay_ms(1);           //Demora de multiplexado
               }
            }  
         }
      }
   }  
}   