Você está na página 1de 19

PRCTICA No 3

MANEJO DE DISPLAY DE CRISTAL LQUIDO


TRABAJO PREPARATORIO 1. OBJETIVO: Familiarizar al estudiante con el manejo de los displays de cristal lquido (LCD). 2. CUESTIONARIO: 2.1. Consultar acerca del Display de Cristal Lquido: Funcionamiento del mdulo LCD Lneas de interfase (RS, R/W, E, D4-D7, D0-D3, Vdd, Vss, Vo) Modos de interfase con el Microprocesador Inicializacin del mdulo: por circuito interno y por medio de instrucciones. Set de Instrucciones Caractersticas elctricas

FUNCIONACIENTO DEL MODULO LCD El lquido de un LCD est entre dos placas de vidrio paralelas con una separacin de unos micrones. Estas placas de vidrio tienen unos electrodos especiales que definen, con su forma, los smbolos, caracteres, etc. que se visualizarn. Cuando se aplica la polarizacin adecuada entre los electrodos, aparece un campo elctrico entre estos electrodos (campo que es perpendicular a las placas) y esto causa que las molculas del liquido se agrupen en sentido paralelo a este (el campo elctrico) y cause que aparezca una zona oscura sobre un fondo claro (contraste positivo). De esta manera aparece la informacin que se desea mostrar. Caractersticas principales: -Pantalla de caracteres ASCII, adems de los caracteres Kanji y Griegos. -Desplazamiento de los caracteres hacia la izquierda o la derecha. -Proporciona la direccin de la posicin absoluta o relativa del caracter. -Memoria de 40 caracteres por lnea de pantalla. -Movimiento del cursor y cambio de su aspecto. -Permite que el usuario pueda programar 8 caracteres. -Conexin a un procesador usando un interfaz de 4 u 8 bits LNEAS DE INTERFACE (RS, R/W, E, D4-D7, D0-D3, VDD, VSS, VO) 01 - Vss (GND) 02 - Vdd (5v) 03 - Vee - Control de contraste 04 - RS - Seleccin de registro 05 - RW - Seleccin de Escritura / Lectura 06 - E - Enable / Disable 07 al 14 - D0-D7 Bus de datos I/O 15 y 16 - Corresponden al anodo y ctodo del backlight si el modelo lo tiene. Para enviar un comando o un dato deberemos primero indicar que es lo que estamos enviando para eso se usa el pin RS, cuando este pin esta en 0 el LCD interpretar la informacin que esta presente en sus pines D0 a D7 como un comando, si est en 1 significa que estamos envindole un caracter, en cuyo caso se imprimir donde est actualmente el cursor. Asimismo en lugar de enviar informacin puede llegar el momento en que queramos leer algo de su memoria, para eso se utiliza el pin R/W, en 0 el LCD estar en modo escritura y en 1 en modo lectura. El pin E es el que le indica al display que ejecute la operacin que estamos envindole, cuando este pin esta en 0 cualquier modificacin que hagamos en sus otros pines ser ignorada.

En resumen la forma de proceder ser as: - Se colocan los pines RS en 1 o 0 dependiendo si vamos a enviar un caracter o una direccin - R/W a 0 si queremos enviar un caracter o un comando y en 1 si queremos leer algn dato del display. - Ponemos D0 a D7 Con el valor del caracter que queremos imprimir, o con el comando que deseamos ejecutar en el display ( si R/W es 1 estos pines se convertirn en salidas y solo podremos leer el estado) - Por ltimo se pone en alto el pin E y el display ejecutar la funcin. MODOS DE INTERFACE CON EL MICROPROCESADOR El display de LCD puede funcionar en uno de dos modos. El primer modo (y tambin el asignado de fbrica), es el modo de interfaz de datos de 4 bits. El segundo es el modo de interfaz de datos de 8 bits. Cuando se opera en el modo de 4 bits, se necesitan dos transferencias por carcter / comando. En el modo de 8 bits, se necesitan cuatro lneas adicionales de E/S, si bien es ms fcil su implementacin al necesitar menos memoria de programa. El uso del modo de 8 bits es estrictamente un compromiso entre tamao de memoria de programa y lneas de E/S. Los tres interfaces de datos ms comunes son: 1. Una interfaz de 8 bits. 2. Una interfaz de 4 bits, con transferencia de datos en el nibble ms alto del port. 3. Una interfaz de 4 bits, con transferencia de datos en el nibble ms bajo del port. Cuando el mdulo se enciende, el modo de transferencia de datos preajustado es el de 8 bits. La secuencia de inicializacin slo requiere comandos de una longitud de 4 bits. El ltimo comando de inicializacin debe especificar el ancho de la transferencia de datos (4 u 8 bits) y a continuacin debe ejecutarse un retardo de 4,6 ms antes que el mdulo LCD pueda ser inicializado. INICIALIZACION DEL MODULO POR INSTRUCCIONES

