#include <16F84A.h>
#fuses XT, NOWDT, NOPROTECT
#use delay(clock=4000000)

#byte PORTA = 0x05
#byte PORTB = 0x06
#byte PORTA_TRIS = 0x85
#byte PORTB_TRIS = 0x86

#define RDD_DATA  PIN_A1
#define RDD_CLOCK PIN_A0

   int8 G[8]={0x3E,0x7E,0x60,0x6E,0x66,0x66,0x7E,0x3E};
   int8 E[8]={0x7E,0x7E,0x60,0x78,0x78,0x60,0x7E,0x7E};
   int8 R[8]={0x7C,0x66,0x66,0x7C,0x78,0x6C,0x66,0x62};
   int8 A[8]={0x18,0x3C,0x66,0x66,0x7E,0x7E,0x66,0x66};
//   int8 guion[8]={0x00,0x00,0x00,0x3C,0x3C,0x00,0x00,0x00};
   
void enviar_bit(int1 bit)
{
   output_bit(RDD_DATA,bit);
   output_low(RDD_CLOCK);
   output_high(RDD_CLOCK);
}
void enviar_byte(int8 caracter)
{
   int8 i;
   for(i=0;i<8;i++)
   {
      enviar_bit(!bit_test(caracter,i));  //ACA LO NEGAMOS
   }
}
void dibujar_mat(int8 *matriz,int tiempo)
{
   int i,fila[8]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
   while(tiempo--)
   {
      for (i=0;i<8;i++)
      {
         PORTB = 0xFF; //Filas apagadas.
         enviar_byte(matriz[i]);
         PORTB = fila[i];
         delay_ms(1);
      }
      PORTB = 0xFF; //Filas apagadas.
   }
}

void desplazar(int8 letra1[],int8 letra2[])
{
   int fila,i,matriz[8];
   for(i=0;i<8;i++)
   {
      for(fila=0;fila<8;fila++)
      {
         matriz[fila]=letra1[fila]<<i | letra2[fila]>>(8-i);
      }
      dibujar_mat(matriz,10);
   }
}

void main()
{
   PORTA_TRIS = 0x00;
   PORTB_TRIS = 0x00;

   output_low(RDD_CLOCK);
   output_low(RDD_DATA);
   PORTB=0x00;
   
   while (TRUE)
   {
      desplazar(G,E);
      desplazar(E,R);
      desplazar(R,A);
      desplazar(A,G);
//      desplazar(A,guion);
//      desplazar(guion,G);
   }
}
