You are on page 1of 13

PANTALLA LCD DE CARACTERES La Pantalla LCD es uno de los perifricos ms empleados para la presentacin de mensajes, variables y casi cualquier

informacin proveniente de un microcontrolador. Gracias a su flexibilidad, buena visibilidad y precio reducido se ha convertido en el estndar de visualizacin ms utilizado con los microcontroladores. Este tutorial, incluye una pantalla LCD 2x16 caracteres, la cual, es conectada al PIC 18F4550 tipo lineal de 16 pines. La figura 1. Muestra el diagrama de conexiones de la pantalla LCD al microcontrolador.

Figura 1. La pantalla LCD, incluye un microcontrolador interno como el HITACHI 44780 compatible y puede entre otras cosas: Presentar caracteres ASCII y griegos Recibir y mostrar caracteres personalizados Desplazamiento de caracteres (Scroll) tanto a la derecha como a la izquierda Cambiar el aspecto y el movimiento del cursor Direccionar de manera simple la posicin de visualizacin de los caracteres

Los terminales de conexin de las pantallas LCD de caracteres han sido estandarizados y generalmente son compatibles pin a pin con la distribucin de pines mostrada en la Figura 2. Dado que las pantallas LCD HD44780 son muy utilizadas, casi todos los compiladores ofrecen una biblioteca de rutinas para usar el LCD. Los comandos, no son parte del lenguaje BASIC como tal, sino que son una ampliacin de los servicios por el fabricante del compilador, que difieren en la sintaxis, los tipos de argumentos y parmetros de un compilador a otro. Los comandos bsicos que se enviaran a una pantalla LCD de 44780 se agrupan en dos categoras.

Nota: los pines 15 y 16 en las pantallas LCD son para habilitar la luz de fondo. Figura 2. Datos de comandos, pines del PIC 18f4550 conectado al LCD para enviar BITS principalmente tiene que ver con la comunicacin de 4 o 8 BITS que se puede realizar con este dispositivo, y los Comandos De Control, que puede ser utilizada para la expedicin diversos comportamientos integrado en la pantalla. Estos comportamientos pueden ser, por ejemplo para borrar la pantalla, o dirigir el cursor dentro y fuera de los comandos, etc. Estos comandos son enviados a travs de varias combinaciones de 1s y 0s en los datos, como as como los pines E y RS. Vamos a considerar una pantalla de 2 lneas con 16 caracteres por lnea. Vamos a echar un vistazo ms de cerca a una pantalla LCD. Como se puede ver que hay dos lneas de cristales lquidos. Cada lnea es adems compuesta por 16 cajas, con un pequeo espacio entre cajas. Una mirada ms de cerca a estos cuadros muestra que estn compuestos por ms puntos pequeos, dispuestos en forma de matriz o una matriz. Esta matriz, tiene puntos de cristal lquido, que se puede activar o desactivar. No se puede aumentar o disminuir su intensidad. As que se trata de una matriz de 5X8. Todos los personajes que aparecen son asignados dentro de la memoria del controlador de pantalla. Todos los caracteres que se pueden mostrar y sus fuentes, est predefinidos.

Sin embargo, hay algo de memoria adicional disponible, en la que podemos definir nuestros caracteres personalizados. Cada posicin de carcter se asigna a un determinado lugar de la memoria en la pantalla. Protn Ide dispone de una aplicacin que facilita la creacin de caracteres especiales denominada LCDCC.exe "LCD Chr Generator", el cual, es un plugin que se puede descargar de: http://wiki.picbasic.org/index.php?n=Plugins.LCDCharacterGenerator En la Figura 3. Se muestra el programa LCD Chr Cenerator, mediante el cual, usted podr crear sus propios caracteres especiales. Como se observa en la figura, puede dibujar cualquier pxel, el de su preferencia, al final el programa le indica el cdigo en hexadecimal del carcter por cada una de las 8 lneas de la matriz 5x8.

