Control de LCD en BASIC (MicroCode Studio). Saludos a todos bueno en esta ocasión es una publicación sobre LCD alfanuméricos espero que les sea de gran ayuda. Las LCD están compuestos básicamente por una pantalla de cristal líquido y un circuito microcontrolador especializado el cual posee los circuitos y memorias de control necesarias para desplegar el conjunto de caracteres ASCII, un conjunto básico de caracteres japoneses, griegos y algunos símbolos matemáticos por medio de un circuito denominado generador de caracteres. La lógica de control se encarga de mantener la información en la pantalla hasta que ella sea sobre escrita o borrada en la memoria RAM de datos.
Pantalla LCD de 2x16 (LM016L)
El compilador en BASIC permite definir los pines del microcontrolador que se conectan al LCD (pines tales como datos, enable, escritura, etc.) usando la función DEFINE. Los parámetros disponibles para el manejo de LCD alfanuméricos son los siguientes:
LCD_BITS: Define el número de bits de la interfaz de datos. Se pueden asignar valores de 4 u 8, siendo 4 el
valor por defecto. LCD_DREG: Define a que puerto del PIC tenemos conectado el port de datos del LCD. Los valores permitidos son PORTA, PORTB, PORTC, etc. Por defecto se asume PORTB. LCD_DBIT: Define cual es el primer pin del puerto que usamos para enviar los datos al LCD cuando seleccionamos un bus de 4 bits. Solo puede ser el 0 (para los pines el 0, 1, 2 y 3) o 4 (para usar los pines 4, 5, 6 y 7). Por defecto se asume “4”, y esta instrucción se ignora para LCD_BITS = 8. LCD_RSREG: Define a que puerto del PIC tenemos conectado el pin RS del LCD. Los valores permitidos son PORTA, PORTB, PORTC, etc. Por defecto se asume PORTB. LCD_RSBIT: Define a que pin del p uerto tenemos conectado el pin RS del LCD. Por defecto se asume “3”. LCD_EREG: Define a que puerto del PIC tenemos conectado el pin E del LCD. Los valores permitidos son PORTA, PORTB, PORTC, etc. Por defecto se asume PORTB. LCD_EBIT: Define a que pin del puerto tenemos conectado el pin E del LCD. Por defecto se asume “2”. LCD_RWREG: Define a que puerto del PIC tenemos conectado el pin RW del LCD. Los valores permitidos son 0, PORTA, PORTB, PORTC, PORTC, etc. Por defecto se asume “0”, que significa “no usamos el pin RW”. LCD_RWBIT: Define a que pin del puerto tenemos conectado el pin RW del LCD. Por defecto se asume “0”, que significa “no usamos el pin RW”. LCD_COMMANDUS: Define cuantos microsegundos demora la escritura de un comando en el display. Por
defecto, este valor es de 5000. La mayoría de los LCD funcionan bien con un valor de 2000, lo que hace más rápidos nuestros programas. LCD_DATAUS: Define cuantos microsegundos demora la escritura de un dato en el LCD. Por defecto, este valor es de 100. LCD_INITMS: Define cuantos microsegundos demora la inicialización de la electrónica del LCD. Por defecto, este valor es de 100.
DEFINE LCD_DREG PORTA DEFINE LCD_DBIT 0 DEFINE LCD_RSREG PORTA DEFINE LCD_RSBIT 4 DEFINE LCD_EREG PORTB DEFINE LCD_EBIT 3 DEFINE LCD_RWREG PORTE DEFINE LCD_RWBIT 2 DEFINE LCD_BITS 4 DEFINE LCD_LINES 2 DEFINE LCD_COMMANDUS 2000 DEFINE LCD_DATAUS 50
'Puerto de datos del LCD 'Inicio de datos del bit 0 o 4 'Selección del puerto del registro 'Selección del bit de registro 'Puerto del pin de habilitación (enable) 'Pin de enable 'Puerto de Lectura y Escritura 'Pin de Lectura y Escritura 'Tamaño del bus de datos: 4 o 8 'Número de líneas del LCD 'Tiempo de retardo de comandos 'Retardo de envío de datos
Una vez definidos los puertos y los pines del LCD, es necesario realizar una pausa de medio segundo antes de enviar los datos al LCD, esto para que tenga tiempo de inicializar la memoria RAM el dispositivo. Usamos la función PAUSE. A continuación se muestra las sentencias para escritura del LCD, usando LCDOUT:
Comandos de escritura en el LCD: Instrucción
Función que realiza
$FE, 1 $FE, 2 $FE, $0C $FE, $0E $FE, $0F $FE, $10 $FE, $14 $FE, $80 $FE, $C0 $FE, $7
Borrar toda la pantalla del LCD Vuelve a inicio (comienzo de la primera línea) Apaga cursor Subrayado del cursor activo (_) Parpadeo del cursor activo ( ) Mueve el cursor una posición hacia la izquierda Mueve el cursor una posición hacia la derecha Mueve cursor al comienzo de la primer línea Mueve cursor al comienzo de la segunda línea Configura texto para movimiento a la izquierda
El pin RW va a tierra debido a que se solo escribirá datos en el LCD. Para escribir un dato en el LCD se usan funciones como DEC, HEX, BIN, por ejemplo: LCDOUT $FE, 1, DEC 38 LCDOUT $FE, $C0, BIN 38 El código de control del LCD con el PIC es el siguiente: DEFINE LCD_DREG PORTB DEFINE LCD_DBIT 4 DEFINE LCD_RSREG PORTB DEFINE LCD_RSBIT 1 DEFINE LCD_EREG PORTB DEFINE LCD_EBIT 2
'Utilizar 4 bits del puerto B para Tx de Datos 'Dese el bit B.4 al bit B.7 'Utilizar el registro de control/datos en el puerto B 'En el bit B.1 'Utilizar el Enable en el puerto B 'En el bit B.2
TRISB=0 PAUSE 500 LCDOUT $FE, 1 LCDOUT $FE, 1, "POIO OF THE" LCDOUT $FE, $C0, "SIXTH" LCDOUT $FE, $0C
'Establecer el puerto B como salida 'Pausa de medio segundo ' Limpiar LCD 'Escribir en la primera línea 'Escribir en la segunda línea 'Apagar el cursor
Si se desea escribir en una posición inicial específica del LCD, se usa la siguiente tabla para determinar dicha posición:
Código de direcciones de caracteres (valores hexadecimales) Display Position
DD RAM Address
DD RAM Address
80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F
C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Por ejemplo, para escribir desde la segunda celda de la segunda fila la palabra "TEXTO" se usa: LCDOUT $FE,$C1,"TEXTO" O bien se puede escribir la dirección de memoria en formato decimal, C1 hexadecimal es 193 decimal, por la tanto: LCDOUT $FE,193,"TEXTO ” Es equivalente a la función precedente. Físicamente, el LCD de 16x2 se debe conectar como lo indica la siguiente figura, para controlar el contraste de la pantalla:
Figura 2. Conexión del LCD junto al potenciómetro de contraste.
Un ejemplo de aplicación se muestra a continuación: ' DEFINICIÓN DE REGISTROS PARA EL LCD DEFINE LCD_DREG PORTB 'UTILIZAR 4 BITS DEL PUERTO B PARA TX DE DATOS DEFINE LCD_DBIT 4 'DESDE EL BIT B.4 AL BIT B.7 DEFINE LCD_RSREG PORTB'SELECCIÓN DEL PUERTO DEL REGISTRO DEFINE LCD_RSBIT 1 'EN EL BIT B.1 DEFINE LCD_EREG PORTB 'UTILIZAR EL ENABLE EN EL PUERTO B DEFINE LCD_EBIT 2 'EN EL BIT B.2 ' ESTABLECER EL PUERTO B COMO SALIDA TRISB=0 ' TAMAÑO DE VARIABLES DEL CONTADOR B0 VAR BYTE B1 VAR BYTE ' PAUSA DE INICIO DEL LCD PAUSE 500 '-------------------------------------------------------LCDOUT $FE, 1 ' LIMPIAR LCD LCDOUT $FE, 1, "POIO OF THE" 'ESCRIBIR EN LA PRIMERA LÍNEA LCDOUT $FE, $C0, "SIXTH" 'ESCRIBIR EN LA SEGUNDA LÍNEA PAUSE 1000 ' MOSTRAR DATOS DECIMALES Y BINARIOS LCDOUT $FE, 1, DEC 25 LCDOUT $FE, $C0, BIN 25 '-------------------------------------------------------'MOSTRAR LETRA POR LETRA PAUSE 500 LCDOUT $FE, 1 ' LIMPIAR LCD FOR B0 = 0 TO 13 LOOKUP B0,["POIO OF THE"],B1 LCDOUT $FE,$0C,B1 PAUSE 500 NEXT LCDOUT $FE, $C0 'COLOCAR EL CURSOR EN LA SEG LÍNEA FOR B0 = 0 TO 13 LOOKUP B0,["SIXTH"],B1 LCDOUT $FE,$0C,B1 PAUSE 500 NEXT '-------------------------------------------------------'DESPLAZAMIENTO DE TEXTO EN LCD FOR B0 = 144 TO 128 STEP -1 LCDOUT $FE, 1 ' LIMPIAR LCD LCDOUT $FE,B0,"POIO OF THE SIXTH" PAUSE 200 NEXT END
HEXA CARACTER 0 || 1 || 2 ||| 3 ||| 4 || 5 || 6 ||| 7 ||| 8 || 9 || A ||| B ||| C || D || E ||| F ||| 10 ± 11 12 13 /, 14 15 16 17 18 19 1A 1B 1C 1D 1E 3 1F 20 21 ! 22 23 # 24 $ 25 % 26 & 27 28 ( 29 ) 2A * 2B + 2C , 2D 2E . 2F / 30 0 31 1 32 2 33 3 34 4 35 5 36 6
HEXA CARACTER 37 7 38 8 39 9 3A : 3B ; 3C < 3D = 3E > 3F ? 40 @ 41 A 42 B 43 C 44 D 45 E 46 F 47 G 48 H 49 I 4A J 4B K 4C L 4D M 4E N 4F O 50 P 51 Q 52 R 53 S 54 T 55 U 56 V 57 W 58 X 59 Y 5A Z 5B [ 5C \ 5D ] 5E ^ 5F _ 60 ` 61 a 62 b 63 c 64 d 65 e 66 f 67 g 68 h 69 i 6A j 6B k 6C l 6D m 6E n
HEXA CARACTER 6F o 70 p 71 q 72 r 73 s 74 t 75 u 76 v 77 w 78 x 79 y 7A z 7B { 7C | 7D } 7E 7F Δ 80 Ç 81 ü 82 é 83 â 84 ä 85 à 86 å 87 ç 88 ê 89 ë 8A è 8B ï 8C î 8D ì 8E Ä 8F Å 90 É 91 æ 92 Æ 93 ô 94 ö 95 ò 96 û 97 ù 98 ÿ 99 Ö 9A Ü 9B ñ 9C Ñ 9D ª 9E º 9F ¿ A0 á A1 í A2 ó A3 ú A4 C A5 £ A6 ¥
HEXA CARACTER A7 Pt A8 § A9 ¡ AA Ã AB ã AC Õ AD õ AE Ø AF ø B0 ˙ B1 B2 B3 B4 B5 ½ B6 ¼ B7 × B8 ÷ B9 ≤ BA ≥ BB « BC » BD ≠ BE √ BF ˉ C0 C1 C2 ∞ C3 (rotado arriba) C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 † D2 § D3 ¶ D4 D5 (rotado abajo) D6 D7 D8 D9 DA DB DC DD
HEXA CARACTER DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF F0 F1 F2 F3 F4 F5 F6 F7 F8 R F9 FA F FB FC FD -FE Cosas Raras FF P(Negativo)