Probe con el Proteus 7.4 SP3 y, como dijiste CoreMain, funciona sin problemas. Ahora ya puedo usar el PIC18F2550, gracias por el dato.
Ese BitFontCreator tb tiene un tiempo de trial, almenos asi donde yo me lo he bajado x.x'
Nocturno, pude adaptar tu codigo para bitmaps (nokia_bitmpas) en CCS, fue necesario reestabler algunos tipos de variables y pues arregle el problema de llamados de matrices constantes creando una matriz temporal y grabandola con memcpy(..):
int8 Temp[504];
While (true)
{
memcpy(Temp, Tabla_LogoNokia, sizeof(Tabla_LogoNokia));
for (i = 83; i > 0; i--)
{
nokia_bitmap(i, 0, Temp, 83, 15);
nokia_imprime_memoria();
nokia_borra_memoria();
delay_ms(30);
}
delay_ms(2000);
}
Tu funcion nokia_bitmpa, como dije, solo modifique o adapte los tipos de varibles para las variables que creas alli. Por lo demas, esta igual:
void nokia_bitmap (int8 x, int8 y, int8 *bitmap, int8 ancho, int8 alto)
{
int16 ind_bitmap,ind_memoria,xx,yy,max,desplazamiento;
for (yy=0;yy<((alto>>3)+((alto%8)>0));yy++)
for (xx=0;xx<ancho;xx++)
if (((xx+x)<84) && ((xx+x)>0))
{
ind_memoria = yy * 84 + xx + x + (y>>3)*84;
ind_bitmap = yy * ancho + xx;
desplazamiento = y%8;
MemoriaVideo[ind_memoria] = MemoriaVideo[ind_memoria] | (bitmap[ind_bitmap]<<desplazamiento);
if (desplazamiento)
MemoriaVideo[ind_memoria+84] = MemoriaVideo[ind_memoria+84] | ((bitmap[ind_bitmap]>>(8-desplazamiento)) & (0xFF >> (8-desplazamiento)));
}
}
Y por lo que he probado, hasta ahora, con esa funcion, todo funciona bien.
Ahora el problema que tengo es con la funcion de texto (nokia_text(...)) pues me imprime bien hasta el caracter 'S', despues, la 'T', la 'a' y los que sigen los hace erroneamente. He analizado el codigo pero me es un poco dificil poder entender como haces todo, espero puedas ayudarme. Hasta aqui lo tengo:
void nokia_texto(int8 x, int8 y, int8 fuente, char *caracter)
{
int16 ind_bitmap, ind_memoria, xx, yy, max, desplazamiento;
int8 letra, alto, ancho, EscribirByte;
if (fuente == 1)
{
ancho = 3;
alto = 6;
}
else if (fuente == 2)
{
ancho = 5;
alto = 7;
}
else
{
ancho = 7;
alto = 8;
}
letra = *caracter;
while (letra != 0)
{
for (xx = 0; xx < ancho; xx++)
{
if (((xx + x) < 84) && ((xx + x) >= 0) && (y >= 0)&& (y <= 40))
{
ind_memoria = xx + x + (y >> 3) * 84;
ind_bitmap = (letra - 0x20) * ancho + xx;
desplazamiento = y % 8;
if (fuente == 1)
{
EscribirByte = Fuente_3_6[ind_bitmap];
}
else if (fuente == 2)
{
EscribirByte = Fuente_5_7[ind_bitmap];
}
else
{
EscribirByte = Fuente_7_8[ind_bitmap];
}
MemoriaVideo[ind_memoria] = MemoriaVideo[ind_memoria] | (EscribirByte << desplazamiento);
if (desplazamiento)
{
MemoriaVideo[ind_memoria + 84] = MemoriaVideo[ind_memoria + 84] | ((EscribirByte >> (8 - desplazamiento)) & (0xFF >> (8 - desplazamiento)));
}
}
}
caracter++;
letra = *caracter;
x = x + ancho + 1;
}
}
Uso la fuente 5x7 porque es la que use desde el principio y la que hizo cucaracha y todo para no tener problemas por ese lado.
Gracias, salu2.