Figura 3 Con el fin de posicionar correctamente la visualizacin de datos, debe ser enviado a la ubicacin de memoria adecuada. Afortunadamente todo esto se puede realizar con bibliotecas contenidas en el compilador. Aunque la pantalla tiene 16 caracteres por lnea, la memoria en el interior es en realidad de 20 caracteres por lnea. Los caracteres adicionales no aparecen, pero se puede desplazar un personaje en un momento para mostrar todos los 20 caracteres. Como ya sabis, el microcontrolador est muy ocupado en sus propios asuntos, y despus de enviar los datos de pantalla, contina con sus otros procesos. La pantalla LCD es lo suficientemente inteligente, y una vez los datos han sido enviados a la pantalla, permanecen all, mientras el microcontrolador realiza otros trabajos, hasta el comando de nuevos datos es enviado por el controlador. Esta es la razn principal, por qu, estos mdulos LCD son tan populares. Los mdulos LCD requiere la fuente de alimentacin regulada de 5V, y el desage de una cantidad considerable de energa, especialmente si la luz de fondo est activada. Ahora vamos a explorar la biblioteca de LCD con el Protn IDE PLUS, para mostrar algunos datos sobre ella. COMANDO EN ALTO NIVEL PARA EL MANEJO DE UNA LCD El compilador Basic PROTON dispone de un comando para el manejo de las pantallas LCD. PRINT Item {, Item...} Item - Es una constante, variable, expresin, modificador de formato y/o un(a) string. Tambin el comando PRINT acepta modificadores de formato como los mostrados en la siguiente tabla.

A fin de utilizar la pantalla LCD de caracteres con el PIC 18f4550, primero hay que configurarla a travs de las directivas del compilador. Estas directivas son las denominados Declares. Existen seis declaraciones diferentes para la configuracin de una LCD. DECLARE LCD_TYPE 1 or 0, GRAPHIC or ALPHA Informa al compilador el tipo de pantalla LCD a utilizar. (1) selecciona una pantalla LCD del tipo grfica. (0) selecciona una pantalla LCD del tipo carcter. Por defecto se escoge el uso de una pantalla de caracteres. DECLARE LCD_DTPIN PORT. PIN Asigna el Puerto y el pin de conexin que se utilizarn para la conexin de la lnea data de la pantalla LCD. Por defecto se utilizara el pin PORTD<4>. DECLARE LCD_ENPIN PORT. PIN Asigna el Puerto y el pin de conexin que se utilizarn para la conexin de la lnea de habilitacin (EN) de la pantalla LCD. Por defecto se utiliza el pin PORTD<3>. DECLARE LCD_RSPIN PORT. PIN Asigna el Puerto y el pin de conexin que se utilizarn para la conexin de la lnea de seleccin (RS) de la pantalla LCD. Por defecto se utiliza el pin PORTD<2>. DECLARE LCD_INTERFACE 4 o 8 Informa al compilador si la pantalla LCD trabajar en modo 4 bits 8 bits. Por defecto se utiliza el modo 4 bits. DECLARE LCD_LINES 1, 2, o 4 Informa al compilador el nmero de lneas de la pantalla LCD. Por defecto se utiliza el valor de dos (2) lneas. Ejemplos de utilizacin pantalla LCD. Ya en el parte 6 del tutorial, se haba utilizado el LCD con el teclado matrixal, estos ejemplos hacen uso de la pantalla LCD para mostrar un mensaje inicial, el valor incremental de una variable, mensajes personalizados y movimientos entre otros. Ejemplo No.1 Device = 18F4550 XTAL=20 ALL_DIGITAL true LCD_DTPIN PORTD.4 LCD_RSPIN PORTD.2 LCD_ENPIN PORTD.3 Print Cls Print "CURSO PROTON IDE" End

CIRCUITO

