Sei sulla pagina 1di 4

Ing.

Electrnica Microcontroladores

PANTALLA LCD DE 16X2

Vamos como manejar un LCD de 16x2 con el pic 16F877A y el XC8. Primero hay que decir que el
lcd 16x2 es un mdulo bsico y de bajo costo y es usado en muchos productos y proyectos
electrnicos. 16x2 significa que tiene 16 columnas y 2 filas para displayar caracteres. Hay unas
variantes de 16x1 y 16x4. Cada carcter mostrado est compuesto por matrices de puntos de 5x8 o
5x10.
El dispositivo a usar es conocido como LM016L, el cual tiene algunas caractersticas importantes
como, por ejemplo:

Consumo reducido, del orden de 7,5mW.


Pantalla de caracteres ASCII, adems de los caracteres Kanji, caracteres griegos, y
smbolos matemticos.
Desplazamiento de los caracteres hacia la izquierda o a la derecha.
Memoria de 40 caracteres por lnea de pantalla, visualizndose 16 caracteres por lnea.
Movimiento del cursor y cambio de su aspecto.
Permite que el usuario pueda programar 8 caracteres.
Pueden ser programados de dos maneras: de 8 y de 16 bits.
Para controlar este lcd con XC8 necesitamos conocer el hardware del mismo. En su gran mayora el
controlador que usan en HD44780 Dot Matrix LCD Controller de la marca Hitachi

Los primeros dos pines con GND (Ground) y VCC (Fuente) los cuales proveen de alimentacin al
display. El tercer pin es VEE que usado para el control del contraste del LCD. Se recomienda usar
un potencimetro de 10K conectado a este pin. Para controlar a este LCD se necesitan de dos tipos
de informacin: de datos y de control.
La informacin son los caracteres en ASCII que sern mostrados en la pantalla y la informacin de
control determina otras operaciones como la posicin de los caracteres a mostrar, limpiar la
pantalla, desplazamientos, etc. Datos y control son enviados al LCD por las lneas de datos (DB0
DB7) usando multiplexacin en los pines RS (Register Select). Cuando RS esta en ALTO el LCD
trata a los pines DB0-DB7 como datos a ser mostrados. Cuando RS esta en BAJO estos pines son
tratados como pines de control. Enable (E) es usado para habilitar el LCD. Un voltaje ALTO en
Enable le dice al LCD que en los pines DB0-DB7 hay informacin vlida. El pin R/W (Read and

Ing. Luis Gutirrez Magn 1


Ing. Electrnica Microcontroladores

Write) le indica al LCD si se va a leer o escribir dato sobre l. En casos normales solo
necesitaremos escribir en el LCD por lo que este pin se mantiene en Ground.
La interface entre el LCD y el microcontrolador puede ser de 8 o de 4 bits y la diferencia entre estas
dos formas es como se enva los datos o los comandos al LCD. En el modo 8 bits, 8 bits de datos y
comandos son enviados por pines DB0-DB7 y la habilitacin es dada por el pin Enable. En el modo
4 bits solo se usan cuatro lneas de datos.

Librera LCD
Dentro de la librera LCD tenemos varias funciones, vamos a comentar alguna de ellas:
Lcd_Init(): Esta funcin se encarga de iniciar el LCD con la siguiente configuracin de pines que
sirven para que el LCD funcione:
#define RS RD2
#define EN RD3
#define D4 RD4
#define D5 RD5
#define D6 RD6
#define D7 RD7

Lcd_Clear(): Funcin que sirve para para limpiar el LCD.


Lcd_Set_Cursor(int row, int column): Esta funcin sirve para posicionar el cursor en una fila y
columna determinada dentro de la pantalla LCD.
Lcd_Write_Char(char): Funcin que escribe un carcter en el LCD en la posicin actual.
Lcd_Write_String(char *string): Escribe una cadena de caracteres en la posicin actual.

Ing. Luis Gutirrez Magn 2


Ing. Electrnica Microcontroladores

Lcd_Shift_Right(): Desplaza a la derecha el contenido del LCD sin cambiar los datos de la
memoria.
Lcd_Shift_Left(): Desplaza a la izquierda el contenido del LCD sin cambiar los datos de la
memoria.
Para que estas funciones trabajen bien los pines que se declaran en Lcd_Init() deben ser declarados
como SALIDA con el respectivo registro TRISD
Veamos una aplicacin para mostrar unos mensajes usando la librera lcd.h y MPLABX
#define _XTAL_FREQ 4000000
#define RS RD2
#define EN RD3
#define D4 RD4
#define D5 RD5
#define D6 RD6
#define D7 RD7
#include <xc.h>
#include "lcd.h";
// Inicio de la configuracin
#pragma config FOSC = XT // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT enabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = OFF // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) ICSP bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
//fin de configuracin

int main(){
unsigned int a;
TRISD = 0x00;
Lcd_Init();
while(1){
Lcd_Clear();
Lcd_Set_Cursor(1,1);
Lcd_Write_String("LCD Library for");
Lcd_Set_Cursor(2,1);
Lcd_Write_String("MPLAB XC8");
__delay_ms(2000);
Lcd_Clear();
Lcd_Set_Cursor(1,1);
Lcd_Write_String("Developed By");
Lcd_Set_Cursor(2,1);
Lcd_Write_String("electroSome");
__delay_ms(2000);
Lcd_Clear();
Lcd_Set_Cursor(1,1);
Lcd_Write_String("www.electroSome.com");
for(a=0;a<15;a++){
__delay_ms(300);
Lcd_Shift_Left();
}
for(a=0;a<32;a++){
__delay_ms(300);
Lcd_Shift_Right();
}
Lcd_Clear();
Lcd_Set_Cursor(2,1);
Lcd_Write_Char('e');
Lcd_Write_Char('S');
__delay_ms(2000);
}
return 0;Ing. Luis Gutirrez Magn
3
}
Ing. Electrnica Microcontroladores

La funcin sprintf() puede ser usada para dar formato a una variable. Nos puede servir para mostrar
enteros y decimales en el LCD. La sintaxis de la instruccin es:
sprintf(char *str, const char *format,);
Dnde:

str es un puntero a la direccin de la memoria donde se encuentra el dato a mostrar.


format el tipo de formato que le queremos dar al dato numrico.
Los formatos especiales son los que se muestran en la tabla

t Tipo
c Character
s Sting or Character
u Unsigned Integer
d Signed Integer
Lu Long Unsigned Integer
Ld Long Signed Integer
x Hex Integer lower case
X Hex Integer upper case
Lx Hex Long Integer lower case
LX Hex Long Integer upper case
f Float with truncated decimal
g Float with rounded decimal
e Float in exponential format
Unsigned Integer with decimal place inserted. Specify two numbers for n. The first is a total
w
field width. The second is the desired number of decimal places.

Por ejemplo

float f = 1.414;
int a = 56;
char s[20];

sprint(s,Float = %f,f);
Lcd_Set_Cursor(1,1);
Lcd_Write_String(s);
sprint(s,Integer = %d,a);
Lcd_Set_Cursor(2,1);
Lcd_Write_String(s);

Ing. Luis Gutirrez Magn 4

Potrebbero piacerti anche