¿Por qué Graphic LCD (128x64) no cambia automáticamente de línea

1

Estoy utilizando una pantalla LCD gráfica de 128x64 (Modelo: JHD12864E ) para mi colegio proyecto. Quiero imprimir una oración. Pero el problema es que aumenta automáticamente el valor 'Y' y una vez que alcanza el valor 64 (en el chip de visualización seleccionado), lo restablece en 0 (cero) y se superpone a lo que he escrito allí antes. ¿Hay alguna forma de garantizar que no se superponga y rompa la línea automáticamente? ¿Puedo leer los valores actuales de x, y y z?

    
pregunta Bishal

1 respuesta

1

La pantalla indicada está cableada eléctricamente como dos pantallas 64x64 que están colocadas una al lado de la otra, y se debe pensar en tales términos. La hoja de datos no proporciona ninguna forma de leer el valor actual de los registros X e Y, pero su código debe poder realizar un seguimiento de lo que ha escrito en la pantalla. La pantalla proporciona una función para leer los datos en la dirección actual, pero recomendaría que para un mejor rendimiento evite usarlos. En su lugar, dibuje en un búfer fuera de pantalla y copie los datos en la pantalla LCD cuando haya terminado. En muchos casos, este enfoque puede ser más del doble de rápido que los enfoques que tienen que leer y escribir un LCD.

Si está usando algo como un PIC, y su pantalla constará de un número de cortes horizontales de texto proporcional, de manera que ningún carácter cruzará un límite de división, y ninguna división es más de, por ejemplo. 10 píxeles de altura, sugeriría que tenga dos buffers de 20 bytes de diez enteros de 16 bits y un contador X. Procese los caracteres dentro de la división en orden por la coordenada X del borde más a la izquierda. Comience con los dos búferes despejados y el contador igual a 0.

Para procesar un personaje, comienza haciendo algo como:

while(counter_X < char_left)
{
  counter_X++;
  buffer[0] <<= 1; buffer[1] <<= 1;
  buffer[2] <<= 1; buffer[3] <<= 1;
  buffer[4] <<= 1; buffer[5] <<= 1;
  buffer[6] <<= 1; buffer[7] <<= 1;
  buffer[8] <<= 1; buffer[9] <<= 1;
  if ((counter_X & 7) == 0)
    show_buffer(((counter_x) >> 3)-1, slice_y, slice_height); // Show *upper* bytes
}

En el PIC y en muchos otros procesadores, la codificación de los turnos será mucho más rápida que usar un bucle [incluso si la división puede tener menos de 10 filas de altura]. La rutina show_buffer debe configurar la pantalla para que comience a escribir bytes en las direcciones X e Y indicadas, y luego escribir todos los bytes del segmento.

Una vez que counter_X sea igual a la coordenada del borde derecho del carácter, dibuje el carácter en los bytes inferiores del búfer usando el operador booleano "o" ( |= ). Los datos de caracteres escritos en la posición X 0 se desplazarán a la izquierda 8 veces antes de que el MSB de cada byte se envíe a la pantalla; los datos en la posición 1 se desplazarán a la izquierda 7 veces antes de que se escriban en la pantalla, pero el último bit quedará atrás para la siguiente operación de visualización.

Una vez que se hayan escrito todos los datos de caracteres, ejecute el ciclo de desplazamiento anterior con char_left igual a 128 para forzar al sistema a escribir todos los datos restantes para la banda.

Este enfoque hace que sea posible producir texto espaciado proporcionalmente de aspecto profesional muy rápidamente, ya que no hay operaciones innecesarias de escritura en pantalla. Las únicas operaciones que no son necesarias al 100% en comparación con una actualización óptima de la pantalla serían los comandos "establecer la coordenada X" y "establecer la coordenada Y" que se enviarían aproximadamente cada 10 bytes, muchos de los cuales podrían eliminarse si el "búfer de división "tenían una altura total de 64 bytes. Incluso si las rodajas tuvieran solo 6 líneas de alto (una de ellas mostraba texto pequeño), la sobrecarga sería como máximo del 50%. Por el contrario, tratar de usar lectura-modificación-escritura para dibujar el texto sin el búfer en pantalla probablemente requiera dos o tres lecturas o escrituras para cada byte de memoria de pantalla, al menos de 4 a 6 veces más lento.

    
respondido por el supercat

Lea otras preguntas en las etiquetas