Post on 28-Oct-2014
06/04/2011
1
Programación en lenguaje C para
Microcontroladores PIC
LCD HD44780
Ing. Germán Jesús Pereira MuñozIng. Germán Jesús Pereira Muñoz
Detalle del LCD
DETALLE DE LOS PINES
CONJUNTO DE INSTRUCCIONES
06/04/2011 Ing. Germán Jesús Pereira Muñoz5
DETALLE DE LOS BITS
06/04/2011
2
PATRONES DE LOS CARACTERES
•Para que imprima “A” en la pantalla del LCD se necesita el patron 01000001 = 0x41
• 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, 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
06/04/2011 Ing. Germán Jesús Pereira Muñoz8
CODIGO ALFANUMERICO: “A” “Z” y “a” “z”
Ventana VisibleDDRAM (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.
• Tiene un tamaño de 2 líneas x 40 bytes/línea = 80 bytes.
• Direcciones no contiguas entre línea 1 y 2:
06/04/2011
3
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. Los
puertos de Control (ctrlport) y Datos (dataport) usan la asignación de terminales especificada.
• void Lcd8_Config( unsigned short *ctrlport,unsigned short *dataport,unsigned short RS,unsigned short EN,unsigned short WR,unsigned short D7,unsigned short D6,unsigned short D5,unsigned short D4,unsigned short D3,unsigned short D2,unsigned short D1,
unsigned short D0 );
06/04/2011
4
Lcd8_Config 2Ejemplo:Lcd8_Config(&PORTA,&PORTB,0,1,2,7,6,5,4,3,2,1,0);
Lcd8_Config 2Ejemplo:Lcd8_Config(&PORTC,&PORTD,0,1,2,0,1,2,3,4,5,6,7);
Lcd8_Init• Descripción: Inicializa el LCD usando un bus de 8 bits.
Los puertos de Control (ctrlport) y Datos (dataport) usan la siguiente asignación de terminales.-
E → ctrlport.6
RS → ctrlport.4
R/W → ctrlport.5
D7 → dataport.7 D6 → dataport.6
D5 → dataport.5
D4 → dataport.4
D3 → dataport.3
D2 → dataport.2 D1 → dataport.1
D0 → dataport.0
• void Lcd8_Init(unsigned short *ctrlport, unsigned short *dataport);
Lcd8_Init 2Ejemplo:Lcd8_Init(&PORTB, &PORTC);
Lcd8_Out• Descripción: Imprime mensaje en el LCD en la
fila y columna especificada (row y col).
• void Lcd8_Out( unsigned short row,
unsigned short col,
char *text );
• Ejemplo:
-Imprime “Hello!” en el LCD en la linea 1, columna 3
Lcd8_Out(1, 3, "Hello!");
Lcd8_Out_Cp• Descripción: Imprime mensaje en el LCD en la
posición actual del cursor.
• void Lcd8_Out_Cp(char *text);
• Ejemplo: Imprime “Here!” en la posición actual del cursor
Lcd8_Out_Cp("Here!");
06/04/2011
5
Lcd8_Chr• Descripción: Imprime un caracter en el LCD en
la fila y columna especificada (row y col).
• void Lcd8_Chr( unsigned short row,
unsigned short col,
char character );
Ejemplo: Imprime la letra “i” en el LCD en la línea 2,y columna 3
Lcd8_Out(2, 3, 'i');
Lcd8_Chr_Cp• Descripción: Imprime un caracter en el LCD en la
posición actual del cursor.
• void Lcd8_Chr_Cp(char character);
• Ejemplo: Imprime la letra “e” en la posición actual del cursor
Lcd8_Chr_Cp('e');
Lcd8_Cmd• Descripción: Envía un comando al LCD. Se puede
pasar a la función una de las constantes predefinidas.
• void Lcd8_Cmd(unsigned short command);
• Ejemplo: Limpia el LCD
Lcd8_Cmd(LCD_CLEAR);
Comandos predefinidosComando Función
LCD_FIRST_ROW Mueve el cursor a la 1a. fila.
LCD_SECOND_ROW Mueve el cursor a la 2a. fila.
LCD_THIRD_ROW Mueve el cursor a la 3a. fila.
LCD_FOURTH_ROW Mueve el cursor a la 4a. fila.
LCD_CLEAR Limpia el display.
LCD_RETURN_HOME Regresa el cursor a la posición 1,1. Los datos de la RAM no son afectados.
LCD_CURSOR_OFF Apaga el cursor.
LCD_UNDERLINE_ON Coloca el caracter subrayado.
LCD_BLINK_CURSOR_ON Parpadeo del cursor.
LCD_MOVE_CURSOR_LEFT Mueve el cursor hacia la izquierda sin cambiar la RAM
LCD_MOVE_CURSOR_RIGHT Mueve el cursor hacia la derecha sin cambiar el contenido de la RAM
LCD_TURN_ON Enciende el display
LCD_TURN_OFF Apaga el display
LCD_SHIFT_LEFT Mueve el display hacia la izquierda sin cambiar el contenido de la RAM
LCD_SHIFT_RIGHT Mueve el display hacia la derecha sin cambiar el contenido de la RAM
LCD 8 BITS• Diseñar el programa que inicialice un LCD, usando un
bus de datos de 8 bits, y a continuación mande un mensaje de bienvenida.
• El mensaje debe desplazarse hacia la izquierda a derecha en forma continua.
LCD 8 BITS (algoritmo)• 1. Inicialice los puertos de datos y control.
• 2. Envía mensaje a desplegar.
• 3. Envía comando de desplazamiento hacia la izquierda y la derecha.
• 4. Repite el paso 3.
06/04/2011
6
LCD 8 BITS (esquemático) LCD 8 BITS(programa 1)
Ejercicio propuesto• Programa que forme la palabra ‘HOLA’ en un
LCD, configurado para utilizar un bus de 8 bits. Las letras deben desplazarse de derecha a izquierda. Primero debe aparecer la H, moviendose desde la derecha a la primer columna a la izquierda. Enseguida debe aparecer la O, tambien saliendo de la derecha y terminando a la derecha de la letra H. Lo mismo debe suceder para las letras L y A. El programa debe ser ciclico.
H
H
H O
H
O
O
H
H
H O
H O L A
L
H O L A
LCD (funciones bus 4 bits)• Lcd_Config
• Lcd_Init
• Lcd_Out
• Lcd_Out_Cp
• Lcd_Chr
• Lcd_Chr_Cp
• Lcd_Cmd
Lcd_Config• Descripción: Inicializa LCD usando un bus de datos de
4 bits. • El puerto de Control (ctrlport) y Datos (dataport) tiene las
asignaciones de terminales especificadas.
• void Lcd_Config( unsigned short *ctrl_data_port,
unsigned short RS,unsigned short EN,unsigned short WR,unsigned short D7,unsigned short D6,unsigned short D5,
unsigned short D4 );
06/04/2011
7
Lcd_Config 2Ejemplo:
Lcd_Config(&PORTC,1,3,2,4,5,6,7);
Lcd_Config 2Ejemplo:
Lcd_Config(&PORTC,0,1,2,4,5,6,7);
Lcd_Init• Descripción: Inicializa el LCD usando un bus de
4 bits. • El puerto de Control (ctrlport) y Datos (dataport)
tiene la siguiente asignación de terminales.-E → ctrl_data_port.3RS → ctrl_data_port.2 D7 → ctrl_data_port.7 D6 → ctrl_data_port.6D5 → ctrl_data_port.5 D4 → ctrl_data_port.4
• void Lcd_Init(unsigned short *ctrl_data_port);
Lcd_Init 2Ejemplo:
Lcd_Init(&PORTB);
Lcd_Out
• Descripción: Imprime mensaje en el LCD en la fila y columna especificada (row y col).
• void Lcd_Out( unsigned short row,
unsigned short col,
char *text );
• Ejemplo:
-Imprime “Hello!” en el LCD en la línea 1, columna 3
Lcd_Out(1, 3, "Hello!");
Lcd_Out_Cp• Descripción: Imprime mensaje en el LCD en la
posición actual del cursor.
• void Lcd_Out_Cp(char *text);
• Ejemplo:
- Imprime “Here!” en la posición actual del cursor
Lcd_Out_Cp("Here!");
06/04/2011
8
Lcd_Chr• Descripción: Imprime un caracter en el LCD en
la fila y columna especificada (row y col).
• void Lcd_Chr( unsigned short row,
unsigned short col,
char character );
Ejemplo:
- Imprime la letra ‘i’ en el LCD en la línea 2,y columna 3
Lcd_Out(2, 3, 'i');
Lcd_Chr_Cp• Descripción: Imprime un caracter en el LCD en
la posición actual del cursor.
• void Lcd_Chr_Cp(char character);
• Ejemplo:
- Imprime la letra ‘e’ en la posición actual del cursor
Lcd_Chr_Cp('e');
Lcd_Cmd• Descripción: Envía un comando al LCD.
• Se puede pasar a la función una de las constantespredefinidas. Los comandos son los mismos para ambosmodos de manejo del LCD (bus 8 o 4 bits).
• void Lcd_Cmd(unsigned short command);
• Ejemplo:
- Apaga el cursor, no aparece en el LCD
Lcd_Cmd(LCD_CURSOR_OFF);
LCD 4 BITS• Diseñar el programa que inicialice un LCD, usando un
bus de datos de 4 bits, y a continuación mande un mensaje cualquiera de bienvenida. El mensaje debe desplazarse hacia la derecha en forma continua.
LCD 4 BITS (algoritmo)• Inicialice los puertos de datos y control.
• Envía mensaje a desplegar.
• Envía comando de desplazamiento hacia la derecha.
• Repite el paso 3.
LCD 4 BITS (esquemático Config)
06/04/2011
9
LCD 4 BITS (programa 2)
LCD 4 BITS (esquemático Init)
Conversión de tipo de datosTipo de dato a cadena
•ByteToStr
•ShortToStr
•WordToStr
•IntToStr
•LongToStr
•FloatToStr
ByteToStrDescripcion: Crea una cadena de salida de un pequeño numero sin signo (valor numérico menos a 0x100 == 256 ).
La cadena esta ajustada a un ancho de 3 caracteres;
Las posiciones a la izquierda que no se usan en la conversión se rellenan con espacios.
void ByteToStr(unsigned short number, char *output);
Ejemplo:
unsigned short t = 24;
char *txt=“ “; //se inicializa un apuntador a 4 espacios
ByteToStr(t, txt); // txt es " 24" (un espacio en blanco)
ShortToStrDescripción: Crea una cadena de salida de un numero pequeño con signo (valor numérico menor a 0x100).
La cadena esta ajustada a un ancho de 4 caracteres;
Las posiciones a la izquierda que no se usan en la conversión se rellenan con espacios.
void ShortToStr(short number, char *output);
Ejemplo:
short t = -4;
char *txt=“ “; // Se inicializa un apuntador de 5 espacios
ShortToStr(t, txt); // txt es " -4" (dos espacio en blanco)
WordToStrDescripción: Crea una cadena de salida de un numero sin signo (Valor numérico de una variable unsigned).
La cadena esta ajustada a un ancho de 5 caracteres;
Las posiciones a la izquierda que no se usan en la conversión se rellenan con espacios.
void WordToStr(unsigned number, char *output);
Ejemplo:
unsigned t = 437;
char *txt=“ “; // Inicializa un apuntador con 6 espacios
WordToStr(t, txt); // txt es “ 437" (dos espacios vacios)
06/04/2011
10
IntToStrDescripción: Crea una cadena de salida de un numero con signo (Valor numérico de una variable int).
La cadena esta ajustada a un ancho de 6 caracteres;
Las posiciones a la izquierda que no se usan en la conversión se rellenan con espacios.
void IntToStr(int number, char *output);
Ejemplo:
int j = -4220;
char *txt=“ “; // Inicializa un apuntador con 6 espacios
IntToStr(j, txt); // txt es " -4220" (un espacio en blanco)
LongToStrDescripción: Crea una cadena de salida de un numero largo con signo (Valor numérico de una variable long).
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.
void LongToStr(long number, char *output);
Ejemplo:
long jj = -3700000;
char *txt=“ “; // Inicializa un apuntador con 12 espacios
LongToStr(jj, txt); // txt es “ -3700000" (3 espacios en blanco)
FloatToStrDescripción: Crea una cadena de salida de un numero de punto f lotante.
La cadena contiene un formato normalizado de un numero (mantisa entre 0 y 1) con signo en la primera posición.
La mantisa esta ajustada a un formato de 6 dígitos, 0.ddddd;
Hay siempre 5 dígitos a continuación del punto decimal.
void FloatToStr(float number, char *output);
Ejemplo:
float ff = -374.2;
char *txt=“ “; // Inicializa un apuntador con 14 espacios
FloatToStr(ff, txt); // txt es "-0.37420e3"
Contador 0-9 (problema) • Se quiere un programa que visualice un conteo de 0 a
9 en un LCD.
Contador 0-9 (algoritmo)1. 1. Configura el LCD
2. 2. Inicializa el contador
3. 3. Convierte a ASCII el valor del contador
4. 4. Envía valor en ASCII al LCD
5. 5. Incrementa el contador
6. 6. Regresa a 3
Contador 0-9 (programa)
06/04/2011
11
Contador 0-9 (esquemático) Ejercicio propuesto• Programa que utilice un LCD, configurado para usar
un bus de 8 bits.• En el LCD deben aparecer en forma secuencial, los
números de la secuencia 1 – 2 – 4 – 8 – 16 – 32 – 64 –128 – 256 – 512 – 1024 – 2048 – 4096 – 8192 – 16384 -32768.
• Los numero deben ser generados por operacionesaritméticas.
• El desplegado debe hacerse de la forma mostrada enlas siguientes figuras.
• Se utiliza la segunda fila, presentando hasta 3numeros consecutivos, un numero a la izquierda,uno mas al centroy otro a la derecha.
Ejercicio propuesto
Serie de numeros Serie de numeros1
Serie de numeros1 2
Serie de numeros1 2 4
Serie de numeros8
Serie de numeros8 16
Serie de numeros8 16 32
Serie de numeros8192 16384 32768
Serie de numeros64 128 256
Ejercicio propuesto• El alumno diseñara un programa en donde se
muestre en un LCD los números desde 00 hasta el 99.
• Con un intervalo de tiempo entre cambio igual a 500 milisegundos.
Ejercicio propuesto
Contador 00-99 cada 500 mseg00
Contador 00-99 cada 500 mseg 01
Contador 00-99 cada 500 mseg 02
Contador 00-99 cada 500 mseg03
Contador 00-99 cada 500 mseg04
Contador 00-99 cada 500 mseg05
Contador 00-99 cada 500 mseg06
Contador 00-99 cada 500 mseg99