Con
estas pequeñas rutinas podras enviar un dato (D_LCD) o un comando (C_LCD) a un
display de cristal liquido LCD mediante los microcontroladores PIC's. El puerto
PB (nibble alto) se usa para enviar la información y los pines PA.0 y PA.1 para
control del LCD (RS y EN respectivamente; la terminal R/W' del display debe ser
conectada a 0 volts) Puedes hacer uso del Sistema de Desarrollo para PIC16F84A. Sólo tienes que definir las
siguientes variables: DATA_LCD, TEMP1 y TEMP2 y la información colocarla en el
registro W.
;*****************************************************
; ------ Rutina de configuracion de
puertos para el display ------
;--------------------------------------------------------------------------
INI_LCD: bsf STATUS,5 ;Banco 1
movlw b'00001111' ;Salida (0's)/ entrada (1's)
movwf TRISB ;Puerto
B = 0000 1111
movlw b'00011000' ;Salida (0's)/ entrada (1's)
movwf TRISA ;Puerto
A salida PA0=RS, PA1=EN
bcf STATUS,5 ;Banco 0
bsf PORT_A,1 ;E=1 Desactiva LCD
return
;****************************************************
; ------- Rutina de configuracion del DISPLAY LCD -------
;-------------------------------------------------------------------------
LCD_CNFG:movlw b'00110011'
call C_LCD
movlw b'00100010'
call C_LCD
movlw b'00101000'
call C_LCD
movlw b'00000001'
call C_LCD
movlw b'10000000'
call C_LCD
movlw b'00001100'
call C_LCD
return
;****************************************************
; ------- Rutina para enviar DATO y COMANDO al DISPLAY -------
;------------------------------------------------------------------------
C_LCD: bcf PORT_A,0 ;RS
= 0 (modo comando)
goto LCD_GO
D_LCD: bsf PORT_A,0 ;RS = 1 (modo dato)
LCD_GO: movwf DATA_LCD
movwf PORT_B ;Información a sacar por
PORT_B
call DELAY_LCD ;Espera
a que se libere el LCD
bcf PORT_A,1 ;Activa señal E
call DELAY_LCD ;Espera
a que se libere el LCD
bsf PORT_A,1 ;Activa señal E
call DELAY_LCD
swapf DATA_LCD,W
movwf PORT_B ;Información a sacar por
PORT_B
call DELAY_LCD ;Espera
a que se libere el LCD
bcf PORT_A,1 ;Activa señal E
call DELAY_LCD ;Espera
a que se libere el LCD
bsf PORT_A,1 ;Activa señal E
return
;*****************************************************
; ------- RUTINA DE RETARDO PARA EL LCD -------
;------------------------------------------------------------------
DELAY_LCD: movlw 0x03
movwf TEMP2 ;Carga
la variable TEMP2
L1: clrf TEMP1 ;Carga
la variable TEMP1
L2: decfsz TEMP1,1 ;Decrementa
la variable TEMP1
goto L2
decfsz TEMP2,1 ;Decrementa
la variable TEMP2
goto L2
return