#INCLUDE <16F88.H>
#FUSES HS,NOWDT,NOMCLR
#USE DELAY(CLOCK=20000000)
#USE I2C(Master,SDA=PIN_A3,SCL=PIN_A4)
#BYTE ANSEL=0X9B
#BYTE PORTB=0X06
#BIT CLK=0X05.0
#BIT DS=0X05.1
#BIT ST=0X05.2
CONST INT8 Fila[8]={1,2,4,8,16,32,64,128};
CONST CHAR MSJ[35]="VERANO 2016 CON FUERZA DIGITALES 3";
INT8 P[24],L[7];
INT8 I,J,K,M,TL;
INT16 T,N;
VOID ESCRIBE_EEPROM(INT16 ADDRESS, INT8 DATO)
{
I2C_START(); //Inicio de la transmisión...
I2C_WRITE(0xA0); //... con la dirección I2C correspondiente a la eeprom en modo escritura
I2C_WRITE(ADDRESS>>8); //Envío parte alta dirección
I2C_WRITE(ADDRESS); //Envío parte baja direción
I2C_WRITE(dato); //Envío del dato
I2C_STOP(); //Finalización de la transmisión
}
INT8 LEE_EEPROM(INT16 ADDRESS)
{
INT8 DATO;
I2C_START(); //Inicio de la transmisión...
I2C_WRITE(0xA0); //...con la dirección correspondiente a la eeprom en modo escritura
I2C_WRITE(ADDRESS>>8); //Envío parte alta dirección
I2C_WRITE(ADDRESS); //Envío parte baja dirección
I2C_START(); //Reinicio...
I2C_WRITE(0xA1); //...con eeprom en modo lectura
DATO=I2C_READ(0); //Lectura del dato de la dirección enviada
I2C_STOP(); //Fin de la transmisión
RETURN(DATO); //La función devuelve el dato leído
}
VOID CODIFICA(char LETRA)
{
SWITCH (LETRA)
{
CASE 'A':
TL=8;
L[0]=0; L[1]=127; L[2]=255; L[3]=204; L[4]=204; L[5]=255; L[6]=127; L[7]=0;
BREAK;
CASE 'B':
TL=8;
L[0]=0; L[1]=255; L[2]=255; L[3]=219; L[4]=219; L[5]=255; L[6]=102; L[7]=0;
BREAK;
CASE 'C':
TL=8;
L[0]=0; L[1]=126; L[2]=255; L[3]=195; L[4]=195; L[5]=195; L[6]=195; L[7]=0;
BREAK;
CASE 'D':
TL=8;
L[0]=0; L[1]=255; L[2]=255; L[3]=195; L[4]=195; L[5]=255; L[6]=126; L[7]=0;
BREAK;
CASE 'E':
TL=8;
L[0]=0; L[1]=255; L[2]=255; L[3]=219; L[4]=219; L[5]=219; L[6]=195; L[7]=0;
BREAK;
CASE 'F':
TL=8;
L[0]=0; L[1]=255; L[2]=255; L[3]=216; L[4]=216; L[5]=216; L[6]=192; L[7]=0;
BREAK;
CASE 'G':
TL=9;
L[0]=0; L[1]=126; L[2]=255; L[3]=195; L[4]=219; L[5]=219; L[6]=223; L[7]=30; L[8]=0;
BREAK;
CASE 'H':
TL=8;
L[0]=0; L[1]=255; L[2]=255; L[3]=24; L[4]=24; L[5]=255; L[6]=255; L[7]=0;
BREAK;
CASE 'I':
TL=8;
L[0]=0; L[1]=195; L[2]=195; L[3]=255; L[4]=255; L[5]=195; L[6]=195; L[7]=0;
BREAK;
CASE 'J':
TL=9;
L[0]=0; L[1]=6; L[2]=199; L[3]=195; L[4]=255; L[5]=254; L[6]=192; L[7]=192; L[8]=0;
BREAK;
CASE 'K':
TL=8;
L[0]=0; L[1]=255; L[2]=255; L[3]=24; L[4]=60; L[5]=103; L[6]=195; L[7]=0;
BREAK;
CASE 'L':
TL=8;
L[0]=0; L[1]=255; L[2]=255; L[3]=3; L[4]=3; L[5]=3; L[6]=3; L[7]=0;
BREAK;
CASE 'M':
TL=9;
L[0]=0; L[1]=255; L[2]=127; L[3]=48; L[4]=24; L[5]=48; L[6]=127; L[7]=255; L[8]=0;
BREAK;
CASE 'N':
TL=9;
L[0]=0; L[1]=255; L[2]=127; L[3]=56; L[4]=28; L[5]=14; L[6]=255; L[7]=255; L[8]=0;
BREAK;
CASE 'Ñ':
TL=8;
L[0]=0; L[1]=127; L[2]=191; L[3]=156; L[4]=142; L[5]=127; L[6]=127; L[7]=0;
BREAK;
CASE 'O':
TL=8;
L[0]=0; L[1]=126; L[2]=255; L[3]=195; L[4]=195; L[5]=255; L[6]=126; L[7]=0;
BREAK;
CASE 'P':
TL=8;
L[0]=0; L[1]=255; L[2]=255; L[3]=204; L[4]=204; L[5]=252; L[6]=120; L[7]=0;
BREAK;
CASE 'Q':
TL=9;
L[0]=0; L[1]=126; L[2]=255; L[3]=195; L[4]=199; L[5]=255; L[6]=126; L[7]=3; L[8]=0;
BREAK;
CASE 'R':
TL=8;
L[0]=0; L[1]=255; L[2]=255; L[3]=204; L[4]=206; L[5]=251; L[6]=113; L[7]=0;
BREAK;
CASE 'S':
TL=8;
L[0]=0; L[1]=114; L[2]=251; L[3]=219; L[4]=219; L[5]=223; L[6]=78; L[7]=0;
BREAK;
CASE 'T':
TL=8;
L[0]=0; L[1]=192; L[2]=192; L[3]=255; L[4]=255; L[5]=192; L[6]=192; L[7]=0;
BREAK;
CASE 'U':
TL=8;
L[0]=0; L[1]=254; L[2]=255; L[3]=3; L[4]=3; L[5]=255; L[6]=254; L[7]=0;
BREAK;
CASE 'V':
TL=8;
L[0]=0; L[1]=252; L[2]=254; L[3]=3; L[4]=3; L[5]=254; L[6]=252; L[7]=0;
BREAK;
CASE 'W':
TL=9;
L[0]=0; L[1]=255; L[2]=255; L[3]=6; L[4]=12; L[5]=6; L[6]=255; L[7]=255; L[8]=0;
BREAK;
CASE 'X':
TL=9;
L[0]=0; L[1]=195; L[2]=231; L[3]=60; L[4]=24; L[5]=60; L[6]=231; L[7]=195; L[8]=0;
BREAK;
CASE 'Y':
TL=8;
L[0]=0; L[1]=224; L[2]=240; L[3]=63; L[4]=63; L[5]=240; L[6]=224; L[7]=0;
BREAK;
CASE 'Z':
TL=8;
L[0]=0; L[1]=195; L[2]=199; L[3]=207; L[4]=219; L[5]=243; L[6]=231; L[7]=0;
BREAK;
CASE '0':
TL=8;
L[0]=0; L[1]=126; L[2]=255; L[3]=203; L[4]=211; L[5]=255; L[6]=126; L[7]=0;
BREAK;
CASE '1':
TL=6;
L[0]=0; L[1]=32; L[2]=96; L[3]=255; L[4]=255; L[5]=0;
BREAK;
CASE '2':
TL=8;
L[0]=0; L[1]=99; L[2]=231; L[3]=207; L[4]=219; L[5]=243; L[6]=99; L[7]=0;
BREAK;
CASE '3':
TL=8;
L[0]=0; L[1]=195; L[2]=219; L[3]=219; L[4]=219; L[5]=255; L[6]=102; L[7]=0;
BREAK;
CASE '4':
TL=8;
L[0]=0; L[1]=248; L[2]=248; L[3]=24; L[4]=24; L[5]=255; L[6]=255; L[7]=0;
BREAK;
CASE '5':
TL=8;
L[0]=0; L[1]=251; L[2]=251; L[3]=219; L[4]=219; L[5]=223; L[6]=206; L[7]=0;
BREAK;
CASE '6':
TL=8;
L[0]=0; L[1]=62; L[2]=127; L[3]=251; L[4]=219; L[5]=223; L[6]=206; L[7]=0;
BREAK;
CASE '7':
TL=8;
L[0]=0; L[1]=192; L[2]=192; L[3]=207; L[4]=223; L[5]=240; L[6]=224; L[7]=0;
BREAK;
CASE '8':
TL=8;
L[0]=0; L[1]=118; L[2]=255; L[3]=219; L[4]=219; L[5]=255; L[6]=118; L[7]=0;
BREAK;
CASE '9':
TL=8;
L[0]=0; L[1]=112; L[2]=248; L[3]=217; L[4]=219; L[5]=255; L[6]=126; L[7]=0;
BREAK;
CASE ' ':
TL=4;
L[0]=0; L[1]=0; L[2]=0; L[3]=0;
BREAK;
}
}
VOID MAIN()
{
SET_TRIS_A(0);
SET_TRIS_B(0);
ANSEL=0;
M=32;
T=0;
FOR(K=0;K<=33;K++)
{
CODIFICA(MSJ[K]);
FOR(I=0;I<TL;I++)
{
ESCRIBE_EEPROM(T,L[I]);
T=T+1;
DELAY_MS(10);
}
}
N=T;
DO
{
FOR(T=1;T<=N+M+20;T++)
{
FOR(K=M-1;K>=1;K--)
{
P[K]=P[K-1];
}
IF(T<=N)
P[0]=LEE_EEPROM(T-1);
ELSE
P[0]=0;
FOR(K=1;K<=10;K++)
{
FOR(I=1;I<=8;I++)
{
FOR(J=M;J>=1;J--)
{
IF(T>=J && T<J+N)
DS=BIT_TEST(P[J-1],I-1);
//DS=1-BIT_TEST(P[J-1],I-1);
ELSE
DS=0;
//DS=1;
CLK=0; DELAY_US(2); CLK=1;
}
PORTB=255;
ST=0; DELAY_US(2); ST=1;
PORTB=255-Fila[I-1];
//DELAY_MS(1);
}
}
}
}WHILE(TRUE);
}[attachment id=1 msg=380908][attachment id=1 msg=380908]