You are on page 1of 11

06/04/2011

Detalle del LCD
Programación en lenguaje C para Microcontroladores PIC LCD HD44780
Ing. Germán Jesús Pereira Muñoz

DETALLE DE LOS PINES

CONJUNTO DE INSTRUCCIONES

DETALLE DE LOS BITS

06/04/2011

5

Ing. Germán Jesús Pereira Muñoz

1

06/04/2011 PATRONES DE LOS CARACTERES • Driver para LCD de matriz de puntos para representación de caracteres y símbolos en formato 5x8 ó 5x10 • Dispone de 240 patrones de caracteres almacenados en ROM. • Tiene un tamaño de 2 líneas x 40 bytes/línea = 80 bytes. • Direcciones no contiguas entre línea 1 y 2: 2 . de los cuales 208 son de tamaño 5x8 y 32 de tamaño 5x10 • Memoria RAM de pantalla (DDRAM) de 80 posiciones x 8 bits/posición • Contenido en 8 bits (DDRAM): código del carácter para un generador de caracteres ROM con 240 caracteres posibles 8 posiciones (dobles) para caracteres definibles por el usuario en una memoria CGRAM (caracteres gráficos) • Visibles 1 ó 2 líneas de 16 caracteres/línea •Para que imprima “A” en la pantalla del LCD se necesita el patron 01000001 = 0x41 06/04/2011 8 Ing. Germán Jesús Pereira Muñoz CODIGO ALFANUMERICO: “A”  “Z” y “a”  “z” Ventana Visible DDRAM (Display Data RAM) • Almacena el código de los caracteres que están siendo visualizados o que se encuentran en posiciones no visibles debido a la posición de la ventana de visualización.

unsigned short D2. 3 . unsigned short EN. unsigned short D7. unsigned short D1. unsigned short D3. unsigned short *dataport. unsigned short RS. unsigned short D4. • void Lcd8_Config( unsigned short *ctrlport. unsigned short WR.06/04/2011 PATRONES DE CARACTERES ROM A00 PATRONES DE CARACTERES ROM A00 PATRONES DE CARACTERES ROM A02 Display de cristal liquido LCD (funciones bus 8 bits) • • • • • • • Lcd8_Config Lcd8_Init Lcd8_Out Lcd8_Out_Cp Lcd8_Chr Lcd8_Chr_Cp Lcd8_Cmd Lcd8_Config • Descripción: Inicializa el LCD usando un bus de datos de 8 bits. unsigned short D5. unsigned short D0 ). Los puertos de Control (ctrlport) y Datos (dataport) usan la asignación de terminales especificada. unsigned short D6.

