Visualización de un personaje personalizado en 2x16 LCD

3

He escrito un controlador LCD que funciona para un NHD ‐ 0212WH ‐ ATGH ‐ JT y me gustaría agregar la posibilidad de crear tus propios personajes personalizados.

A través de algunas investigaciones, entendí que debo escribir un byte para cada fila en el CGRAM en posiciones específicas y luego apuntar a esa posición al intentar escribir un carácter.

Hice lo siguiente pero no parece funcionar:

La matriz de caracteres para los bytes para escribir en CGRAM se obtuvo con herramientas en línea como HD44780 Gráficos definidos por el usuario de LCD . Las funciones y los comandos no parecen ser el problema, ya que escribo bien todos los demás caracteres ASCII.

char myCustomCharacter[8] = {0x0,0x1,0x3,0x16,0x1c,0x8,0x0};

void createCharacter(unsigned char location, unsigned char[] bytes){
    writeCommand(0x40+(location*8));
    writeData(bytes[0]);
    writeData(bytes[1]);
    writeData(bytes[2]);
    writeData(bytes[3]);
    writeData(bytes[4]);
    writeData(bytes[5]);
    writeData(bytes[6]);
    writeData(bytes[7]);
}

Luego en alguna prueba principal:

int main(void){
    initLCD();
    createCharacter(1, myCustomCharacter);
    setCursor(0, 0);
    writeCharacter('A'); //This work just fine, the A is displayed as expected
    writeCharacter(0x08); //Doesn't work, I don't see the character I stored in the CGRAM at the 1st position. Any standard ASCII character still works just fine.
}

¿Cómo accedo al carácter personalizado como si fuera solo otro carácter ASCII y cómo sé que he escrito correctamente el byte en el CGRAM?

    
pregunta Asics

2 respuestas

2

La siguiente línea agrega un carácter personalizado a una ubicación CGRAM 1 .

createCharacter(1, myCustomCharacter);

El problema con su código fue que le dijo al controlador que escribiera un carácter personalizado almacenado en la ubicación 8 . El código de escritura debería tener este aspecto.

writeCharacter(0x01)
    
respondido por el Armandas
2
  

¿Cómo accedo al carácter personalizado como si fuera solo otro carácter ASCII?

Debido a que la pantalla utiliza una tabla ascii en su mayoría precisa, normalmente escribe ese carácter con su código ascii regular. Una "A" es un carácter ASCII 0x41, y su compilador la trata como 0x41. Los caracteres imprimibles comienzan en 0x20 "" (espacio). La pantalla utiliza el espacio 0x00-0x0f, caracteres de control normalmente no imprimibles en una computadora, para mantener la referencia a los caracteres personalizados. Como nota al margen, el primer carácter personalizado está en 0x00, no en 0x01.

  

¿y cómo sé que he escrito correctamente el byte en el CGRAM?

¿Aparte de mirar la pantalla? Debe tener el cable conectado para leer y escribir, que la mayoría de las personas no. Luego puedes leer el mapa de caracteres justo lo contrario de la escritura. También puede leer lo que debería estar mostrando la pantalla y usar las direcciones de memoria adicionales en una pantalla como memoria RAM adicional para su microcontrolador.

    
respondido por el Passerby

Lea otras preguntas en las etiquetas