Está en la página 1de 5

TUTORIAL: MANEJO DE LCD MEDIANTE BUS DE 4 BITS

AUTOR: ING. CHRISTIAN VILLARREAL HERNANDEZ COPYRIGHT MXICO 2013


Para este tutorial se utiliza un MCU PIC16F84A (aunque el cdigo se puede adaptar para cualquier MCU,
incluso de otra marca).
EL bus de datos es de 4 bits: para el LCD son los pines D4-D7, y para el MCU son RB4 RB7. Los pines de
control estn conectados al PORTA (en el cdigo se describe).
A fin de lograr una mejor comprensin del cdigo se han incluido comentarios en algunas partes, sin
embargo, se recomienda un anlisis ms profundo del datasheet del mdulo LCD.
Cdigo:
;Manejo de LCD mediante 4 bits
;Autor: Ing. Christian Villarreal Hernndez
;Copyright Mxico 2013
#include "p16F84A.inc"

; CONFIG
;__config 0xFFF9
__CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_OFF & _CP_OFF

;Comienza zona de etiquetas
status equ 0x03
porta equ 0x05
portb equ 0x06
trisa equ 0x85
trisb equ 0x86

cont1 equ 0x0C ; registros para subrutinas de retardo
cont2 equ 0x0E

LCDTemp equ 0x0D ; registro auxiliar antes de enviar al LCD

#DEFINE RS porta,0 ; pines de control del LCD
#DEFINE RW porta,1 ; en este caso el bit RW siempre est en 0, se puede conectar a GROUND
;en el circuito
#DEFINE E porta,2

org 0

; Contina ..



TUTORIAL: MANEJO DE LCD MEDIANTE BUS DE 4 BITS
AUTOR: ING. CHRISTIAN VILLARREAL HERNANDEZ COPYRIGHT MXICO 2013

; inicia rutina principal
; debe visualizarse CVH (con el cursor encendido) en la LCD comenzando por la lnea 1

Inicio
call Init ; Init es la subrutina de inicializacin del LCD (ver datasheet)
ver
movlw 'C'
call caract ; subrutina que enva dato al PORTB
call R20ms ; cada caracter se visualiza despus de 20ms, esto se puede omitir
movlw 'V'
call caract
call R20ms
movlw 'H'
call caract
call R20ms
sleep

Init
bcf status,5
clrf trisa ; porta es salida
bsf status, 5
bcf RW
bcf E ; LCD inhabilitado (an no hemos enviado nada)
bcf RS ; LCD en modo comando
; comienza inicializacin del LCD
call R20ms
movlw b'00110000'
call write
call R5ms
movlw b'00110000'
call write
call R200us
movlw b'00110000'
call write
call R20us ; damos un tiempo pequeo para que el LCD reciba el dato
movlw b'00100000' ; configuramos bus de 4 bits
call write
call R20us
;contina


TUTORIAL: MANEJO DE LCD MEDIANTE BUS DE 4 BITS
AUTOR: ING. CHRISTIAN VILLARREAL HERNANDEZ COPYRIGHT MXICO 2013


; falta configurar las caractersticas del LCD
; ConfigA: en este caso es de 16x2 y de 5x7 pixeles
; ConfigB: debemos borrar el LCD. ConfigC: Cursor ON. ConfigD: incrementar el cursor cada vez que
;enviemos un caracter
; llamamos a las subrutinas
call configA
call configB
call configC
call configD
return ; fin de rutina de configuracin e inicializacin
configA
movlw b'00101000'
comando ; subrutina para enviar comando al LCD
bcf RS ; modo comando
goto send
caract
bsf RS ; modo caracter o dato
send
movwf LCDTemp ;primero enviamos los bits de mayor peso (recordar que el bus es de 4bits)
call write
swapf LCDTemp, w ; se intercambian los nibbles del registro, es decir, los bits de menor peso
call write ; ahora son de mayor peso y son enviados
btfss RS ; verificamos este bit para dar el tiempo apropiado
call R2ms ; si RS = 0, modo comando, le damos 2ms, tiempo para el BUSY FLAG
call R50us ; si RS = 1, modo caracter, le damos 50us, tiempo para el BUSY FLAG
return
configB
movlw b'00000001'
goto comando
configC
movlw b'00001110'
goto comando
configD
movlw b'00000110'
goto comando

; contina .



TUTORIAL: MANEJO DE LCD MEDIANTE BUS DE 4 BITS
AUTOR: ING. CHRISTIAN VILLARREAL HERNANDEZ COPYRIGHT MXICO 2013

write
bsf status,5
clrf trisb ;configuramos el portb como salida, las lneas RB4-RB7 se conectan al bus del LCD
bcf status,5
andlw b'11110000' ; nos quedamos con los bits de mayor peso
movwf portb ; el dato es enviado por el bus de salida
bsf E ;habilitamos el LCD
call R20us ;le damos un pequeo tiempo
bcf E ; inhabilitamos el LCD (ver datasheet)
return ; cada vez que se enva un dato debe haber una transicin de nivel alto a bajo en E
; segn indica el datasheet

;inician los bloques de subrutinas de retardo utilizadas en este cdigo
R200us
nop
movlw d'64'
goto ret_us
R20ms
movlw d'20'
goto ret_ms
R5ms
movlw d'5'
goto ret_ms
R50us
nop
movlw d'14'
goto ret_us
R20us
movlw d'5'
ret_us
movwf cont1
ret_us1
decfsz cont1,F
goto ret_us1
return
R2ms
movlw d'2'
goto ret_ms
R1ms
movlw d'1'
ret_ms
TUTORIAL: MANEJO DE LCD MEDIANTE BUS DE 4 BITS
AUTOR: ING. CHRISTIAN VILLARREAL HERNANDEZ COPYRIGHT MXICO 2013
movwf cont2 ; contina..

ret_ms1
movlw d'249'
movwf cont1
ret_ms2
nop
decfsz cont1,F
goto ret_ms2
decfsz cont2,F
goto ret_ms1
return

END

SIMULACION EN PROTEUS

También podría gustarte