11
06/04/2011 1 Programación en lenguaje C para Microcontroladores PIC LCD HD44780 Ing. Germán Jesús Pereira Muñoz Ing. 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ñoz 5 DETALLE DE LOS BITS

4 LCD HD44780 Con MikroC

Embed Size (px)

Citation preview

Page 1: 4 LCD HD44780 Con MikroC

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

Page 2: 4 LCD HD44780 Con MikroC

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:

Page 3: 4 LCD HD44780 Con MikroC

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 );

Page 4: 4 LCD HD44780 Con MikroC

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!");

Page 5: 4 LCD HD44780 Con MikroC

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.

Page 6: 4 LCD HD44780 Con MikroC

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 );

Page 7: 4 LCD HD44780 Con MikroC

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!");

Page 8: 4 LCD HD44780 Con MikroC

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)

Page 9: 4 LCD HD44780 Con MikroC

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)

Page 10: 4 LCD HD44780 Con MikroC

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)

Page 11: 4 LCD HD44780 Con MikroC

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