CARACTERISTICAS ELECTRICAS

SET DE INSTRUCCIONES (resumido)

2.2. Crear las subrutinas para el manejo del LCD (Asembler) Subrutina para configuracin del LCD resetsec: rcall re4ms rcall re4ms rcall re4ms rcall re4ms ldi cod,$38 rcall cargains rcall cargains rcall cargains ret

Subrutina de inicializacin con limpiado de pantalla. ininormal: ldi cod,$38 rcall cargains ldi cod,0b00000110 rcall cargains ldi cod,$0c rcall cargains ldi cod,$01 rcall cargains ldi cod,$02 rcall cargains ldi cod,$80 rcall cargains ret

Subrutina de inicializacin de escritura en la primera lnea ininormall1: ldi cod,$38

rcall cargains ldi cod,0b00000110 rcall cargains ldi cod,$0c rcall cargains ldi cod,$02 rcall cargains ldi cod,$80 rcall cargains ret

Subrutina de inicializacin de escritura en la segunda lnea ininormall2: ldi cod,$38 rcall cargains ldi cod,0b00000110 rcall cargains ldi cod,$0c rcall cargains ldi cod,$02 rcall cargains ldi cod,$c0 rcall cargains ret

Subrutina para desplazar el texto shiftdisp: ldi cod,0b00011100 rcall cargains rcall renns ; retardo genrico ret

Subrutina que sintetiza el envi de instrucciones al LCD cargains: ldi tempo,0b00000000 out portc,tempo out porta,cod sbi portc,0 cbi portc,0 rcall re4ms ret

2.3. Elaborar un programa (en Asembler y otro en basic) que cumpla las siguientes condiciones: Realizar una Pantalla de presentacin: (Presentar un despliegue interesante de los nombres) linea1del LCD: nombre y apellidos del primer integrante del grupo; linea2 del LCD: igual para el segundo integrante deber permanecer as alrededor de 5 segundos, luego: Pantalla de trabajo: LINEA1 del LCD: "DESCENDENTE" "ASCENDENTE" "DECREMENTA" "INCREMENTA LINEA2 del LCD: Se escribir: DATO = yyy si se presion P1 si se presion P2 si se presiono P3 si se presion P4

Donde yyy es el valor de un contador inicializado en cero y que responder a los siguientes eventos: Al pulsar P1: Al pulsar P2: Al pulsar P3: Al pulsar P4: El contador descendente (automtico, al llegar al valor min se detiene) El contador ascendente (automtico, al llegar al valor mx se detiene) El contador decrementar en 3 El contador incrementar en 3

PROGRAMA EN ENSAMBLADOR:

