Cómo utilizar el módulo LCD 12864 en detalle
Observaciones al comienzo del artículo: este artículo es solo una introducción detallada al funcionamiento de 12864. Es solo para principiantes que acaban de entrar en contacto con 12864. Por favor, denme algo de ayuda. Es relativamente flojo. Se recomienda que los principiantes consulten primero el manual 12864 y el manual en inglés del controlador de control ST7920. Después de una comprensión preliminar, lea este artículo nuevamente para obtener una comprensión más profunda. ¡Se recomienda encarecidamente leer atentamente el manual en inglés del ST7920! Hay una introducción detallada en los detalles y la mayoría de los 12864 chinos están traducidos del chino.
Este artículo se divide en tres pasos para presentar los principios de recursos internos de 12864, una explicación detallada del conjunto de instrucciones y ejemplos de aplicación.
Hay cuatro tipos de operaciones para 12864:
1), leer estado ocupado (el contenido de la dirección del puntero se leerá al mismo tiempo), después de la inicialización, cada time 12864 Se requiere detección de ocupado tanto para lectura como para escritura.
2) Escribir comandos: puede ver la lista de comandos de todos los comandos y el uso detallado de los comandos se explicará más adelante. Escribir una dirección es también escribir una instrucción.
3). Escribir datos: Los objetos de operación incluyen DDRAM, CGRAM y GDRAM.
4). Lectura de datos: Los objetos de operación también son DDRAM, CGRAM y GDRAM.
Para aprender 12864, primero debes comprender sus recursos internos. Si sabes lo que contiene, podrás usarlo de manera más conveniente.
Primero introduzca brevemente algunos nombres en inglés:
DDRAM: (Data Display Ram), RAM de visualización de datos, cualquier cosa que escriba en ella, se mostrará en la pantalla.
CGROM: (ROM de generación de personajes), ROM de generación de personajes. En el interior hay una fuente que almacena caracteres chinos, también llamada biblioteca de fuentes chinas. Los métodos de codificación son GB2312 (chino simplificado) y BIG5 (chino tradicional). El autor utiliza el QC12864B de Yusong Electronics y lo utiliza como ejemplo para explicar.
CGRAM: (RAM de generación de caracteres), RAM de generación de caracteres, 12864 proporciona internamente CGRAM de 64 × 2 B, que se puede usar para 4 caracteres de 16 × 16 definidos por el usuario, cada carácter ocupa 32 bytes.
GDRAM: (RAM de visualización gráfica): RAM de visualización gráfica Esta área se utiliza para dibujar de la misma manera: todo lo que escriba se mostrará en la pantalla. es decir, los datos escritos en DDRAM son la codificación de caracteres. La visualización de caracteres primero encuentra el modelo de fuente en CGROM y luego lo asigna a la pantalla. Al escribir datos en GDRAM, cada punto de la información gráfica de la matriz de puntos utiliza 1 bit. Guárdalo para mostrarlo o no.
HCGROM: (ROM de generación de caracteres de media altura): Generador de caracteres de medio ancho, que son letras y números, es decir, código ASCII.
En cuanto a ICON RAM (IRAM): Parece que el 12864 actualmente en el mercado no tiene esta función, y el autor no ha encontrado la información de su aplicación, por lo que no la presentaré aquí.
Reimpreso en el módulo LCD 12864:/
Ahora nos centraremos en los recursos enumerados anteriormente para explicar 12864:
DDRAM:
p>El 12864 utilizado por el autor tiene 4 filas × 32 bytes de espacio DDRAM en su interior. Pero en un momento determinado, la pantalla solo puede mostrar 2 líneas × 32 bytes de espacio, entonces, ¿qué pasa con el espacio restante? Se pueden utilizar para el almacenamiento en caché y estos espacios pueden resultar útiles al desplazarse por la pantalla.
La estructura DDRAM es la siguiente:
80H, 81H, 82H, 83H, 84H, 85H, 86H, 87H, 88H, 89H, 8AH, 8BH, 8CH, 8DH, 8EH, 8FH
90H, 91H, 92H, 93H, 94H, 95H, 96H, 97H, 98H, 99H, 9AH, 9BH, 9CH, 9DH, 9EH, 9FH
A0H, A1H, A2H, A3H, A4H, A5H, A6H, A7H, A8H, A9H, AAH, ABH, ACH, ADH, AEH, AFH
B0H, B1H, B2H, B3H, B4H, B5H, B6H, B7H, B8H, B9H, BAH, BBH, BCH, BDH, BEH, BFH
La relación correspondiente entre la dirección y la visualización en pantalla es la siguiente:
Primera fila: 80H, 81H, 82H, 83H, 84H, 85H, 86H, 87H
La segunda fila: 90H, 91H, 92H, 93H, 94H, 95H, 96H, 97H
La tercera fila: 88H, 89H, 8AH, 8BH, 8CH, 8DH, 8EH, 8FH
La cuarta fila: 98H, 99H, 9AH, 9BH, 9CH, 9DH, 9EH, 9FH
Explicación: Los datos en rojo está normalizado. Los datos en la parte verde se muestran en la mitad superior de la pantalla y se muestran en la mitad inferior de la pantalla. Generalmente, usamos el espacio en las dos líneas anteriores para mostrar caracteres, es decir, 80H ~ 8FH, 90H ~ 9FH. El espacio de cada dirección es de 2 bytes, que es 1 palabra, por lo que se puede usar para almacenar caracteres. El espacio de codificación total es de 128 bytes. Debido a que la codificación de cada carácter chino es de 2 bytes, cada dirección necesita usar 2 bytes para almacenar un carácter chino. Por supuesto, también es posible utilizar estos dos bytes por separado, es decir, se mostrarán dos caracteres de medio ancho.
Los datos almacenados dentro de DDRAM son todos códigos de caracteres. Los códigos que se pueden escribir incluyen el código ASCII, el código GB2312 y el código BIG5. La biblioteca de fuentes 12864 utilizada por el autor parece estar incompleta. No se puede mostrar el "número" de caracteres, pero se muestran otros caracteres. No es adecuado para mostrar artículos largos en caracteres chinos.
Lectura y escritura de datos DDRAM:
Toda lectura y escritura de datos debe enviar primero la dirección y luego leer y escribir. Al escribir datos en DDRAM, asegúrese de utilizar el conjunto de instrucciones básico (encender con la instrucción 0x30), luego escriba la dirección y luego escriba dos bytes de datos continuamente. Al leer datos, primero escriba la dirección en el conjunto de instrucciones básicas, luego léala una vez y luego lea 2 bytes de datos continuamente. Después de leer, el puntero de dirección aumenta automáticamente en uno y salta a la siguiente palabra si es necesario. leer, Para el contenido de una palabra, solo necesita leer 2 bytes de datos continuamente. Debe prestar atención a las lecturas falsas aquí. No solo la lectura de CGRAM requiere una lectura falsa, sino que también la lectura de otros GDRAM y DDRAM requiere una lectura falsa primero. La lectura posterior es la lectura falsa, pero los datos se leen una vez. no se almacenará, es decir, los primeros datos leídos después de enviar la dirección son incorrectos y los datos posteriores son correctos. (La lectura tonta es falsa)
Las cuestiones que deben explicarse sobre el almacenamiento de códigos en DDRAM son las siguientes:
1). , es decir, 2 bytes. Al escribir datos en DDRAM, primero debe escribir la dirección y luego enviar continuamente 2 bytes de datos. Primero envíe los datos de bytes altos y luego envíe los datos de bytes bajos. Lo mismo ocurre al leer datos. Primero escriba la dirección, luego lea los datos de bytes altos y luego lea los datos de bytes bajos (al leer datos, primero preste atención a la lectura ficticia).
2) Al mostrar caracteres de ancho medio del código ASCII, envíe 2 bytes de código ASCII a cada dirección y se mostrarán 2 caracteres de ancho medio en la posición correspondiente en la pantalla. son caracteres de byte alto, los de la derecha son caracteres de byte bajo.
3) Al mostrar caracteres chinos, los 2 bytes de codificación de caracteres chinos deben almacenarse en el mismo espacio de direcciones y no se pueden almacenar en dos direcciones separadas; de lo contrario, la visualización no mostrará los caracteres requeridos. . Los 2 bytes de cada palabra se combinan automáticamente para encontrar la fuente y mostrar los caracteres. Por lo tanto, si escribimos una codificación de 2 bytes de un carácter chino en una dirección, el carácter se mostrará correctamente. El byte alto de la codificación se almacena en el byte bajo de la dirección anterior y el byte bajo de la codificación se almacena en el byte bajo de la dirección anterior. almacenado en el byte alto de la siguiente sección de dirección, obviamente no buscarán la fuente en combinación con los bytes correspondientes de cada dirección.
4) Debido a que el controlador ST7920 proporciona 4 caracteres personalizados, estos 4 caracteres personalizados también se pueden mostrar completamente, estos 4 caracteres personalizados también están codificados. Sin embargo, los códigos de estos cuatro caracteres son fijos. que son 0000H, 0002H, 0004H y 0006H. Como se muestra en la siguiente figura:
La figura anterior solo dibuja el espacio CGRAM de 2 caracteres, y habrá 2 caracteres más adelante. Puede ver que cada carácter tiene 16 filas y 16 columnas, y cada fila usa 2 bytes. Por lo tanto, el espacio ocupado por un carácter es de 32 bytes y la dirección es de 6 bits. Las direcciones de los 4 caracteres son: 00H ~ 0FH. , 10H~1FH, 20H~2FH, 30H~3FH. La codificación usa 2 bytes y puede ver que 2 bits son arbitrarios, lo que indica que en realidad puede haber múltiples codificaciones para estos 4 caracteres, pero comúnmente usamos las 4 codificaciones enumeradas anteriormente.
CGRAM: (lectura y escritura de datos)
La estructura de CGRAM es como se muestra arriba. Aquí nuevamente, agregue algo de contenido sobre lectura y escritura de CGRAM. Antes de leer y escribir. primero escriba la dirección Write La instrucción de CGRAM es la dirección 0x40. Pero cuando escribimos la dirección, solo necesitamos escribir la dirección de la primera línea. Por ejemplo, el primer carácter es 0x40 00H, y luego escribir 2 bytes de datos continuamente. Después de eso, el puntero de dirección aumentará automáticamente en uno. salte a la dirección de la siguiente línea y luego escriba 2 bytes de datos. De hecho, la implementación de la programación consiste en escribir la dirección y luego escribir continuamente 32 bytes de datos. Al leer datos, primero se escribe la primera dirección, luego se realiza una lectura falsa y luego se leen 32 bytes de datos continuamente.
GDRAM: (RAM de visualización de dibujo)
La estructura espacial de la RAM de dibujo se muestra en la siguiente figura:
Estas son matrices de puntos y la RAM de dibujo es para estos puntos Configure la matriz en 1 o 0, puede ver que en realidad tiene 32 filas × 256 columnas, pero está dividida en pantallas superior e inferior para su visualización, y cada punto corresponde a un punto en la pantalla. Para utilizar la función de dibujo, debe habilitar los comandos extendidos. Luego escriba la dirección y luego lea y escriba los datos.
Lectura y escritura de GDRAM:
En primer lugar es necesario explicar que la unidad básica de funcionamiento de GDRAM es una palabra, es decir 2 bytes. Al leer y escribir GDRAM, se deben escribir al menos 2 palabras a la vez. Bytes, lea al menos 2 bytes a la vez.
Escribir datos: primero active el conjunto de instrucciones extendido (0x36) y luego envíe la dirección. La dirección aquí es ligeramente diferente a la de DDRAM. Solo hay una dirección en DDRAM, que es la palabra. DIRECCIÓN. Solo hay dos direcciones en GDRAM, a saber, dirección de palabra (dirección de columna/dirección horizontal X) y dirección de bit (dirección de fila/dirección vertical Y). La dirección vertical en la imagen de arriba es 00H ~ 31H y la dirección horizontal es 00H. ~ 15H, al escribir direcciones, primero debe escribir la dirección vertical (dirección de fila) y luego escribir la dirección horizontal (dirección de columna). Es decir, debe escribir dos direcciones continuamente y luego escribir 2 bytes de datos continuamente. Como se muestra en la figura, el de la izquierda es el byte alto y el de la derecha es el byte bajo. Los puntos con un valor de 1 se muestran en negro y los puntos con un valor de 0 se muestran en blanco. A continuación se muestra un ejemplo de cómo escribir una dirección: la instrucción de dirección GDRAM es la dirección 0x80. Las direcciones agregadas son las X e Y enumeradas anteriormente. Supongamos que queremos escribir los 2 bytes de la primera fila, luego la dirección de escritura es 0x00H (dirección de fila de escritura) y luego 0x80H (dirección de columna), y luego continuar. de datos (primero el byte alto y luego el byte bajo).
Otro ejemplo es escribir 2 bytes en la esquina inferior derecha de la pantalla. Primero escriba la dirección de fila 0x9F (0x80 32), luego escriba la dirección de columna 0x8F (0x80 15) y luego escriba 2 bytes de datos continuamente. En programación, al escribir una función de dirección, los parámetros (0x 32) se usan directamente en lugar de agregarlos usted mismo.
Leer datos: primero active el conjunto de instrucciones extendido, luego escriba la dirección de fila y la dirección de columna, lea falsamente una vez y luego lea 2 bytes de datos continuamente (primero el byte alto y luego el byte bajo).
Tiempo de lectura y escritura:
El diagrama de tiempo de lectura y escritura es el siguiente: (la imagen superior está escribiendo, la imagen inferior está leyendo)
Señal pines en el diagrama de tiempos Es el pin más importante de 12864, los cuales son:
RS: terminal de selección de registro de comando/datos
WR: terminal de control de lectura y escritura
E: habilitar terminal de energía
DB7~DB0: terminal de datos
Todas las operaciones en 12864 se centran básicamente en unos pocos pines. La inclusión de comandos de escritura, escritura de datos, lectura de datos y lectura del estado se realiza mediante la coincidencia de nivel alto y bajo de estos pines.
Según el diagrama de tiempos, se pueden escribir la función de comando de escritura, la función de escritura de datos, la función de lectura de datos y la función de estado de lectura correspondientes. Lo que hay que tener en cuenta es que el período de tiempo Tc durante el cual aparecen datos válidos debe ser apropiado y no puede ser demasiado corto, de lo contrario provocará fallas de lectura y escritura.
Da varios ejemplos de funciones:
//Detección de ocupado, si está ocupado, espera, el tiempo máximo de espera es 60 ms
void ocupadochk_12864(void){ p>
tiempo de espera int sin firmar = 0;
E_12864 = 0;
RS_12864 = 0;
RW_12864 = 1; >E_12864 = 1;
while((IO_12864 amp; 0x80) amp; amp; timeout != 0); //Detección de estado ocupado, tiempo de espera de 60 ms
E_12864 = 0 ;
}
//Escribir subrutina de comando
void wrtcom_12864(unsigned char com){
busychk_12864() ;
E_12864 = 0;
RS_12864 = 0;
RW_12864 = 0;
IO_12864 = com;
E_12864 = 1;
delay_12864(50); //¡¡50us habilita el retraso! ¡¡¡Presta atención, si es una CPU más rápida, el retraso debería ser mayor
E_12864 = 0; /p>
}
//Leer subrutina de datos
unsigned char reddat_12864(void){
unsigned char temp;
busychk_12864();
E_12864 = 0;
IO_12864 = 0xff; //Configura el puerto IO en nivel alto y lee el pin
RS_12864 = 1 ;
RW_12864 = 1;
E_12864 = 1;
delay_12864(50); // ¡¡¡Habilitar retraso!!! CPU más rápida, el retraso debería ser mayor
temp = IO_12864;
return temp
}
// Escribir subrutina de datos
void wrtdat_12864(dat de carácter sin firmar){
busychk_12864();
E_12864 = 0;
RS_12864 = 1;
RW_12864 = 0;
E_12864 = 1;
IO_12864 = dat;
delay_12864(50); //¡¡¡Usar puede retrasar!!! Tenga en cuenta que si se trata de una CPU más rápida, el retraso debería ser mayor
E_12864 = 0;
}
Entre ellos, la detección de ocupado es necesaria. Cuando BF = 1, significa que las operaciones relacionadas se están realizando internamente, es decir, está ocupado. ST7920 no aceptará ninguna instrucción hasta que BF vuelva a 0. La MCU debe detectar BF para determinar si la operación interna del ST7920 se ha completado antes de que pueda enviar instrucciones. El retraso también se puede utilizar para reemplazar la detección de ocupado, pero el retraso debe ser suficiente. La detección ciega en realidad lee el registro de estado interno. El bit más alto de este registro (D7) es el indicador de ocupado BF y los 7 bits restantes son el contenido del puntero de dirección. Por lo tanto, durante la detección ciega, la dirección en el puntero de dirección es. realmente leer en voz alta.
Conjunto de instrucciones:
El conjunto de instrucciones se divide en conjunto de instrucciones básico y conjunto de instrucciones extendido. Para utilizar el conjunto de instrucciones correspondiente, primero debe escribir las instrucciones correspondientes para indicar las instrucciones posteriores. son de este tipo. Por ejemplo, cuando use el conjunto de instrucciones básico, escriba la instrucción (0x30) y cuando use el conjunto de instrucciones extendido, escriba la instrucción (0x34) para cambiar al conjunto de instrucciones extendido.
1) Conjunto de instrucciones básico (RE=0): (Cuando utilice el conjunto de instrucciones extendido, escriba primero la instrucción 0x30, lo que hace que RE=0)
Borrar instrucción de pantalla (0x01 ): escriba 0x20 en DDRAM y escriba 0x00 en la dirección del puntero. Lo que aparece en la pantalla es una pantalla en blanco.
Ingrese el comando (0x02/0x03): escriba 0x00 en el contenido del puntero de dirección.
Ingrese el modo: 0 0 0 0 0 1 I/D S: después de configurar el cursor, muestra el dirección del cambio. Hay 2 bits programables en su interior. I/D indica si el puntero de datos aumenta o disminuye en uno después de leer o escribir un carácter. El puntero I/D=1 aumenta en uno y el puntero I/D=0 disminuye en uno. S=1 permite el movimiento de pantalla completa.
S I/D= H H, la pantalla se mueve un carácter hacia la izquierda a la vez.
S I/D= H L, la pantalla se mueve hacia la derecha un carácter a la vez.
Pero si no activa el movimiento de la pantalla, aquí hay un concepto, es decir, el movimiento de la pantalla en la prueba real, si activa el movimiento de la pantalla, la visualización será muy extraña. La explicación es la siguiente: Dado que la estructura de DDRAM es la que se muestra en la siguiente tabla:
La mitad superior de la pantalla y la mitad inferior
80H, 81H, 82H, 83H, 84H, 85H, 86H, 87H, 88H, 89H, 8AH, 8BH, 8CH, 8DH, 8EH, 8FH
90H, 91H, 92H, 93H, 94H, 95H, 96H, 97H, 98H, 99H, 9AH, 9BH, 9CH, 9DH, 9EH, 9FH
A0H, A1H, A2H, A3H, A4H, A5H, A6H, A7H, A8H, A9H, AAH, ABH, ACH, ADH, AEH, AFH
B0H, B1H, B2H, B3H, B4H, B5H, B6H, B7H, B8H, B9H, BAH, BBH, BCH, BDH, BEH, BFH
Cuando el cambio de pantalla no es Al encenderse, la pantalla utiliza la primera columna de la tabla como punto de partida de referencia y luego las primeras 8 columnas se clasifican como la mitad superior de la pantalla y las últimas 8 columnas se clasifican como la mitad inferior de la pantalla. mostrar. Si mueve un carácter a la pantalla izquierda en este momento, la relación de mapeo entre el contenido DDRAM y la visualización debería ser:
80H, 81H, 82H, 83H, 84H, 85H, 86H, 87H, 88H, 89H , 8AH, 8BH , 8CH, 8DH, 8EH, 8FH
90H, 91H, 92H, 93H, 94H, 95H, 96H, 97H, 98H, 99H, 9AH, 9BH, 9CH, 9DH, 9EH, 9FH
A0H, A1H, A2H, A3H, A4H, A5H, A6H, A7H, A8H, A9H, AAH, ABH, ACH, ADH, AEH, AFH
B0H, B1H, B2H , B3H, B4H , B5H, B6H, B7H, B8H, B9H, BAH, BBH, BCH, BDH, BEH, BFH
Se puede ver que los caracteres que comienzan en la tercera y cuarta línea en realidad corrieron hacia la primera y segunda línea Al final de la línea, toda la estructura DDRAM es una estructura cíclica. Cuando ocurre un cambio de pantalla, la relación de mapeo entre DDRAM y la pantalla cambia constantemente. Pero esto no está en línea con nuestros hábitos de lectura, por lo que si necesita utilizar esta función, debe programarla y corregirla.
Display, cursor, interruptor intermitente: 0 0 0 0 0 0 1 D C B:
D=1: Display encendido (Display) C=1: Cursor encendido (Cursor) B= 1: La posición del cursor parpadea (Blink). Si es 0, está apagado.
Control de desplazamiento de visualización del cursor: 0 0 0 1 S/C R/L X X
Explicación:
LL: En este momento, es solo el valor del puntero de dirección AC menos 1. Lo que aparece en la pantalla es que el cursor se mueve un carácter hacia la izquierda.
LH: En este momento, es solo agregar 1 al valor del puntero de dirección AC. Lo que aparece en la pantalla es que el cursor se mueve un carácter hacia la derecha.
HL: El puntero AC permanece sin cambios y mueve un carácter a la izquierda de la pantalla. Este es un desplazamiento cíclico hacia la izquierda de la estructura DDRAM. 80H está conectado a la parte posterior de 8FH y 90H está conectado a la parte posterior de 9FH. Esto es lo mismo que el cambio de pantalla mencionado anteriormente.
HH: El puntero AC permanece sin cambios y mueve un carácter a la pantalla derecha. Este es un desplazamiento cíclico hacia la derecha de la estructura DDRAM. 80H está conectado a la parte posterior de 8FH y 90H está conectado a la parte posterior de 9FH.
Configuración de funciones: 0 0 1 Interfaz DL X RE X.
RE=1 significa habilitar instrucciones extendidas, RE=0 significa usar instrucciones básicas.
Si las instrucciones básicas están habilitadas, se establece en 0x30, y si las instrucciones extendidas están habilitadas, se establece en 0x34.
Configuración de dirección CGRAM: dirección 0x40. El rango de direcciones es 00H~3FH. ¡La premisa es que SR=0, lo que permite configurar las direcciones IRAM y CGRAM! ! !
Configuración de direcciones DDRAM: Sólo habrá direcciones de palabras. Como se muestra en la siguiente tabla. (Tenga en cuenta que la dirección DDRAM tiene 4 líneas × 16 palabras) de la siguiente manera:
80H, 81H, 82H, 83H, 84H, 85H, 86H, 87H, 88H, 89H, 8AH, 8BH, 8CH, 8DH , 8EH, 8FH
90H, 91H, 92H, 93H, 94H, 95H, 96H, 97H, 98H, 99H, 9AH, 9BH, 9CH, 9DH, 9EH, 9FH
A0H , A1H, A2H, A3H, A4H, A5H, A6H, A7H, A8H, A9H, AAH, ABH, ACH, ADH, AEH, AFH
B0H, B1H, B2H, B3H, B4H, B5H, B6H , B7H, B8H, B9H, BAH, BBH, BCH, BDH, BEH, BFH
Por lo tanto, solo se pueden mostrar 2 líneas en un momento determinado. Sólo la pantalla de desplazamiento puede mostrar los datos de las otras dos filas.
Leer indicador de ocupado (dirección): Lee el indicador de ocupado y la dirección al mismo tiempo. Cuando esté ocupado, el ST7920 no aceptará ninguna instrucción. Configure RS en 0, configure RW en 1 de acuerdo con el diagrama de tiempos y luego lea el registro de estado.
Escribir RAM (DDRAM/CGRAM/GDRAM): Después de escribir la lógica de control (función wrtcom_12864 (dirección);), enviar datos directamente (wrtdat_12864). Después de escribir, el puntero de dirección aumenta o disminuye en uno según la configuración en el modo de entrada. Escriba la dirección primero antes de escribir los datos, y escribir la dirección en sí es un comando de escritura de dirección y luego escriba los datos.
RAM de lectura (DDRAM/CGRAM/GDRAM): recuerde realizar una lectura falsa primero y luego la lectura real. Después de la lectura falsa, no es necesario volver a realizar una lectura falsa a menos que se restablezca la dirección.
2) Conjunto de instrucciones extendido (RE=1): (Use el conjunto de instrucciones extendido para escribir primero la instrucción 0x34, lo que hace RE=1)
Modo de espera: 0x01, no afecta a DDRAM, por lo que, a diferencia del comando borrar pantalla, cualquier comando puede finalizar el modo de espera.
Configuración permitida de dirección de desplazamiento/dirección IRAM: 0 0 0 0 0 0 1 SR:
SR=1: Permite configuración de dirección de desplazamiento vertical. SR=0: permite configurar direcciones IRAM y CGRAM.
Establecer dirección de desplazamiento/IRAM: dirección 0x40. (La dirección de desplazamiento es una dirección de fila, es decir, una dirección vertical).
Aquí explicaremos el desplazamiento, que significa desplazarse hacia arriba y hacia abajo para lograr el desplazamiento vertical de la pantalla.
Dirección de desplazamiento: el rango de direcciones es 0x00 ~ 0x63, y la dirección de desplazamiento de 64 líneas es en realidad una dirección vertical. Cada dirección representa una fila de píxeles en DDRAM. Desplazarse una vez es mover todos los puntos de la fila a la parte superior de la mitad superior de la pantalla y a la mitad inferior de la pantalla.
80H, 81H, 82H, 83H, 84H, 85H, 86H, 87H, 88H, 89H, 8AH, 8BH, 8CH, 8DH, 8EH, 8FH
90H, 91H, 92H , 93H, 94H, 95H, 96H, 97H, 98H, 99H, 9AH, 9BH, 9CH, 9DH, 9EH, 9FH
A0H, A1H, A2H, A3H, A4H, A5H, A6H, A7H, A8H , A9H, AAH, ABH, ACH, ADH, AEH, AFH
B0H, B1H, B2H, B3H, B4H, B5H, B6H, B7H, B8H, B9H, BAH, BBH, BCH, BDH, BEH , BFH
Sigue siendo el diagrama de estructura de DDRAM. Cabe señalar que la pantalla de desplazamiento se divide en desplazamiento de la mitad superior y desplazamiento de la mitad inferior. No hay relación entre las dos pantallas. , la parte roja en el lado izquierdo de la DDRAM se desplaza en la mitad superior de la pantalla y la parte verde en el lado derecho se desplaza en la mitad inferior de la pantalla.
La siguiente línea de B0H, B1H, B2H, B3H, B4H, B5H, B6H, B7H es
80H, 81H, 82H, 83H, 84H, 85H, 86H, 87H
p>Es decir, el lado izquierdo es una estructura de bucle conectada hacia arriba y hacia abajo. De la misma manera, el lado derecho también es una estructura cíclica conectada hacia arriba y hacia abajo. Los caracteres en la memoria izquierda se desplazan hacia arriba y hacia abajo. Los personajes en la memoria de la derecha se desplazan hacia arriba y hacia abajo, y no hay relación entre los dos.
Para habilitar el desplazamiento, primero habilite el conjunto de instrucciones extendidas, luego permita la configuración de la dirección de desplazamiento y luego configure la dirección de desplazamiento.
wrtcom_12864(0x34); //Abrir instrucciones extendidas
wrtcom_12864(0x03); //Permitir que se ingrese la dirección de desplazamiento
wrtcom_12864(0x40 dirección// Configuración Dirección de desplazamiento
wrtcom_12864(0x30); //Volver a las instrucciones básicas
Para lograr el desplazamiento en pantalla completa, debe utilizar un bucle para modificar continuamente la dirección de desplazamiento de 00 a 63. , pero desafortunadamente esto no está en línea con nuestros hábitos de lectura. La implementación del desplazamiento de pantalla completa se explicará en la aplicación siguiente.
Visualización inversa: 0 0 0. 0 0 1 R1 R0: <. /p>
El valor inicial de R1 y R0 es 00. Seleccione cualquier fila del 1 al 4 para mostrar en video inverso y decida si desea mostrarlo en video inverso.
Cómo activar el video inverso. display: Primero active el comando extendido (0x34) y luego seleccione una línea determinada para configurar la visualización inversa (0x04 R1R0 es la primera línea, 01 es la segunda línea, 10 es la tercera línea y 11 es). La cuarta línea necesita explicar. Sí, las filas aquí se refieren a las filas de todas las memorias DDRAM, no a las filas mostradas. La pantalla solo muestra 2 filas.
Entonces, si activamos la visualización resaltada. las filas 3 y 4, no nos desplazaremos. No hay ningún efecto visible.
Al mismo tiempo, si activamos la visualización resaltada de la 1.ª línea, la 1.ª y 3.ª línea de la pantalla se resaltarán, y la 2.ª línea corresponde a la 2.ª y 4.ª línea de la pantalla. pantalla. Esto es necesario tener en cuenta.
Cómo desactivar la visualización destacada: Solo necesitas escribir la dirección una vez para desactivarla. En otras palabras, la primera vez que escribas la dirección, se activará la visualización destacada y la segunda. Cada vez que escriba la misma dirección, el resaltado se desactivará.
wrtcom_12864(0x34); //Prueba de visualización inversa
wrtcom_12864(0x04); //Activar visualización inversa
delay_12864(60000);
delay_12864(60000); //Retraso
wrtcom_12864(0x04); //Desactivar la visualización destacada
wrtcom_12864(0x30); el conjunto de comandos básico
Configuración de funciones extendidas: 0x36 activa la visualización del dibujo.
Cuando la GDRAM haya terminado de escribir, escribe 0x36 y la pantalla mostrará los gráficos que dibujaste.
0 0 0 0 1 DL x RE G x (RE=1 instrucción extendida, G=1 activa la pantalla de dibujo, DL=1 significa 8 es la interfaz)
Establecer GDRAM dirección: al dibujar, la dirección de GDRAM debe escribirse en el puntero de dirección antes de que se puedan escribir los datos. Escriba dos bytes continuamente, el primero es la dirección de la fila (Y), el segundo es la dirección de la columna (X).
Cabe señalar que después de escribir datos, el puntero de dirección aumentará automáticamente en uno (en palabras). Cuando se llegue al final de la línea, el siguiente incremento del puntero hará que el puntero de dirección aumente. retroceda al comienzo de la línea, es decir, si el valor de la dirección es 8FH, la próxima vez será 80H (tome la primera línea como ejemplo). La dirección del puntero recorre esta fila.
Después de presentar las instrucciones
Hablemos del proceso de inicialización. Simplemente siga los pasos de inicialización proporcionados en el manual ST7920.
La función de inicialización es la siguiente:
//Retraso de subrutina
void delay_12864(unsigned int del){
unsigned int i ;
for(i = 0; i lt; del; i){; }
}
//Inicializar subfunción 12864
void inicial_12864(void){
delay_12864(40000);
RST_12864 = 1;
RST_12864 = 0; //Restablecer
delay_12864(500);
RST_12864 = 1;
wrtcom_12864(0x30); //Establecer como acción de conjunto de instrucciones básicas
delay_12864(100) ;
wrtcom_12864(0x30); //Establecer como acción de conjunto de instrucciones básicas
delay_12864(37);
wrtcom_12864(0x08); cursor, parpadeando todo apagado.
delay_12864(100);
wrtcom_12864(0x01); //Borrar la pantalla y borrar el puntero de datos DDRAM
delay_12864(100000);
wrtcom_12864(0x06); //Ingresar a la configuración del modo
}