You are on page 1of 6

//Device/Fuses/Etc.--------------------------------#INCLUDE <16F628A.

H>
#INCLUDE <MATH.H>
#FUSES NOWDT
//No Watch Dog Timer
#FUSES XT
#FUSES NOPUT
//No Power Up Timer
#FUSES NOPROTECT
//Code not protected from reading
#FUSES NOBROWNOUT
//No brownout reset
//#FUSES NOMCLR
//Master Clear pin used for I/O
#FUSES NOLVP
//No low voltage prgming, B3(PIC16) or B5(PIC18)
used for I/O
#FUSES NOCPD
//No EE protection
#use delay(clock=4000000)
//Configuracion de los puertos-------------------------------------------------#BYTE PORTA = 0x05
#BYTE PORTB = 0x06
#BYTE PORTA_TRIS = 0x85
#BYTE PORTB_TRIS = 0x86
//Configuracion de los pines usados para el registro de desplazamiento---------#DEFINE RDD_DATA PIN_A1
#DEFINE RDD_CLOCK PIN_A0
//Configuracion de los pines usados para la EEPROM-----------------------------#DEFINE EEPROM_SCL PIN_A2
#DEFINE EEPROM_SDA PIN_A3
#use i2c(master, sda=EEPROM_SDA, scl=EEPROM_SCL)
#define EEPROM_ADDRESS long int
//Funciones utilizadas---------------------------------------------------------void fConfigurar_puertos(void);
void fRDD_send_data0(void);
void fRDD_send_data1(void);
void fRDD_send_byte1(int);
void fRDD_send_byte2(int);
void init_ext_eeprom();
void write_ext_eeprom(long int address, BYTE data);
int8 read_ext_eeprom(long int address);
void Inicializa(void);
void EscribeLetra(char ch);
//Main-------------------------------------------------------------------------void main(){
int8 i;
fConfigurar_puertos();
init_ext_eeprom(); //Inicializo la EEPROM
output_low(RDD_CLOCK); //RELOJ = Bajo
output_low(RDD_DATA);
while (TRUE){
Inicializa();
}//Fin while
}//Fin main
//- FUNCIONES--------------------------------------void fConfigurar_puertos(void){
PORTA_TRIS = 0b11000000; //1=ENTRADA, 0=SALIDA

PORTB_TRIS = 0b00000000; //1=ENTRADA, 0=SALIDA


setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
}
void fRDD_send_data0(void){
output_low(RDD_DATA);
//delay_us(2);
output_low(RDD_CLOCK);
//delay_us(2);
output_high(RDD_CLOCK);
}
void fRDD_send_data1(void){
output_high(RDD_DATA);
//delay_us(2);
output_low(RDD_CLOCK);
//delay_us(2);
output_high(RDD_CLOCK);
}
void init_ext_eeprom()
{
output_float(EEPROM_SCL);
output_float(EEPROM_SDA);
}
void write_ext_eeprom(long int address, BYTE data)
{
short int status;
i2c_start();
i2c_write(0xa0);
i2c_write(address>>8);
i2c_write(address);
i2c_write(data);
i2c_stop();
i2c_start();
status=i2c_write(0xa0);
while(status==1)
{
i2c_start();
status=i2c_write(0xa0);
}
}
int8 read_ext_eeprom(long int address)
{
BYTE data;
i2c_start();
i2c_write(0xa0);
i2c_write(address>>8);
i2c_write(address);
i2c_start();
i2c_write(0xa1);
data=i2c_read(0);
i2c_stop();
return(data);
}

