libreria big_char.c
//por julian alvaran 07_04_09
//
//esta libreria se encarga de generar caracteres de tamaño 2x2 posiciones de la lcd
//solo se pueden mostrar 2 tipos diferentes de caracteres en la lcd porque para
//cada caracter se necesitan 4 posiciones de la cgram de la lcd y solo contamos
//con 8 posiciones lo que me permite solo generar 2 caracteres al mismo tiempo.
//el 2,4,8,9 tienen problemas no se porque
//para generar se llama:
//
//generar_char(pos,caracter)
//
//donde pos es 0 ó 1 y caracter entre 0 y 9
//
byte i_cg,i_chr;
byte mem_cgram[2][4]={64,72,80,88, //posiciones cgram para gen 1er caracter
96,104,112,120}; //posiciones cgram para gen 2do caracter
byte big_char[4][32]= {0x07,0x0F,0x18,0x18,0x18,0x18,0x18,0x19, //
0x1C,0x1E,0x07,0x0F,0x0B,0x1B,0x13,0x13, //codigo para
0x19,0x1B,0x1E,0x1C,0x1C,0x0F,0x07,0x00, //generar el cero
0x03,0x03,0x03,0x03,0x07,0x1E,0x1C,0x00, //
0x07,0x0F,0x1F,0x1F,0x1B,0x03,0x03,0x03, //
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, //codigo para
0x03,0x03,0x03,0x03,0x03,0x0F,0x0F,0x00, //generar el 1
0x18,0x18,0x18,0x18,0x18,0x1E,0x1E,0x00,
0x07,0x0F,0x1C,0x18,0x00,0x00,0x00,0x00, //
0x1E,0x1F,0x03,0x03,0x07,0x0E,0x0C,0x18, //codigo para
0x01,0x03,0x07,0x0E,0x1C,0x1F,0x1F,0x00, //generar el 2*
0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x00,
0x1F,0x1F,0x10,0x00,0x00,0x01,0x03,0x01, //
0x1F,0x1F,0x07,0x0E,0x1C,0x18,0x10,0x00, //codigo para
0x00,0x00,0x18,0x18,0x18,0x0F,0x07,0x00, //generar el 3
0x1C,0x0E,0x07,0x03,0x03,0x1E,0x1C,0x00
0x00,0x00,0x01,0x03,0x07,0x0E,0x1C,0X18, //
0X1C,0X1C,0X1C,0X1C,0X0C,0X0C,0X0C,0X00, //codigo para
0X1F,0X1F,0X00,0X00,0X00,0X00,0X00,0X00, //generar el 4*
0X1F,0X1F,0X0C,0X0C,0X0C,0X0C,0X0C,0X00
0x1F,0x1F,0x18,0x18,0x1F,0x1F,0x00,0x00, //
0x1F,0x1F,0x00,0x00,0x1C,0x1E,0x07,0x03, //codigo para
0x00,0x00,0x18,0x18,0x1C,0x0F,0x03,0x00, //generar el 5
0x03,0x03,0x03,0x03,0x07,0x1E,0x1C,0x00
0x03,0x07,0x0E,0x1C,0x18,0x18,0x1F,0x1F, //
0x1C,0x1C,0x00,0x00,0x00,0x00,0x1C,0x1E, //codigo para
0x1F,0x18,0x18,0x18,0x1C,0x0F,0x07,0x00, //generar el 6
0x1F,0x03,0x03,0x03,0x07,0x1E,0x1C,0x00
0x1F,0x1F,0x00,0x00,0x00,0x01,0x03,0x07, //
0x1F,0x1F,0x07,0x0E,0x1C,0x18,0x10,0x00, //codigo para
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00, //generar el 7
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
0x07,0x0F,0x18,0x18,0x18,0x18,0x0F,0x07, //
0x1C,0x1E,0x03,0x03,0x03,0x03,0x1E,0x1C, //codigo para
0x0C,0x18,0x18,0x18,0x18,0x0F,0x07,0x00, //generar el 8 *
0x06,0x03,0x03,0x03,0x03,0x1E,0x1C,0x00
0x07,0x0F,0x18,0x18,0x18,0x18,0x0F,0x07, //
0x1C,0x1E,0x03,0x03,0x03,0x03,0x1F,0x1F, //codigo para
0x19,0x1B,0x1E,0x1C,0x1C,0x0F,0x07,0x00, //generar el 9*
0x00,0x00,0x00,0x00,0x01,0x07,0x07,0x00};
void genera_char(int1 pos_cgram,byte simbolo){
i_cg=0;
i_chr=0;
inc_men_cgram:
lcd_send_byte(0,mem_cgram[pos_cgram][i_cg]); //selecciona posiciones de la cgram
//donde se guardaran los fragmentos
//de caracter
aun_no:
lcd_putc(big_char[simbolo][i_chr]); //forma simbolo segun la declaracion inicial y la peticion
++i_chr; //desde programa
if(i_chr==8||i_chr==16||i_chr==24){ //cada vez que se forma un fragmento inc la dir cgram
++i_cg; //para formar otro frag
goto inc_men_cgram;
}
if(i_chr==32) //cuando se forman los 4 frag retornamos o salimos
return;
goto aun_no;
}