Lcd8_Init • Descripción: Inicializa el LCD usando un bus de 8 bits. Lcd8_Out_Cp • Descripción: Imprime mensaje en el LCD en la posición actual del cursor.2.1.5 D4 → dataport. unsigned short *dataport).&PORTD.1.6.0 Lcd8_Init 2 Ejemplo: Lcd8_Init(&PORTB. Lcd8_Config 2 Ejemplo: Lcd8_Config(&PORTC. 4 .&PORTB.7. char *text ).3 D2 → dataport. • void Lcd8_Init(unsigned short *ctrlport.7 D6 → dataport.4.4 R/W → ctrlport.3. • Ejemplo: -Imprime “Hello!” en el LCD en la linea 1.1 D0 → dataport.6 D5 → dataport.2.4.1.0).0. • void Lcd8_Out_Cp(char *text).0.06/04/2011 Lcd8_Config 2 Ejemplo: Lcd8_Config(&PORTA.2.5.6 RS → ctrlport.3.2 D1 → dataport.4 D3 → dataport. unsigned short col. "Hello!"). • Ejemplo: Imprime “Here!” en la posición actual del cursor Lcd8_Out_Cp("Here!"). Lcd8_Out • Descripción: Imprime mensaje en el LCD en la fila y columna especificada (row y col).6.5 D7 → dataport. • void Lcd8_Out( unsigned short row. &PORTC). Los puertos de Control (ctrlport) y Datos (dataport) usan la siguiente asignación de terminales. 3.0.7).1. columna 3 Lcd8_Out(1.E → ctrlport.5.2.

fila.1. Comandos predefinidos Lcd8_Cmd • Descripción: Envía un comando al LCD. • Ejemplo: Imprime la letra “e” en la posición actual del cursor Lcd8_Chr_Cp('e'). Mueve el cursor a la 3a. Limpia el display. Apaga el cursor. 3.06/04/2011 Lcd8_Chr • Descripción: Imprime un caracter en el LCD en la fila y columna especificada (row y col). Mueve el cursor a la 4a. • void Lcd8_Cmd(unsigned short command). Coloca el caracter subrayado. Mueve el cursor a la 2a. Parpadeo del cursor. 2. 5 . Se puede pasar a la función una de las constantes predefinidas. fila. Mueve el cursor hacia la izquierda sin cambiar la RAM Mueve el cursor hacia la derecha sin cambiar el contenido de la RAM Enciende el display Apaga el display Mueve el display hacia la izquierda sin cambiar el contenido de la RAM Mueve el display hacia la derecha sin cambiar el contenido de la RAM LCD 8 BITS • Diseñar el programa que inicialice un LCD. Comando LCD_FIRST_ROW LCD_SECOND_ROW LCD_THIRD_ ROW LCD_FOURTH_ROW LCD_CLEAR LCD_RETURN_ HOME LCD_CURSOR_ OFF LCD_UNDE RLINE_ ON LCD_BLINK_ CURSOR_ ON LCD_MOVE_ CURSOR_LEFT LCD_MOVE_ CURSOR_ RIGHT LCD_TURN_ON LCD_TURN_OFF LCD_SHIFT_LEFT LCD_SHIFT_RIGHT Función Mueve el cursor a la 1a. fila. 'i' ). • void Lcd8_Chr_Cp(char character). usando un bus de datos de 8 bits. Inicialice los puertos de datos y control. • Ejemplo: Limpia el LCD Lcd8_Cmd(LCD_CLEAR). LCD 8 BITS (algoritmo) • • • • 1. unsigned short col. y a continuación mande un mensaje de bienvenida. Lcd8_Chr_Cp • Descripción: Imprime un caracter en el LCD en la posición actual del cursor. • void Lcd8_Chr( unsigned short row.y columna 3 Lcd8_Out(2. Los datos de la RAM no son afectados. Envía mensaje a desplegar. Repite el paso 3. char character ). 4. 3. fila. Ejemplo: Imprime la letra “i” en el LCD en la línea 2. • El mensaje debe desplazarse hacia la izquierda a derecha en forma continua. Envía comando de desplazamiento hacia la izquierda y la derecha. Regresa el cursor a la posición 1.

unsigned short RS. unsigned short WR. configurado para utilizar un bus de 8 bits. unsigned short D4 • Descripción: Inicializa LCD usando un bus de datos de ).06/04/2011 LCD 8 BITS (esquemático) LCD 8 BITS ) ( programa 1 Ejercicio propuesto • Programa que forme la palabra ‘HOLA’ en un LCD. Primero debe aparecer la H. Enseguida debe aparecer la O. unsigned short D7. tambien saliendo de la derecha y terminando a la derecha de la letra H. Lo mismo debe suceder para las letras L y A. moviendose desde la derecha a la primer columna a la izquierda. 6 . El programa debe ser ciclico. • El puerto de Control (ctrlport) y Datos (dataport) tiene las asignaciones de terminales especificadas. • void Lcd_Config( unsigned short *ctrl_data_port. unsigned short D5. Las letras deben desplazarse de derecha a izquierda. unsigned short D6. unsigned short EN. H H H O HO L H O HOL H A H O HO LA LCD (funciones bus 4 bits) • • • • • • • Lcd_Config Lcd_Init Lcd_Out Lcd_Out_Cp Lcd_Chr Lcd_Chr_Cp Lcd_Cmd Lcd_Config 4 bits.

7).2. • void Lcd_Out( unsigned short row. Lcd_Out_Cp • Descripción: Imprime mensaje en el LCD en la posición actual del cursor.4.5. • void Lcd_Out_Cp(char *text).0.Imprime “Here!” en la posición actual del cursor • Ejemplo: -Imprime “Hello!” en el LCD en la línea 1. • Ejemplo: . 3.4 • void Lcd_Init(unsigned short *ctrl_data_port). "Hello!"). Lcd_Init 2 Ejemplo: Lcd_Init(&PORTB). Lcd_Out • Descripción: Imprime mensaje en el LCD en la fila y columna especificada (row y col).2 D7 → ctrl_data_port. columna 3 Lcd_Out(1. Lcd_Out_Cp("Here!").4. Lcd_Config 2 Ejemplo: Lcd_Config(&PORTC.E → ctrl_data_port. char *text ).6.3.1.1.6 D5 → ctrl_data_port.3 RS → ctrl_data_port. • El puerto de Control (ctrlport) y Datos (dataport) tiene la siguiente asignación de terminales.7).5.06/04/2011 Lcd_Config 2 Ejemplo: Lcd_Config(&PORTC. 7 .5 D4 → ctrl_data_port.6. Lcd_Init • Descripción: Inicializa el LCD usando un bus de 4 bits.7 D6 → ctrl_data_port. unsigned short col.2.

y columna 3 . Repite el paso 3. no aparece en el LCD Lcd_Cmd(LCD_CURSOR_OFF).Apaga el cursor. El mensaje debe desplazarse hacia la derecha en forma continua. 3. Envía comando de desplazamiento hacia la derecha. Lcd_Cmd • Descripción: Envía un comando al LCD. LCD 4 BITS (esquemático Config) 8 . LCD 4 BITS • Diseñar el programa que inicialice un LCD. • Ejemplo: . • void Lcd_Cmd(unsigned short command). Lcd_Chr_Cp • Descripción: Imprime un caracter en el LCD en la posición actual del cursor. • void Lcd_Chr( unsigned short row.Imprime la letra ‘i’ en el LCD en la línea 2. LCD 4 BITS (algoritmo) • • • • Inicialice los puertos de datos y control. Los comandos son los mismos para ambos modos de manejo del LCD (bus 8 o 4 bits). Envía mensaje a desplegar. unsigned short col.Imprime la letra ‘e’ en la posición actual del cursor Lcd_Chr_Cp('e'). • void Lcd_Chr_Cp(char character). 'i' ). Lcd_Out(2. usando un bus de datos de 4 bits. char character ). • Ejemplo: Ejemplo: .06/04/2011 Lcd_Chr • Descripción: Imprime un caracter en el LCD en la fila y columna especificada (row y col). y a continuación mande un mensaje cualquiera de bienvenida. • Se puede pasar a la función una de las constantes predefinidas.

Las posiciones a la izquierda que no se usan en la conversión se rellenan con espacios. //se inicializa un apuntador a 4 espacios ByteToStr(t. char *output). // Inicializa un apuntador con 6 espacios // txt es “ 437" (dos espacios vacios) void ShortToStr(short number. void WordToStr(unsigned number. Ejemplo: short t = -4. char *txt=“ WordToStr(t. Las posiciones a la izquierda que no se usan en la conversión se rellenan con espacios. char *output). txt). char *output). La cadena esta ajustada a un ancho de 5 caracteres.06/04/2011 LCD 4 BITS ) ( programa 2 LCD 4 BITS (esquemático Init) Conversión de tipo de datos Tipo de dato a cadena • ByteToStr • ShortToStr • WordToStr • IntToStr • LongToStr • FloatToStr ByteToStr Descripcion: Crea una cadena de salida de un pequeño numero sin signo (valor numérico menos a 0x100 == 256 ). // txt es " -4" (dos espacio en blanco) 9 . Ejemplo: unsigned t = 437. “. Ejemplo: unsigned short t = 24. void ByteToStr(unsigned short number. txt). char *txt=“ “. // txt es " 24" (un espacio en blanco) ShortToStr Descripción: Crea una cadena de salida de un numero pequeño con signo (valor numérico menor a 0x100). // Se inicializa un apuntador de 5 espacios char *txt=“ “. WordToStr Descripción: Crea una cadena de salida de un numero sin signo (Valor numérico de una variable unsigned). Las posiciones a la izquierda que no se usan en la conversión se rellenan con espacios. txt). La cadena esta ajustada a un ancho de 4 caracteres. ShortToStr(t. La cadena esta ajustada a un ancho de 3 caracteres.

txt). Inicializa el contador 3. LongToStr(jj. LongToStr Descripción: Crea una cadena de salida de un numero largo con signo (Valor numérico de una variable long). txt). // Inicializa un apuntador con 6 espacios // txt es " -4220" (un espacio en blanco) void LongToStr(long number. char *output).2. Hay siempre 5 dígitos a continuación del punto decimal. Incrementa el contador 6. 0. La cadena esta ajustada a un ancho de 11 caracteres. Las posiciones a la izquierda que no se usan en la conversión se rellenan con espacios. Convierte a ASCII el valor del contador 4. Ejemplo: float ff = -374. char *output). La cadena esta ajustada a un ancho de 6 caracteres. char *txt=“ “. 5. Configura el LCD 2. 6.ddddd.06/04/2011 IntToStr Descripción: Crea una cadena de salida de un numero con signo (Valor numérico de una variable int). // Inicializa un apuntador con 12 espacios // txt es “ -3700000" (3 espacios en blanco) IntToStr(j. // Inicializa un apuntador con 14 espacios FloatToStr(ff.37420e3" Contador 0-9 (algoritmo) 1. Ejemplo: long jj = -3700000. char *output). 3. void FloatToStr(float number. txt). // txt es "-0. Ejemplo: int j = -4220. La mantisa esta ajustada a un formato de 6 dígitos. void IntToStr(int number. Contador 0-9 (problema) • Se quiere un programa que visualice un conteo de 0 a 9 en un LCD. FloatToStr Descripción: Crea una cadena de salida de un numero de punto f lotante. 2. La cadena contiene un formato normalizado de un numero (mantisa entre 0 y 1) con signo en la primera posición. 1. 4. char *txt=“ “. Envía valor en ASCII al LCD 5. Las posiciones a la izquierda que no se usan en la conversión se rellenan con espacios. char *txt=“ “. Regresa a 3 Contador 0-9 (programa) 10 .

un numero a la izquierda. uno mas al centro y otro a la derecha. Los numero deben ser generados por operaciones aritméticas. configurado para usar un bus de 8 bits. • • • Ejercicio propuesto Serie de numeros Serie de numeros 1 Serie de numeros 1 2 Ejercicio propuesto • El alumno diseñara un programa en donde se muestre en un LCD los números desde 00 hasta el 99. El desplegado debe hacerse de la forma mostrada en las siguientes figuras.06/04/2011 Contador 0-9 (esquemático) Ejercicio propuesto • • Programa que utilice un LCD. En el LCD deben aparecer en forma secuencial. presentando hasta 3 numeros consecutivos. Serie de numeros 1 2 4 Serie de numeros 8 Serie de numeros 8 16 • Serie de numeros 8 16 32 Serie de numeros 64 128 256 Serie de numeros 8192 16384 32768 Ejercicio propuesto Contador 00-99 cada 500 mseg 00 Contador 00-99 cada 500 mseg 01 Contador 00-99 cada 500 mseg 02 Contador 00-99 cada 500 mseg 03 Contador 00-99 cada 500 mseg 04 Contador 00-99 cada 500 mseg 05 Contador 00-99 cada 500 mseg 06 Contador 00-99 cada 500 mseg 99 11 . Se utiliza la segunda fila. Con un intervalo de tiempo entre cambio igual a 500 milisegundos. los números de la secuencia 1 – 2 – 4 – 8 – 16 – 32 – 64 – 128 – 256 – 512 – 1024 – 2048 – 4096 – 8192 – 16384 32768.