Presentador de cristal líquido
Liquid Cristal Display
El LCD (pantalla de exhibición de cristal líquido) es un dispositivo de bajo 
consumo de energía que nos permite visualizar caracteres alfanuméricos y 
símbolos de puntuación . Existen una gran variedad de LCD clasificadas en 2 
grupos principalmente:
LCD alfanumérico (de caracteres)
LCD gráficos 
Su voltaje de alimentación más común es de 5v y su consumo es de 5 mA
aproximadamente.
La comunicación más común con el controlador 
del LCD es de forma paralela; aunque
puede ser de forma serial RS232, SPI o I2c.
Introducción 
El LCD tiene almacenados 240 símbolos en su memoria interna para mostrar 
todos los símbolos alfanuméricos y símbolos de puntuación contenidos en la 
tabla de códigos ASCII‐7 y se pueden codificar 8 símbolos definidos por el 
usuario.
Los símbolos alfanuméricos y los definidos por el usuario se representan en 
matrices de 5x8 y/o 5.10 puntos por carácter.
LCD DE CARACTERES
Los caracteres y símbolos más usado por 
nosotros en la tabla ASCII, están en las 
direcciones  0x20 hasta 0x7f, los demás 
símbolos  del 0x80 al 0xff son usados 
principalmente en asía.
Los símbolos del 0 al 7 están libres para 
que el usuario los defina  
Tabla de símbolos del LCD
Tabla de símbolos del LCD y códigos 
ASCII‐7
Es la memoria que almacena los caracteres alfanuméricos del mensaje que 
se quiere mostrar.
El mapa de la memoria DDRAM esta constituido por dos bloques de 40 bytes 
cada uno; los primeros 40 bytes localizados en la dirección 0x00 a la 0x27, 
asociadas con las posiciones del display (1,1) y (40,1) respectivamente. Los 
siguientes 40 bytes localizados en la dirección 0x40 a la 0x67, las cuales 
corresponden a las posiciones del display (1,2) y (40,2).
Vea la siguiente figura para su mejor comprensión
Memoría DDRAM (Display Data RAM)
La memoria DDRAM tiene la capacidad de almacenar 40 caracteres por 
línea; sin embargo, el visualizador gráfico, presentador o display solo puede 
exhibir los primeros 16 caracteres .
Como se verá más adelante, existen comandos que le indican al manejador 
del display que desplace el mensaje a la izquierda o derecha, dando un 
efecto de marquesina de 16 caracteres.
La CGRAM contiene los caracteres que pueden ser personalizados por el 
usuario; está formada por 64 posiciones de 5 bits cada una localizadas en la 
0x00 a la 0x3f. 
La memoria esta dividida en 8 bloques que corresponden a las filas que tiene 
la  matriz del carácter, de manera que un 1 indica un punto encendido en la 
matriz y un 0 apagado. Tal como se muestra en la siguientes figuras.
Memoria CG RAM (carácter generator
RAM) 
El LCD tiene 2 tipos de bus
Bus de datos
Bus de control
El bus de datos puede ser configurado de 8 o 4 
bits, utilizándose solamente D4 a D7 y 
dejándose D0 a D3 al aire en el segundo caso
El bus de control esta formado por las señales 
RW: 1 indica lectura y 0 escritura
RS: Selecciona el registro del LCD, 
con RS =0 selecciona el registro de control y con 
RS=1 selecciona el registro de datos 
E : Es la señal de validación, ésta 
permanece normalmente en 0 y cambia de 
estado para validar la información cambiando al 
estado original después de un tiempo.
Conexión de un LCD
Control 
#Bits 
Bus a 4 bits Bus a 8 bits
Bucle 
cerrado  
OPCION A
Bits
necesarios: 
7
4 pines 
deben ser 
E/S
OPCION B
Bits
necesarios: 
11
4 pines 
deben ser 
E/S
Bucle
Abierto
OPCION C
Bits
necesarios: 
6
6 pines solo 
de salida
OPCION D
Bits
necesarios: 
10
10 pines
solo de 
salida
Conexión de un LCD
La secuencia de inicio ejecutada es la siguiente:
1. Selección de la longitud del bus de datos ( 4 Bits / 8 Bits ). Se ejecuta el 
comando FUNCTION SET, que establece el interfaz con el Bus de datos. Se 
elige por defecto el tamaño del bus de datos a 8 bits (DL=1) y el número de 
renglones del display en 2 (N=1)  DBUS=0x38.
2. Se ejecuta el comando DISPLAY ON/OFF CONTROL, que hace que el 
display que en ON (D=1); también cursor en ON (C=1) y con parpadeo del 
cursor en (B=1). DBUS=0x0F 
3. Se ejecuta el comando ENTRY MODE SET, que establece la dirección de 
movimiento del cursor con autoincremento del cursor (I/D=1) y modo 
normal, sin desplazamiento del display (S=0). DBUS=0x06
4. . Se ejecuta el comando CLEAR DISPLAY borrando la pantalla. 
DBUS=0x01
*ver tabla de comandos en la diapositiva 18 
Secuencia de inicialización
1.Poner la señal E siempre a 0 o a 1 antes de realizar cualquier operación
2. Poner RS=1 y R/W=0
3. Situar el dato a imprimir en el bus de datos del LCD (En este ejemplo se 
enviaría $41)
4. Dar un pulso en E con duración mínima de 300 ns
5. El carácter ha sido impreso en el LCD.
Temporización a 8 bits
1. Poner la señal E siempre a 0 o a 1 antes de realizar cualquier operación
2.‐Poner RS=1 y R/W=0
2. Situar el valor 0x40 en el bus de datos del LCD (4 bits más significativos)
3. Dar un pulso en E con duración mínima de 300 ns
4. Situar el valor 0x10 en el bus de datos del LCD (4 bits menos significativos)
6. Dar un pulso en E con duración mínima de 300 ns
7. El carácter ha sido imprimido en el LCD
Temporización a 4 bits
Tabla de comandos del LCD
Código Descripción
0x01 Limpia pantalla de visualización
0x02 Regresa a posición inicial (dirección RAM 00H)
0x04 Desplaza cursor a la izquierda
0x05 Desplaza visualizador a la derecha
0x06 Desplaza cursor a la derecha
0x07 Desplaza visualizador a la izquierda
0x08 Visualizador apagado, cursor apagado
0x0a Visualizador apagado, cursor encendido
0x0c Visualizador encendido, cursor apagado
0x0e Visualizador encendido, cursor sin destello
0x0f Visualizador encendido, cursor con destello
0x10 Desplaza el cursor a la izquierda
0x14 Desplaza el cursor a la derecha
0x18 Desplaza todo el visualizador a la izquierda
0x1c Desplaza todo el visualizador a la derecha
0x28 Visualizador 2 líneas, matriz 5x8, interfaz 4 bits
0x38 Visualizador 2 líneas , matriz 5x8, interfaz 8 bits
0x80 Forzar cursor al inicio de la primera línea
0xc0 Forzar cursor al inicio de la segunda línea
Códigos de comando del LCD
Algoritmos del LCD
void LCD_COMANDO_4BITS(unsigned short int
comando)
{
LCD_E=0;
LCD_RS=0;
LCD_DBUS = comando&0xF0;//NIBLE ALTO
LCD_E=1;
//DELAY_US(40);//TIEMPO DE ESPERA 40US
LCD_E=0;
LCD_DBUS = (comando<<4)&0XF0;//NIBLE 
BAJO
LCD_E=1;
//DELAY_US(40);//TIEMPO DE ESPERA 40US
LCD_E=0;
}
Programación LCD opción C
void LCD_INICIAR_4BITS()
{
LCD_COMANDO_4BITS(DOBLE_LINEA_4_BITS);//0X28
LCD_COMANDO_4BITS(LCD_CURSOR_PARPADEO_ON)
;//0X0F;
LCD_COMANDO_4BITS(LCD_NO_DESP_INC_CURSOR);/
/0X06
LCD_COMANDO_4BITS(LCD_LIMPIAR);//0X01;
DELAY_US(1600);
}
void LCD_CARACTER_4BITS(char caracter)
{
LCD_E=0;
LCD_RS=1;
LCD_DBUS = caracter&0XF0;//NIBLE ALTO
LCD_E=1;
//DELAY_US(40);//TIEMPO DE ESPERA 40US
LCD_E=0;
LCD_DBUS = (caracter<<4)&0XF0;//NIBLE BAJO
LCD_E=1;
//DELAY_US(40);//TIEMPO DE ESPERA 40US
LCD_E=0;
}
void LCD_COMANDO_8BITS(unsigned short int
comando)
{
LCD_E=0;
LCD_RS=0;
LCD_DBUS = comando;
LCD_E=1;
//DELAY_US(40);//TIEMPO DE ESPERA 40US
LCD_E=0;
}
Programación LCD opción D
void LCD_INICIAR_8BITS()
{
LCD_COMANDO_8BITS(DOBLE_LINEA_8_BITS);//0X38
LCD_COMANDO_8BITS(LCD_CURSOR_PARPADEO_ON)
;//0X0F;
LCD_COMANDO_8BITS(LCD_NO_DESP_INC_CURSOR);/
/0X06
LCD_COMANDO_8BTS(LCD_LIMPIAR);//0X01;
DELAY_US(1600);
}
void LCD_CARACTER_8BITS(char caracter)
{
LCD_E=0;
LCD_RS=1;
LCD_DBUS = caracter;
LCD_E=1;
//DELAY_US(40);//TIEMPO DE ESPERA 40US
LCD_E=0;
}

Interfaz lcd