Print Cls: Estos dos son los comandos de la biblioteca para la pantalla LCD y no son parte del lenguaje BASIC, como tal. El Comando Cls significa "Borrar la pantalla generalmente cuando se utiliza un LCD. Hace dos trabajos muy importantes. En primer lugar, cuando se enciende la electrnica del LCD, necesita algo de tiempo en estabilizarse, este comando, inserta un pequeo retraso interno, en segundo lugar, borra todos los registros, asignando todos los bits de la pantalla a 0 y coloca el cursor por defecto en la lnea 1, columna1. Despus de que la pantalla est preparada para aceptar los datos. El comando Print es muy verstil en PROTN IDE. En su forma ms simple como se muestra arriba, acepta un parmetro o argumento, que es una cadena. Las cadenas son constantes de texto y siempre encerradas en comillas. Las comillas, no son parte de la cadena, por lo que no que aparecen. El comando de impresin mostrar el texto suministrado en la pantalla LCD, a partir de la actual ubicacin del cursor, que el CLS establece en la lnea 1 con posicin 1. El cursor, que es una seal intermitente est apagado, por defecto. Podemos activarlo, como veremos ms adelante. Ahora, cmo controlar la posicin del texto que se muestra? Eso es bastante simple, tenemos dos opciones, una es mediante el modificador AT con el comando de impresin, y el otro es el uso de comandos del cursor. El modificador AT es ms de uso comn y es ms conveniente. Print At 2,10, "OK" Esta primera orden se mover el cursor a la lnea 2 y luego la posicin 10, y luego mostrara el texto: 'OK'.

Bueno hasta ahora se ha mostrado texto, as como el control de su posicin, la forma de mostrar las variables, y formato en el LCD suele ser la parte ms complicada de la programacin del

microcontrolador. Las cosas son complejas debido a que algunos nmeros son bytes de tamao, alguna palabra de tamao, algunos tienen doble precisin mientras que en otros hay un signo negativo. Para hacer el tema ms interesante vamos a utilizar variables de punto flotante. Considerar una variable de tamao de bytes que se le asignado un valor numrico $ FF, correspondiente a % 11111111. Considerando que, para nosotros debe mostrarse como 255 en decimal, FF es hexadecimal. Ejemplo No2 Device = 18F4550 XTAL=20 ALL_DIGITAL true LCD_DTPIN PORTD.4 LCD_RSPIN PORTD.2 LCD_ENPIN PORTD.3 Dim x As Byte x=$FF Print Cls Print At 1,1, "X:", Dec x End

En este programa hemos asignado un valor de $ FF a una variable de tamao byte de x. cuenta de lo fcil que es obtener el valor de una variable se muestra en el comando: Print At 1,1, "X:", Dec x Para mostrar un valor de una variable, slo el prefijo del nombre de la variable con el modificador de formato, en este caso Dec indica al compilador para mostrar el valor de x como un nmero decimal. Nmero de dgitos y ceros a la izquierda tambin puede ser graficados. Por ejemplo, queremos mostrar los nmeros de 0 a 255, algunos nmeros son de un solo dgito, algunos tienen dos dgitos y otros tienen tres dgitos. Es posible que los nmeros que aparecen deban fijarse en tres dgitos, con los principales 0s si el nmero es pequeo. Esto se hace modificando el formato Dec a Dec 3. Del mismo modo para mostrar una firma de nmeros, como -102 use el modificador Dec. Para mostrar una papelera utilice el nmero de binarios como modificador de formato. Para variables de visualizacin de punto flotante tambin puede utilizar modificador Dec. Ejemplo No.3 Device = 18F4550 XTAL=20 ALL_DIGITAL true LCD_DTPIN PORTD.4 LCD_RSPIN PORTD.2 LCD_ENPIN PORTD.3 Dim x As Float

x=3.1419 Print Cls Print At 1,1, "X:", DEC2 x End