.include "m16def.inc" .def tempo=R16 .def cod=R17 .def conta=R18 .def num=R19 .def conta2=R20 .def binario=R21 .def dig10=R22 .def dig32=R23 .def uni=R24 .def contador=R25 .def pulsadores=R26 .org $00 ;Los codigos ASCII se etiquetan con sus respectivos caracteres para facilitar la programacion ; minusculas (i) .equ ia=$61 .equ ib=$62 .equ ic=$63 .equ id=$64 .equ ie=$65 .equ if=$66 .equ ig=$67 .equ ih=$68 .equ ii=$69 .equ ij=$6A .equ ik=$6B .equ il=$6C .equ im=$6D .equ inn=$6E .equ io=$6F .equ ip=$70 .equ iq=$71 .equ ir=$72 .equ is=$73 .equ it=$74 .equ iu=$75 .equ iv=$76 .equ iw=$77 .equ ix=$78 .equ iy=$79 .equ iz=$7A ; mayusculas (y) .equ ya=$41 .equ yb=$42 .equ yc=$43 .equ yd=$44 .equ ye=$45 .equ yf=$46 .equ yg=$47 .equ yhh=$48 .equ yii=$49 .equ yj=$4A .equ yk=$4B .equ yll=$4C .equ ym=$4D .equ yi=$4E .equ yo=$4F .equ yp=$50 .equ yq=$51 .equ yr=$52 .equ ys=$53 .equ yt=$54 .equ yu=$55 .equ yv=$56 .equ yw=$57 .equ yx=$58 .equ yy=$59 .equ yz=$5A LDI tempo,$FF OUT DDRA,tempo LDI tempo,0b00001111 OUT DDRC,tempo CLR tempo OUT DDRB,tempo OUT SFIOR,tempo SER tempo OUT PORTB,tempo LDI tempo,HIGH(ramend) OUT SPH,tempo LDI tempo,LOW(ramend) OUT SPL,tempo ;Puerto A como salida para los datos

;Cuatro pines del puerto C para control del LCD

;Puerto B como entradas para los pulsadores ;Activacion de las pull-ups para los pulsadores

;Se inicializa el puntero STACK para las subrutinas.

;FIN DE CONFIGURACIONES RCALL RESETSEC RCALL ININORMAL ;Escritura del primer nombre ;Subrutina que inicializa y configura el display ;Inicializacin sencilla con limpiado de pantalla

RCALL ININORMALL1 LDI cod,yll RCALL CARGADATO LCD LDI cod,ie

;Ubicacion para escribir en la primera lnea ;En el registro "cod" se carga el caracter que se quiere escribir ;Esta subrutina efectua el procedimiento de envio al

RCALL CARGADATO ;Se debe enviar cada caracter al LCD LDI cod,io RCALL CARGADATO LDI cod,im RCALL CARGADATO LDI cod,ib RCALL CARGADATO LDI cod,ia RCALL CARGADATO LDI cod,ir RCALL CARGADATO LDI cod,id RCALL CARGADATO LDI cod,io RCALL CARGADATO LDI cod,$20 RCALL CARGADATO LDI cod,yhh RCALL CARGADATO LDI cod,ie RCALL CARGADATO LDI cod,ir RCALL CARGADATO LDI cod,inn RCALL CARGADATO LDI cod,ia RCALL CARGADATO LDI cod,inn RCALL CARGADATO LDI cod,id RCALL CARGADATO LDI cod,ie RCALL CARGADATO LDI cod,iz RCALL CARGADATO LDI cod,$20 RCALL CARGADATO LDI cod,yc RCALL CARGADATO LDI cod,ih RCALL CARGADATO LDI cod,ia RCALL CARGADATO LDI cod,il RCALL CARGADATO LDI cod,ic RCALL CARGADATO LDI cod,io

RCALL CARGADATO ;Escritura del segundo nombre RCALL ININORMALL2 ;Ubicacion para escribir en la lnea 2 LDI cod,ya RCALL CARGADATO LDI cod,il RCALL CARGADATO LDI cod,ie RCALL CARGADATO LDI cod,ij RCALL CARGADATO LDI cod,ia RCALL CARGADATO LDI cod,inn RCALL CARGADATO LDI cod,id RCALL CARGADATO LDI cod,ir RCALL CARGADATO LDI cod,io RCALL CARGADATO LDI cod,$A0 RCALL CARGADATO LDI cod,ym RCALL CARGADATO LDI cod,ie RCALL CARGADATO LDI cod,is RCALL CARGADATO LDI cod,ii RCALL CARGADATO LDI cod,ia RCALL CARGADATO LDI cod,is RCALL CARGADATO LDI cod,$A0 RCALL CARGADATO LDI cod,yu RCALL CARGADATO LDI cod,il RCALL CARGADATO LDI cod,il RCALL CARGADATO LDI cod,io RCALL CARGADATO LDI cod,ia RCALL CARGADATO RCALL RENNS ;Tiempo de espera para visualizar claramente RCALL RENNS RCALL RENNS RCALL RENNS RCALL RENNS

