lunes, 10 de agosto de 2009

Codigo para manejar una pantalla LCD 16x2 con PIC

;este es un codigo para manejar una pantalla LCD 16x2 de las que usan un chip HITACHI ;HD44780U como driver las subrutinas seran manejadas con algunas definiciones para
;que sea facil ocuparlas en diferentes modelos de la familia de pic16
;no me enfoco mucho en la teoria ya que en la red hay una gran cantidad de paginas con ella
;y me limito a poner codigos funcionales


;defino los pines que ocuparemos para conectar a EN y RS, R/W lo pongo a tierra

;en este caso ocupo pines del puerto a para poner los pines de control de la pantalla
;recuerda revisar que los pines de tu microcontrolador, no tengan algun periferico
;adicional que tengas que desabilitar ANTES de poder ocuparlo


;declaraciones necesarias para las subrutinas de manejo de la LCD
#DEFINE EN PORTA,0 ;defino al pin EN en el PORTA,0
#DEFINE RS PORTA,1 ;defino al pin RS en el PORTA,1

PORTLCD EQU PORTB ;si, si se puede declarar asi un registro
; en casi de que quieras poner otro puerto simplemente ponlo en
;lugar de PORTB

;declaro un par de comandos que ocupare despues
RENGLON1 EQU B'10000000' ;este comando posiciona el cursor en el renglon1
RENGLON2 EQU B'11000000' ;este comando posiciona el cursor en el renglon2

;habiendo declarado lo necesario procedemos a las subrutinas

;subrutina de inicializacion de la LCD 16x2

INIT_LCD:

MOVLW B'00110000'
CALL COMANDO

MOVLW B'00110000'
CALL COMANDO

MOVLW B'00110000'
CALL COMANDO


MOVLW B'00111100'
CALL COMANDO


MOVLW B'00001000'
CALL COMANDO

MOVLW B'00000001'
CALL COMANDO

MOVLW B'00000110'
CALL COMANDO

MOVLW B'00001111';
CALL COMANDO ;
RETURN


COMANDO MOVWF PORTLCD
BCF RS
BSF EN
CALL RETARDO5
BCF EN
RETURN

DATO MOVWF PORTLCD
BSF RS
CALL RETARDO5
BSF EN
CALL RETARDO5
BCF EN
RETURN

RETARDO5mS: movlw d'1' ; d significa que es decimal. Mueve l a w, l = 10
movwf num3 ;mueve w = 10 al registro num3
otra2 movlw d'8' ; mueve l = 203 a w
movwf num2 ; mueve w = 203 al registro num2
otra1 movlw d'207'
movwf num1

otra decfsz num1,1 ; decrementa num1 de 1 en 1 hasta llegar a cero.
goto otra ;El # 1 del destino es para que relice la instruccion
decfsz num2,1 ;dentro del registro f
goto otra1
decfsz num3,1
goto otra2
Return

; en breve pondre un codigo funcional que ocupe estas subrutinas,
;saludos!!!

2 comentarios:

  1. Hola me es muy interesante todo lo que tenga que ver con pics ahora tengo un inconveniente con uno de ellos (16f877a) con el cual tengo que manejar una lcd pero que todo este circuito me sea activado con un relevador. en si mi duda es en la programacion como mando esa instruccion; mientras este activado un relevador que me muestre un texto y mientras esta el otro relevador activado otro texto diferente

    espero y me ayuden o me digan donde acudir para solucionar esta problematica, aqui mismo leere la respuesta

    ResponderEliminar
  2. Hola, el foro de consultas que tenemos esta en http://foros.mexatronica.com/ ahi te pueden apoyar con tu problema, como tip te puedo decir que si adjuntas el diagrama del circuito que estas utilizando te podran ayudar mas rapido.

    Saludos!

    ResponderEliminar