PRÁCTICA Nº 9: Conexión de una pantalla LCD de 1 línea y 16 caracteres.

 

Descripción de los pines de conexión de la LCD (basada en el HD44780).

 

 

 

 

Descripción del lugar que ocupa cada carácter en la pantalla y la dirección de la posición de memoria en la LCD.

 

 

Descripción del carácter colocado y la dirección que ocupa en la memoria de la LCD.

 

 

 

 

Tabla de código de los caracteres.

 

 

 

Descripción de las conexiones al PIC 16F84A.

 

 

 

 

Instrucciones de manejo de la LCD.

 

 

 

Instrucción.

CODIGO

Descripción

Tiempo de ejecución

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

Borrar Pantalla

0

0

0

0

0

0

0

0

0

1

Borra la pantalla y retorna el cursor a la dirección 0 ( Home )

1.64 mS.

Cursor Home

0

0

0

0

0

0

0

0

1

*

Retorna el cursor al inicio ( Dirección o)

1.64 mS.

Modo de entrada de caracteres

0

0

0

0

0

0

0

1

I/D

S

Donde I/D=0 Decremente la posición del cursor, I/D=1 incrementa la posición del cursor,. S=0 El texto de la pantalla no se desplaza, S=1 El texto de la pantalla se desplaza en el momento que se escribe un carácter

40 uS.

Apagado y encendido de la pantalla.

0

0

0

0

0

0

1

D

C

B

Donde D=0 Pantalla apagada, D=1 Pantalla encendida, C=0 Cursor apagado, C=1 Cursor encendido, B=0 Intermitencia del cursor apagado, B=1 Intermitencia del cursor encendido.

40 uS..

Desplazamiento

cursor y display

0

0

0

0

0

1

S/C

R/L

*

*

 

40 uS.

Funtion Set

0

0

0

0

1

DL

N

F

*

*

 

40 uS.

Dirección

CG RAM

0

0

0

1

ACG

 

40 uS.

Dirección

DD RAM

0

0

1

ADD

 

40 uS.

Leer busy flag  y

dirección

0

1

BF

AC

 

1 uS.

Escribir dato en CG o DD RAM

1

0

Escribir el Dato

 

40 uS.

Leer dato en CG or DD RAM

1

1

Leer el Dato

 

40 uS.

 

 

 

 

 

 

 

 

                                              NOMENCLATURAS

Nomenclatura

Valor = 1

Valor = 0

I/D

I/D=1 Incrementa el Cursor en una posición

I/D=0 Decrementa el Cursor en una posición.

D

D=1 Pantalla Encendida

D=0 Pantalla Apagada.

C

C=1 Cursor Encendido.

C=0 Cursor Apagado.

B

B=1 Intermitencia del cursor encendida.

B=0 Intermitencia del cursor apagado

S/C

S/C=1 Mover todo el texto.

S/C=0 Mover el cursor.

R/L

R/L=1 Mover todo el texto a la izquierda.

R/L=1 Mover todo el texto a la derecha.

DL

DL=1 Bus de datos de 8 Bits.

DL=0 Bus de datos de 4 Bits.

S

S=1 Desplazamiento del texto.

S=0 No desplazamiento del texto

BF

BF=1 Operación Interna en progreso.

BF=0 No puede aceptar instrucción

F

F=1 Matriz para el carácter de 5 X 10 dots

F=0 Matriz del carácter de 5 x 7 Dost

N

N=1 Activación de dos lineas.

N=0 Activación de 1 linea

 

 

 

 

Códigos hexadecimales de las instrucciones usadas.

 

 

 

INSTRUCCIÓN

Hexadecimal

Función set (DL=1, 8-bit interface; N=0, 1 line; F=0, 5*7 Pixels)

30

Modo entrada (I/D=1; S=0)

              06

Display ON-OFF (Control: D=0; C=0; B=0) Display apagado

              08

Display ON-OFF (Control: D=1; C=0; B=0) Display encendido

              0C

Cursor Home

02

Desplazamiento cursor y display ( S/C=0; R/L=1,derecha)

              14

Borrar  pantalla

01

 

 

;------------------------------------------------------------------------------

;PROGRAMA COMPROBADO:

;Manejo de una LCD.

;Escribir el mensaje: PIC 16F84A, v.00

;------------------------------------------------------------------------------

;PIC 16F84A/ 4 MHz/

;Bits de configuración para el programador:

;CP(protección de la memoria de código):..............................No

;PWRTE(activación del temporizador "Power-up"):..............No

;WDTE(activación del "perro guardián"):...............................No

;FOSC1-FOSC0(tipo de oscilador):........................................Xtal

;------------------------------------------------------------------------------

;PROGRAMA

            LIST                p=16f84A

            INCLUDE          "p16f84A.inc"

 

            ORG                00h

            goto                 inicio

 

            ORG                10h

inicio

 

 

 

;Configurar los puertos A y B.

           

            call      pabconfig

           

;Configuración inicial de la LCD.

           

            call      lconfigI

 

;Configuración de trabajo de la LCD.

           

            call      lconfigW

programa

 

            call      lcdPIC 

 

progra

            goto     progra

 

 

 

;----------------------------------------

;Subrutina para poner un texto.

;---------------------------------------

 

;P  I  C _  1  6  F  8  4  A  ,  _  v . 0 0

 

 

  

lcdPIC

            call                 pabconfig;       subrutina de configurar Puerto A y B para la LCD.

            call                  lclear;              borrar pantalla

            call                  lhome;             dirección 00h de la pantalla

 

            movlw             00h;                 dirección de comienzo del mensaje en la 1ª línea

            call                  wdir;                carga dirección 00h en la pantalla

 

            movlw             50h;                 P          carga 50h = P (ASCII)

            call                  wdato;             escribir el símbolo P en la pantalla (dirección 00h)

            movlw             49h;                 I

            call                  wdato

            movlw             43h;                 C

            call                  wdato

            movlw             20h     

            call                  wdato

            movlw             31h;                 1

            call                  wdato

            movlw             36h;                 6

            call                  wdato

            movlw             46h;                 F

            call                  wdato

            movlw             38h;                 8

            call                  wdato

            movlw             34h;                 4

            call                  wdato

            movlw             41h;                 A

            call                  wdato

            movlw             2ch;                 ,

            call                  wdato 

            movlw             20h     

            call                  wdato

            movlw             76h;                 v         

            call                  wdato

            movlw             2eh;                 .

            call                  wdato

            movlw             30h;                 0

            call                  wdato

            movlw             30h;                 0

            call                  wdato

           

 

            call                  pabI0O;           subrutina de hacer los pines entradas excepto

                                               ;           RA0= E (habilitación de la pantalla)= 0, des-

                                               ;           habilitada.

            return

 

;-------------------------------------------

;-------------------------------------------

;Subrutinas de la pantalla LCD.

;-------------------------------------------

 

;--------------------------------------

;Subrutina de configuración

;del puerto A y B.

;-------------------------------------

pabconfig

                        call                  pacontrol

                        call                  pbbusO

                        return

 

 

 

 

 

 

;---------------------------------------------

;Subrutina de configuración inicial

;de la pantalla LCD.

;---------------------------------------------

lconfigI

                        call      mseg20

                        call      l8xx

                        call      mseg6

                        call      l8xx

                        call      useg150

                        call      l8xx

 

                        call      l817

                        call      ldisplay0xx

                        call      lclear

                        call      lmode10

                        return

;-------------------------------------------

;Subrutina de configuración de la

;LCD para comenzar a trabajar.

;-------------------------------------------

lconfigW

                        call      ldisplay10x

                        call      lcursorder

                        return

;-----------------------------------------------------

;Puerto A 3,4= entradas, 0,1 y 2  = salidas

;y las pongo a cero.

;-----------------------------------------------------

pacontrol

                        call      banco1

                        bcf       TRISA,0

                        bcf       TRISA,1

                        bcf       TRISA,2          

                        call      banco0

                        bcf       PORTA,0

                        bcf       PORTA,1

                        bcf       PORTA,2

                        return

 

 

 

 

 

 

 

 

;------------------------------

;Puerto B= salidas

;y las pongo a cero.

;------------------------------

pbbusO

                        call                  banco1

                        movlw             00h

                        movwf             TRISB

                        call                  banco0

                        movlw             00h

                        movwf             PORTB

                        return 

 

;----------------------------------------------------

;Puerto B y RA2,1 = entradas y

;la RA0 se queda como salida a cero para

;inhabilitar la LCD.

;---------------------------------------------------

pabI0O

            call                  banco1

            movlw             0ffh

            movwf             TRISB

            bsf                   TRISA,1

            bsf                   TRISA,2          

            call                  banco0

            return 

 

;----------------------------------------

;Pulso de habilitación del LCD.

;----------------------------------------

;Flanco de subida

lE1

            nop

            bcf                   PORTA,0

            nop

            bsf                   PORTA,0

            return

 

;Flanco de bajada

lE2

            nop

            bcf                   PORTA,0

            nop

            return

 

 

 

;------------------

;Escribir dato. 

;------------------

lwd

            bsf                   PORTA,2

            bcf                   PORTA,1

            call                  lE1

            return

 

;---------------------------

;Escribir instrucción.

;--------------------------

lwi

            bcf                   PORTA,2

            bcf                   PORTA,1

            call                  lE1

            return

;-----------------------------

;Escribir instrucciones.

;-----------------------------

;De 20h a puerto B.

;----------------------------

w20pb

            movf                20h,0

            movwf             PORTB

            return

;--------------------------------------------------

;Escribir instrucción de "No operación".

;--------------------------------------------------

lnop

            movlw             00h

            call                  winst

            return

winst

            movwf             20h

            call                  lwi

            call                  w20pb

            call                  lE2

            call                  useg45

            return

 

 

 

 

 

 

 

;----------------------------------------------------

;Escribir inst. de limpiar display y

;poner a cero el contador de direcciones.

;----------------------------------------------------

lclear

            movlw             01h

            call                  winstt

            return

winstt

            movwf             20h

            call                  lwi

            call                  w20pb

            call                  lE2

            call                  mseg2

            return

 

;---------------------------------------

;Escribir inst. de cursor a casa.

;--------------------------------------

lhome

            movlw             02h

            call                  winstt

            return

 

;------------------------------------------

;Escribir inst. de modo de entrada.

;------------------------------------------

;-----------------------------------------------------------------

;El cursor se mueve incremental (I/D= 1)

;y el display no se desplaza automáticamente (S= 0).

;-----------------------------------------------------------------

lmode10

            movlw             06h

            call                  winst

            return

 

;------------------------------------------------

;Escribir inst. del control del display.

;------------------------------------------------

;------------------------------------------------------

;Display on, D= 1; Cursor off, C= 0; B= x.

;------------------------------------------------------

ldisplay10x

                        movlw             0ch

                        call                  winst

                        return

 

;-----------------------------------------

;Display off, D= 0; C= x; B= x.

;-----------------------------------------

ldisplay0xx

                        movlw             08h

                        call                  winst

                        return

;----------------------------------------------------

;Desplazar display o mover cursor (S/C) y

;especificar dirección (R/L).

;----------------------------------------------------

;---------------------------------------------------

;Desplazar display y no cursor (S/C=1) a

;la derecha (R/L=1).

;---------------------------------------------------

ldisplayder

                        movlw             1ch

                        call                  winst

                        return

 

;------------------------------------------------

;Mover cursor y no display (S/C=0) a

;la derecha (R/L=1).

;------------------------------------------------

lcursorder

                        movlw             14h

                        call                  winst

                        return

 

;---------------------------------------------------------------

;Función Set.

;Configurar la pantalla: bus de 4 o 8 bits (DL),

;1 o 2 líneas (N) y nº de puntos (5x10 o 5x7) (F).

;---------------------------------------------------------------

l8xx

            call                  lwi

            movlw             30h

            movwf             20h

            call                  w20pb

            call                  lE2

            call                  useg45

            return

l817

            movlw             30h

            call                  winst

            return

 

 

;--------------------------------------------------

;Subrutina para colocar datos seguidos

;-------------------------------------------------

wdato 

            movwf             20h

            call                  lwd

            call                  w20pb

            call                  lE2

            call                  useg45

            return

;----------------------------------------------------

;Subrutina para colocar datos en cualquier

;posición de la pantalla: DDRAM dirección.

;----------------------------------------------------

wdir

            addlw              80h

            movwf             20h

            call                  lwi

            call                  w20pb

            call                  lE2

            call                  useg45

            return

 

;------------------------------

;Retardos para la LCD.

;------------------------------

;---------------------------

;Retardo de 2 mseg.

;--------------------------

mseg2

            call                  banco0

            movlw             0ffh

            movwf             30h

            movlw             03h

            movwf             31h

salto5s

            decfsz              30h,1

            goto                 salto5s

            decfsz              31h,1

            goto                 salto5s

            return

 

 

 

 

 

;--------------------------

;Retardo de 6 mseg.

;--------------------------

mseg6

            call                  banco0

            movlw             0ffh

            movwf             30h

            movlw             08h

            movwf             31h

salto41s

            decfsz              30h,1

            goto                 salto41s

            decfsz              31h,1

            goto                 salto41s

            return

 

;---------------------------

;Retardo de 20 mseg.

;---------------------------

mseg20

            call                  banco0

            movlw             0ffh

            movwf             30h

            movlw             1ah

            movwf             31h

salto4s

            decfsz              30h,1

            goto                 salto4s

            decfsz              31h,1

            goto                 salto4s

            return

 

;---------------------------

;Retardo de 45 useg.

;---------------------------

useg45

            call                  banco0

            movlw             0fh

            movwf             30h     

salto6s

            decfsz              30h,1

            goto                 salto6s

            return

 

 

 

 

;------------------------------

;Retardo de 150 useg.

;------------------------------

useg150

            call                  banco0

            movlw             32h

            movwf             30h     

salto61s

            decfsz              30h,1

            goto                 salto61s

            return

 

;------------------------------------------

;Subrutinas de cambios de bancos.

;------------------------------------------

banco0

            bcf       STATUS,RP0

            return

banco1

            bsf       STATUS,RP0

            return

 

 

            END