;Lazo que da orden de deslizar la pantalla progresivamente LDI conta2,26 lazoshift: RCALL SHIFTDISP DEC conta2 BRNE lazoshift RCALL RENNS RCALL ININORMAL ;Inicializacin con limpiado de pantalla ;PANTALLA DE CONTEO: ;Ecritura de la palabra "Modo:" en la primera lnea RCALL ININORMALL1 LDI cod,ym RCALL CARGADATO LDI cod,io RCALL CARGADATO LDI cod,id RCALL CARGADATO LDI cod,io RCALL CARGADATO LDI cod,$3A RCALL CARGADATO ;Lazo del programa principal que cuenta las pulsaciones CLR pulsadores ;Se inicializa en vacio el conttrol de conteo

contar: ;El valor del contador se decodifica a BCD y se guardan ;los dgitos en 3 registros MOV binario,contador RCALL BCD MOV uni,dig10 ANDI uni,0b00001111 SWAP dig10 ANDI dig10,0b00001111 ANDI dig32,0b00001111 ;Se convierten los digitos al cdigo hexadecimal del LCD LDI tempo,0b00110000 ADD uni,tempo ADD dig10,tempo ADD dig32,tempo ;Se ordena escribir estos digitos uno a uno en el LCD LDI cod,$C2 RCALL CARGAINS MOV cod,dig32 RCALL CARGADATO MOV cod,dig10 RCALL CARGADATO MOV cod,uni RCALL CARGADATO RCALL RENNS ;Retardo para que se observe el numero

RCALL RENNS ;Se hace un Polling, cada pulsador tiene asignada una bandera ;en el registro de control SBIS pinb,0 LDI pulsadores, 0b00000001 SBIS pinb,1 LDI pulsadores, 0b00000010 SBIS pinb,2 LDI pulsadores, 0b00000100 SBIS pinb,3 LDI pulsadores, 0b00001000 ;Se evaluan las banderas y se llama a la accion correspondiente SBRC pulsadores,0 RCALL ASCENDENTE SBRC pulsadores,1 RCALL DESCENDENTE SBRC pulsadores,2 RCALL INCREMENTA SBRC pulsadores,3 RCALL DECREMENTA RJMP contar ;Finalmente regresa al inicio del programa condador de pulsaciones. ;SUBRUTINAS DE CADA UNO DE LOS PULSADORES: ;en la primera lnea y modifican el registro del contador. ASCENDENTE: CPI contador,255 ; Primero se revisa si ya se llego al tope BREQ salascen INC contador ;Si aun no, se incrementa el contador. LDI cod,$85 ;y se escribe la etiqueta "ascendente" RCALL CARGAINS LDI cod,yA RCALL CARGADATO LDI cod,is RCALL CARGADATO LDI cod,ic RCALL CARGADATO LDI cod,ie RCALL CARGADATO LDI cod,inn RCALL CARGADATO LDI cod,id RCALL CARGADATO LDI cod,ie RCALL CARGADATO LDI cod,inn RCALL CARGADATO LDI cod,it RCALL CARGADATO LDI cod,ie RCALL CARGADATO LDI cod,$20 RCALL CARGADATO

salascen: RET DESCENDENTE: CPI contador,0 BREQ saldescen DEC contador ;Procedimientos similares para cada modo de conteo