void Inicializa()
{
char frase[16] = { 'D', 'H', 'G', ' ','@',' ', 'L', 'E', 'D', 'S' };
int i;
for (i=0; i<14; i++)
{
EscribeLetra(frase[i]);
delay_ms(100);
//PORTB = 255; //Filas apagadas.
}
}
void EscribeLetra(char ch)
{
int tabla[8]={0,0,0,0,0,0,0,0};
int i=0, j=0, tiempo;
int fila[8] = {254,253,251,247,239,223,191,127};
switch(ch)
{
case '@':
tabla[0] = 0x7e; tabla[1] =0x81; tabla[2] =0x99;
9; tabla[4] =0xaa; tabla[5] =0x9c; tabla[6] =0x81; tabla[7] =0x7e;
break;
case ' ':
tabla[0] = 0; tabla[1] =0; tabla[2] =0; tabla[3]
=0; tabla[5] =0; tabla[6] =0; tabla[7] =0;
break;
case 'A':
tabla[0] = 0x7E; tabla[1] =0xFF; tabla[2] =0xC3;
3; tabla[4] =0xFF; tabla[5] =0xFF; tabla[6] =0xC3; tabla[7] =0xC3;
break;
case 'B':
tabla[0] = 0xFE; tabla[1] =0xC3; tabla[2] =0xC3;
E; tabla[4] =0xC3; tabla[5] =0xC3; tabla[6] =0xC3; tabla[7] =0xFE;
break;
case 'C':
tabla[0] = 0x7F; tabla[1] =0xFF; tabla[2] =0xC0;
0; tabla[4] =0xC0; tabla[5] =0xC0; tabla[6] =0xFF; tabla[7] =0x7F;
break;
case 'D':
tabla[0] = 0xFE; tabla[1] =0xFF; tabla[2] =0xC3;
3; tabla[4] =0xC3; tabla[5] =0xC3; tabla[6] =0xFF; tabla[7] =0xFE;
break;
case 'E':
tabla[0] = 0xFF; tabla[1] =0xFF; tabla[2] =0xC0;
C; tabla[4] =0xFC; tabla[5] =0xC0; tabla[6] =0xFF; tabla[7] =0xFF;
break;
case 'F':
tabla[0] = 0xFF; tabla[1] =0xFF; tabla[2] =0xC0;
0; tabla[4] =0xFC; tabla[5] =0xFC; tabla[6] =0xC0; tabla[7] =0xC0;
break;
case 'G':
tabla[0] = 0x7E; tabla[1] =0xFF; tabla[2] =0xC0;
0; tabla[4] =0xCF; tabla[5] =0xC3; tabla[6] =0xFF; tabla[7] =0x7E;
break;
case 'H':
tabla[0] = 0xC3; tabla[1] =0xC3; tabla[2] =0xC3;
F; tabla[4] =0xFF; tabla[5] =0xC3; tabla[6] =0xC3; tabla[7] =0xC3;
break;

tabla[3] =0xa

=0; tabla[4]

tabla[3] =0xC

tabla[3] =0xF

tabla[3] =0xC

tabla[3] =0xC

tabla[3] =0xF

tabla[3] =0xC

tabla[3] =0xC

tabla[3] =0xF

case 'I':
tabla[0] = 0xFF; tabla[1] =0xFF; tabla[2] =0x18; tabla[3] =0x1
8; tabla[4] =0x18; tabla[5] =0x18; tabla[6] =0xFF; tabla[7] =0xFF;
break;
case 'J':
tabla[0] = 0xFF; tabla[1] =0xFF; tabla[2] =0x18; tabla[3] =0x1
8; tabla[4] =0x18; tabla[5] =0x98; tabla[6] =0xF8; tabla[7] =0x78;
break;
case 'K':
tabla[0] = 0xC3; tabla[1] = 0xC6; tabla[2] = 0xCC; tabla[3] =
0xF0; tabla[4] = 0xF0; tabla[5] = 0xCC; tabla[6] = 0xC6; tabla[7] = 0xC3;
break;
case 'L':
tabla[0] =0xC0; tabla[1] =0xC0;tabla[2] = 0xC0; tabla[3] = 0xC
0; tabla[4] = 0xC0;tabla[5] = 0xC0;tabla[6] = 0xFF; tabla[7] = 0xFF;
break;
case 'M':
tabla[0] =0xC3; tabla[1] =0xE7;tabla[2] = 0xFF; tabla[3] = 0xD
B; tabla[4] = 0xC3;tabla[5] = 0xC3;tabla[6] = 0xC3; tabla[7] = 0xC3;
break;
case 'N':
tabla[0] =0xC3; tabla[1] =0xE3;tabla[2] = 0xF3; tabla[3] = 0xD
b; tabla[4] = 0xCf;tabla[5] = 0xC7;tabla[6] = 0xC3; tabla[7] = 0xC3;
break;
case '':
tabla[0] =0x3C; tabla[1] =0x00;tabla[2] = 0xE3; tabla[3] = 0xF
3; tabla[4] = 0xDB;tabla[5] = 0xCF;tabla[6] = 0xC7; tabla[7] = 0xC3;
break;
case 'O':
tabla[0] =0x7E; tabla[1] =0xFF;tabla[2] = 0xC3; tabla[3] = 0xC
3; tabla[4] = 0xC3;tabla[5] = 0xC3;tabla[6] = 0xFF; tabla[7] = 0x7E;
break;
case 'P':
tabla[0] =0xFE; tabla[1] =0xFF;tabla[2] = 0xC3; tabla[3] = 0xF
F; tabla[4] = 0xFE;tabla[5] = 0xC0;tabla[6] = 0xC0; tabla[7] = 0xCE;
break;
case 'Q':
tabla[0] =0x7E; tabla[1] =0xE7;tabla[2] = 0xC3; tabla[3] = 0xC
3; tabla[4] = 0xC3;tabla[5] = 0xC3;tabla[6] = 0xCC; tabla[7] = 0x7B;
break;
case 'R':
tabla[0] =0xFE; tabla[1] =0xFF;tabla[2] = 0xC3; tabla[3] = 0xF
E; tabla[4] = 0xF8;tabla[5] = 0xCC;tabla[6] = 0xC6; tabla[7] = 0xC3;
break;
case 'S':
tabla[0] =0x7E; tabla[1] =0xFF;tabla[2] = 0xC0; tabla[3] = 0x3
8; tabla[4] = 0x0E;tabla[5] = 0x03;tabla[6] = 0xFF; tabla[7] = 0x7E;
break;
case 'T':
tabla[0] =0xFF; tabla[1] =0xFF;tabla[2] = 0x18; tabla[3] = 0x1
8; tabla[4] = 0x18;tabla[5] = 0x18;tabla[6] = 0x18; tabla[7] = 0x18;
break;
case 'U':
tabla[0] =0xC3; tabla[1] =0xC3;tabla[2] = 0xC3; tabla[3] = 0xC
3; tabla[4] = 0xC3;tabla[5] = 0xC3;tabla[6] = 0xFF; tabla[7] = 0x7E;
break;
case 'V':
tabla[0] =0xC3; tabla[1] =0xC3;tabla[2] = 0xC3; tabla[3] = 0xC
3; tabla[4] = 0xC3;tabla[5] = 0x66;tabla[6] = 0x3C; tabla[7] = 0x18;
break;

3; tabla[4]

6; tabla[4]

6; tabla[4]

C; tabla[4]

case 'W':
tabla[0] =0xC3; tabla[1] =0xC3;tabla[2] = 0xC3; tabla[3]
= 0xC3;tabla[5] = 0xDB;tabla[6] = 0xDB; tabla[7] = 0x66;
break;
case 'X':
tabla[0] =0xC3; tabla[1] =0xC3;tabla[2] = 0xC3; tabla[3]
= 0x3C;tabla[5] = 0x66;tabla[6] = 0xC3; tabla[7] = 0xC3;
break;
case 'Y':
tabla[0] =0xC3; tabla[1] =0xC3;tabla[2] = 0x66; tabla[3]
= 0x18;tabla[5] = 0x18;tabla[6] = 0x18; tabla[7] = 0x18;
break;
case 'Z':
tabla[0] =0xFF; tabla[1] =0xFF;tabla[2] = 0x03; tabla[3]
= 0x30;tabla[5] = 0xC0;tabla[6] = 0xFF; tabla[7] = 0xFF;
break;

= 0xC

= 0x6

= 0x6

= 0x0

}
//Leo el valor del tiempo que tengo que mostrar esta imagen
tiempo = 50;
//Bucle que muestra la imagen "tiempo veces"
for (i=1;i<=tiempo;i++) {
for (j=0;j<8;j++) {
PORTB = 255; //Filas apagadas.
//escribo registro desplazamiento
fRDD_send_byte1(tabla[j]);
//Enciendo la fila correspondiente
PORTB = fila[j];
delay_ms(1);
}
PORTB = 255; //Filas apagadas.
//delay_ms(1);
}
}

//--- Envia un byte al registro de desplazamiento - NORMAL--------------------void fRDD_send_byte1(int valor){


int i;
//Escribo el valor en el registro de desplazamiento
for (i=0;i<8;i++) {
if (bit_test(valor, i) == 1) { fRDD_send_data0(); }
if (bit_test(valor, i) == 0) { fRDD_send_data1(); }
}
}
//--- Envia un byte al registro de desplazamiento - VIDEO INVERSO -------------void fRDD_send_byte2(int valor){
int i;
//Escribo el valor en el registro de desplazamiento
for (i=0;i<8;i++) {
if (bit_test(valor, i) == 1) { fRDD_send_data1(); }
if (bit_test(valor, i) == 0) { fRDD_send_data0(); }
}

You might also like