En el ejemplo anterior x ha sido declarada como variable de tipo Float. Por lo tanto, se puede asignar fracciones decimales as Hemos asignado un valor de 3.1419. Si bien la impresin del modificador DEC2 se ha utilizado para mostrar 2 dgitos despus del punto decimal, como 3.14, si omitimos el 2 del modificador todo el nmero se mostrar. Aqu un programa completo, este programa acepta una entrada del usuario para seleccionar un nmero. Un valor inicial. Ejemplo No.4 Device = 18F4550 XTAL=20 ALL_DIGITAL true LCD_DTPIN PORTD.4 LCD_RSPIN PORTD.2 LCD_ENPIN PORTD.3 Symbol SW3 = PORTE.0 Symbol SW4 = PORTE.1 Symbol SW5 = PORTE.2 Input SW3 Input SW4 Input SW5 Dim NUMERO As Byte Dim c As Byte NUMERO = 10 Loop: Print Cls Print At 1,1, "Seleccion Num:" ' IR A ENTRADAS While SW5 <> 0 Print At 2,1,"NUMERO:", DEC3 NUMERO If SW3=0 Then NUMERO=NUMERO+1 DelayMS 200 EndIf If SW4=0 Then NUMERO=NUMERO-1 DelayMS 200 EndIf Wend CIRCUITO:

Los personajes personalizados La fuente y el conjunto de caracteres que aparecen por la pantalla LCD de caracteres estn codificados y definidos en la memoria de LCD. Esta memoria se llama CGRAM, o caracteres de RAM generador. CGRAM contiene caracteres definidos como una matriz de 5x8. Cada bit de la matriz, se llena con 0 o 1, que se muestran como pxeles en la pantalla. No todo Conjunto de caracteres ASCII est presente en esta matriz. Por ejemplo, el carcter \ no est presente. Del mismo modo el control caracteres 0-7 estn vacos. Usted puede aprovechar esta deficiencia, para escribir bytes a CGRAM, direcciones de estos personajes y definir sus propios caracteres. Se examina el conjunto de caracteres de la pantalla con este programa: Ejemplo No.5 Device = 18F4550 XTAL=20 ALL_DIGITAL true LCD_DTPIN PORTD.4 LCD_RSPIN PORTD.2 LCD_ENPIN PORTD.3 Symbol SW3 = PORTE.0 Symbol SW4 = PORTE.1 Symbol SW5 = PORTE.2 Dim x As Byte Print Cls For x=0 To 255 Print At 1,1,Dec x, ":", x DelayMS 1000 Next End CIRCUITO

Ejemplo No.5 Creando un carcter especial Device = 18F4550 ALL_DIGITAL = True XTAL = 20 ALL_DIGITAL true LCD_DTPIN PORTD.4 LCD_RSPIN PORTD.2 LCD_ENPIN PORTD.3 Symbol CGRAM = $64 ' Apuntador a la Memoria CGRAM del LCD Dim I As Byte Main: 'CARGANDO EL 1ER. CARACTER PERSONALIZADO EN LA CGRAM Print $FE,$40,$04,$07,$07,$1E,$1E,$12,$12,$00 Print Cls ' Limpia la pantalla LCD ' Muestra texto en lnea1 Print At 1,1, "CaracterEspecial" ' CaracterEspecial Print At 2,7, 0 ' muestra caracter especial DelayMS 1000 ' segunda lnea GoTo Main End SOFTWARE GENERADOR DE CARATERES

CIRCUITO:

Ejemplo 6. Efectos especiales con una Pantalla LCD El siguiente programa presentar un mensaje en la pantalla LCD y lo correr hacia la izquierda (Scroll Left) treinta y tres posiciones. Luego lo correr a la derecha (Scroll Right) otras treinta y tres posiciones. Device = 18F4550 XTAL=20 ALL_DIGITAL true LCD_DTPIN PORTD.4 LCD_RSPIN PORTD.2 LCD_ENPIN PORTD.3 LCD_INTERFACE = 4 LCD_LINES = 2 LCD_TYPE = 0 ALL_DIGITAL = TRUE Dim index As Byte Symbol SCRRIGHT = 28 Main: Print $fe,1

'Sern utilizadas 4 lneas de datos 'LCD de 2 lneas 'Indica que el tipo de LCD es numrica

Print At 1,1, "Electronica y Telecomunicaciones" DelayMS 2000 GoSub Scroll_Derecha DelayMS 1000 GoTo Main Scroll_Derecha: For index= 0 To 32 Print $FE,SCRRIGHT DelayMS 300 Next Return CIRCUITO:

Ejemplo 7. Grfica de Barras con LCD Programa para generar un cdigo de barras horizontal en la LCD |||||||||||||||||||||| Valor = xx Device 18F4550 XTAL = 20 ALL_DIGITAL true LCD_DTPIN PORTD.4 LCD_RSPIN PORTD.2 LCD_ENPIN PORTD.3 LCD_INTERFACE = 4 LCD_LINES = 2 LCD_TYPE = 0 ALL_DIGITAL = TRUE

'Sern utilizadas 4 lneas de datos 'LCD de 2 lneas 'Indica que el tipo de LCD es numrica

' ----------------------------------------------------------------Dim BAR_VAL As Byte ' Valor a graficar Dim BARS As Byte ' Numero de barras ||| a graficar Dim BALANCE As Byte ' Balance a la izq. | despus barras Dim BALF As Byte ' Se necesita un caracter de balance Symbol B_WDTH = 16 ' Max No. de caracteres en la barra Symbol MAXBAR = B_WDTH * 3 ' Max No. de segmentos barra Symbol FULLBAR = 3 ' Valor ASCII de la barra ||| Symbol BASEBAR = 0 ' Valor ASCII de la barra en blanco Symbol CGRAM = $40 ' Retardo requerido por la LCD

DelayMS 1000 ' Limpia todas variables en RAM Cls 'CARGANDO EL 1ER. CARACTER ( ) PERSONALIZADO EN LA CGRAM Print $FE,$40, $00,$00,$00,$00,$00,$00,$00,$00 'CARGANDO EL 2DO. CARACTER (| ) PERSONALIZADO EN LA CGRAM Print $FE,$48, $10,$10,$10,$10,$10,$10,$10,$10 'CARGANDO EL 3RO. CARACTER (|| )PERSONALIZADO EN LA CGRAM Print $FE,$50, $14,$14,$14,$14,$14,$14,$14,$14 'CARGANDO EL 4TO. CARACTER (|||)PERSONALIZADO EN LA CGRAM Print $FE,$58, $15,$15,$15,$15,$15,$15,$15,$15 ' Programa Principal '-----------------------------------------------------------------Main: For BAR_VAL = 0 To 50 GoSub Bargraph DelayMS 100 Next For BAR_VAL = 50 To 0 Step -1 GoSub Bargraph DelayMS 100 Next GoTo Main 'SubRutinas '-----------------------------------------------------------------Bargraph: WARNINGS = OFF BYTE_MATH = On BARS = (BAR_VAL Min MAXBAR) / 3 BALANCE = (BAR_VAL Min MAXBAR) //3 BALF = BALANCE Min 1 Print At 1,1,Rep FULLBAR\BARS,Rep (BALANCE + BASEBAR)\BALF,_ Rep " " \B_WDTH - (BARS + BALF) Print At 2,1,"Valor = ", Dec BAR_VAL," " BYTE_MATH = OFF WARNINGS = On Return CIRCUITO:

Ejemplo 8. MANEJO DE LCD DE MAS DE 2 LINEAS Device 18F4550 XTAL = 20 ALL_DIGITAL true LCD_DTPIN PORTD.4 LCD_RSPIN PORTD.2 LCD_ENPIN PORTD.3 LCD_INTERFACE = 4 LCD_LINES = 4 LCD_TYPE = 0 ALL_DIGITAL = TRUE

'Sern utilizadas 4 lneas de datos 'LCD de 2 lneas 'Indica que el tipo de LCD es numrica

BASLA: Print At 1,2,"TUTORIAL DE PROTON" DelayMS 1000 Print At 2,2,"MANEJO LCD DE 20*4" DelayMS 1000 Print At 3,4,"PARA FOROS DE" DelayMS 1000 Print At 4,5,"ELECTRONICA" DelayMS 1000 Print Cls Print At 2,3, "**MECATRODATOS**" DelayMS 1000 GoTo BASLA End CIRCUITO:

You might also like