LDI cod,$85 RCALL CARGAINS LDI cod,yd RCALL CARGADATO LDI cod,ie RCALL CARGADATO LDI cod,is RCALL CARGADATO LDI cod,ic RCALL CARGADATO LDI cod,ie RCALL CARGADATO LDI cod,inn RCALL CARGADATO LDI cod,id RCALL CARGADATO LDI cod,ie RCALL CARGADATO LDI cod,inn RCALL CARGADATO LDI cod,it RCALL CARGADATO LDI cod,ie RCALL CARGADATO saldescen: RET INCREMENTA: CPI contador,251 BRSH salincre LDI tempo,5 ADD contador,tempo LDI cod,$85 RCALL CARGAINS LDI cod,yii RCALL CARGADATO LDI cod,inn RCALL CARGADATO LDI cod,ic RCALL CARGADATO LDI cod,ir RCALL CARGADATO LDI cod,ie RCALL CARGADATO LDI cod,im RCALL CARGADATO LDI cod,ie RCALL CARGADATO LDI cod,inn

RCALL CARGADATO LDI cod,it RCALL CARGADATO LDI cod,ia RCALL CARGADATO LDI cod,$20 RCALL CARGADATO salincre: RET DECREMENTA: CPI contador,5 BRLO saldecre SUBI contador,5 LDI cod,$85 RCALL CARGAINS LDI cod,yd RCALL CARGADATO LDI cod,ie RCALL CARGADATO LDI cod,ic RCALL CARGADATO LDI cod,ir RCALL CARGADATO LDI cod,ie RCALL CARGADATO LDI cod,im RCALL CARGADATO LDI cod,ie RCALL CARGADATO LDI cod,inn RCALL CARGADATO LDI cod,it RCALL CARGADATO LDI cod,ia RCALL CARGADATO LDI cod,$20 RCALL CARGADATO saldecre: RET ;Subrutina de la conversin a BCD: BCD: CLR dig10 CLR dig32 LDI conta,8 lazobcd: ROL binario ROL dig10 ROL dig32 DEC conta BREQ finbcd LDI tempo,$03 ADD tempo,dig10 SBRC tempo,3

MOV dig10,tempo LDI tempo,$30 ADD tempo,dig10 SBRC tempo,7 MOV dig10,tempo RJMP lazobcd finbcd: RET ;Subrutina que configura el LCD RESETSEC: RCALL RE4MS ;tiempos necesarios para el reset RCALL RE4MS RCALL RE4MS RCALL RE4MS LDI cod,$38 ;funtion set: 8 bit data length, 2 lineas, 5*7. RCALL CARGAINS RCALL CARGAINS RCALL CARGAINS RET

;Subrutina que sintetiza el enviar una instruccin al LCD CARGAINS: LDI tempo,0b00000000 ;Control: escritura, registro de instruccion OUT PORTC,tempo OUT PORTA,cod ;Envio del codigo de la instruccion SBI PORTC,0 ;Pulso al Enable CBI PORTC,0 RCALL RE4MS ;tiempo de espera reglamentario para instruccion RET ;Subrutina que sintetiza el enviar un CARACTER al LCD CARGADATO: LDI tempo,0b00000100 ;Control: escritura, registro de datos OUT PORTC,tempo OUT PORTA,cod SBI PORTC,0 ;Envio del codigo del dato CBI PORTC,0 RCALL RE100US ;tiempo de espera reglamentario para dato RET ;Retardo de 100us aprox.para el envio de caracteres RE100US: LDI tempo,31 lazore: DEC tempo BRNE lazore RET ;Retardo de 4ms para el envio de instrucciones RE4MS: LDI tempo,100 medio: LDI conta,13

interno: DEC conta BRNE interno DEC tempo BRNE medio RET ;Retardo genrico de 1,7 dcimas de segundo RENNS: LDI num,13 externo: LDI conta,32 medio2: LDI tempo,125 interno2: DEC tempo BRNE interno2 DEC conta BRNE medio2 DEC num BRNE externo RET ;Subrutina de inicializacin con limpiado de pantalla. ININORMAL: LDI cod,$38 ;function set: 8 bit datalength, 2 lineas, formato 5*7 RCALL CARGAINS LDI cod,0b00000110 ;entry mode set: incrementos del puntero del LCD de uno en uno. RCALL CARGAINS LDI cod,$0C ;display on, cursor off, blink offf RCALL CARGAINS LDI cod,$01 ;borra display RCALL CARGAINS LDI cod,$02 ;return home RCALL CARGAINS LDI cod,$80 ;localiza el cursor en la primera posicion RCALL CARGAINS RET ;Subrutina para inicializar la escritura en la primera lnea ININORMALL1: ;(hace lo mismo que la normal, pero no borra el diaplay) LDI cod,$38 RCALL CARGAINS LDI cod,0b00000110 RCALL CARGAINS LDI cod,$0C RCALL CARGAINS LDI cod,$02 RCALL CARGAINS LDI cod,$80 RCALL CARGAINS RET ;Subrutina para inicializar la escritura en la segunda lnea ININORMALL2: LDI cod,$38 RCALL CARGAINS

LDI cod,0b00000110 RCALL CARGAINS LDI cod,$0C RCALL CARGAINS LDI cod,$02 RCALL CARGAINS LDI cod,$C0 RCALL CARGAINS RET

;hace lo mismo, pero ubica el cursor en la segunda linea

;Subrutina que desplaza el texto SHIFTDISP: LDI cod,0b00011100 RCALL CARGAINS RCALL RENNS RET

PROGRAMA EN BASIC: $regfile = "m16def.dat" $crystal = 1000000 Dim A As Byte Dim Contador As Byte Dim Accion As Byte Config Porta = Output Config Portb = Input Config Portc = Output Portb = 255 'Puerto A como salida para datos 'Puerto B como entrada para pulsadores 'Puerto C como salida para control 'Activacion de pull ups para pulsadores 'Pines para control

Config Lcdpin = Pin , Port = Porta , E = Portc.0 , Rs = Portc.2 Initlcd 'inicializacion del LCD Cursor On Cls Locate 1 , 1 Lcd "EPN" 'Escritura de nombres. Lowerline Lcd "ELIZABETH" Waitms 400 For A = 1 To 27 Shiftlcd Right Waitms 150 Next Cls Upperline Lcd "Modo:" Contador = 0 Accion = 0 Do Lowerline Lcd " " Lowerline Lcd " " ; Contador Waitms 300

'Lazo que hace deslizar los nombres

'Se encera el contador 'Se inicializa en vacio el control de conteo

'Se escribe el valor actual del contador en LCD 'Espera un poco

'Se hace un Polling de los pulsadores, cada uno tiene asignado una bandera If Pinb.0 = 0 Then 'Se levantan banderas en el control de conteo Accion = 1 'correspondientes al pulsador presionado Elseif Pinb.1 = 0 Then Accion = 2 Elseif Pinb.2 = 0 Then Accion = 3 Elseif Pinb.3 = 0 Then Accion = 4 End If If Accion = 1 And Contador < 255 Then cuenta, Incr Contador Locate 1 , 6 'Si se presiono el p1 y aun no llega al tope de la 'se incrementa el contador 'Se escribe la etiqueta "ascendente"

Lcd "Ascendente " Elseif Accion = 2 And Contador > 0 Then activa Decr Contador Locate 1 , 6 Lcd "Descendente" Elseif Accion = 3 And Contador < 250 Then Contador = Contador + 5 Locate 1 , 6 Lcd "Incrementa " Elseif Accion = 4 And Contador > 4 Then Contador = Contador - 5 Locate 1 , 6 Lcd "Decrementa " End If Loop
CIRCUITO:

'Sino, hace lo mismo, segun la bandera que este

BIBLIOGRAFIA

ftp://ftp.ehu.es/cidira/dptos/depjt/Practicas/ASD/documentacion/practicas/03_LcdDatasheet.pdf http://picrobot.blogspot.com/2008/11/display-lcd-cmo-se-controlan.html http://www.clubse.com.ar/DIEGO/NOTAS/notas19/nota32.htm http://www.forosdeelectronica.com/about285.html

Você também pode gostar