Hola danrod:
Vamos a hacerlo en forma de tutorial:
Vos ya tenés la rutina glcd_put_ptr que direcciona la memoria antes de escribir o leer un byte.
Para texto se invoca en la forma:
glcd_put_ptr(T_BASE,x,y);
donde:
T_BASE es la dirección de memoria donde comienza el espacio dedicado a los caracteres,
x,y son las coordenadas de posición (columna, fila).
Un byte enviado a continuación, para escribirlo en la memoria, lo interpretará como el
código ascii de un caracter.
Si en lugar de T_BASE pusiéramos G_BASE las coordenadas x,y serían una posición de la
memoria GRAFICA.
Y el byte que se envíe a escribir, lo interpretará como una cadena de bits, cada uno
indicando el estado de un pixel del byte ubicado en esa posición, en el orden:
76543210
Ejercicio:
Haz la prueba de ejecutar esto con tu tamaño de pantalla:
y contame el resultado.
Fijate que no hay rutinas nuevas, sólo un direccionamiento diferente.
Vamos a hacerlo en forma de tutorial:
Vos ya tenés la rutina glcd_put_ptr que direcciona la memoria antes de escribir o leer un byte.
Para texto se invoca en la forma:
glcd_put_ptr(T_BASE,x,y);
donde:
T_BASE es la dirección de memoria donde comienza el espacio dedicado a los caracteres,
x,y son las coordenadas de posición (columna, fila).
Un byte enviado a continuación, para escribirlo en la memoria, lo interpretará como el
código ascii de un caracter.
Si en lugar de T_BASE pusiéramos G_BASE las coordenadas x,y serían una posición de la
memoria GRAFICA.
Y el byte que se envíe a escribir, lo interpretará como una cadena de bits, cada uno
indicando el estado de un pixel del byte ubicado en esa posición, en el orden:
76543210
Ejercicio:
Haz la prueba de ejecutar esto con tu tamaño de pantalla:
Código:
main()
{
char NRO_FILS=128; // Acá van tus valores
char NRO_COLS=128; // Acá van tus valores
char ANCHO_CAR=6; // Acá van tus valores
char =N;
int x;
glcd_config(NRO_FILS,NRO_COLS,ANCHO_CAR);
// Datos via PORTB y comandos via PORTC
// Caracteres ANCHO_CAR (6 ú 8) pixels de ancho : setear igual al hardware
glcd_inicio(); // Todo deshabilitado
// Activa sólo el modo gráfico
glcd_activar(_GRAF);
// Ejercicio G-1
N = (NRO_COLS / ANCHO_CAR) + 1;
// N es la cantidad de bytes por línea horizontal, en mi caso = 22
x=1;
while(x<256)
{
glcd_put_ptr(G_BASE,0,0);
glcd_fill_byte(N,NRO_FILS,x);
Delay_ms(200);
x*=2;
}
}
Fijate que no hay rutinas nuevas, sólo un direccionamiento diferente.
Última edición: