INIT_LCD
bcf PIR1,SSP1IF ; borra flag interrupcion
BCF LCD_RST ; Activa reset a nivel bajo
MOVLW D'5'
CALL DELAY ; Retardo en ms, que se carga en W.
BSF LCD_RST ; Activa reset a nivel alto
SET_LCD
MOVLW D'1'
CALL DELAY ; Retardo en ms, que se carga en W.
movlw 0x21 ; Chip enable solamente.
call TX_SPI_C
movlw 0xC8 ; Vop
call TX_SPI_C
movlw 0x06 ; Set Temp coefficent.
call TX_SPI_C
movlw 0x13 ; LCD bias mode 1:48.
call TX_SPI_C
movlw 0x20 ; Horizontal mode, normal set command.
call TX_SPI_C
movlw 0x08 ; Mod control all dots on 9
call TX_SPI_C
movlw 0x0C ; Mod control normal.
CALL TX_SPI_C ; Transmicion por SPI de comandos
CALL CLR_LCD
; CALL CLEAR_LCD
CALL DELAY_200us
CALL X_address
CALL Y_address
RETLW 0X00
;*******************LIMPIA MEMORIA RAM del LCD ******************************
; dos formas de borrar, que estaban en la red.
CLR_LCD
movlw b'00001000' ;mode [Pantalla Blanca]
call TX_SPI_C ;para que no se vea el borrado.
movlw d'2'
movwf CounterB
Bint
movlw d'252' ;carga 252 vueltas que seran x2=504
movwf CounterA ;para borrar todo el LCD
Bint2
movlw b'00000000'
MOVWF TEMP_CARACTER
call TX_SPI_D
decfsz CounterA ;espera 252 vueltas
goto Bint2
decfsz CounterB ;da 2 x 252 = 504 vueltas
goto Bint
movlw b'00001100' ;mode [Normal mode]
call TX_SPI_C
RETLW 0X00
CLEAR_LCD
MOVLW .6 ; Columnas del caracter
movwf CounterC
PIXEL_84
movlw .84 ; Cantidad de pixel
movwf CounterA
BITS_FILAS
movlw .8 ; Cantidad de bits de las columnas
movwf CounterB
SPI_to_LCD
MOVLW 0X00
MOVWF TEMP_CARACTER
CALL TX_SPI_D
SPI_LOOP
nop
decfsz CounterB
goto SPI_to_LCD
decfsz CounterA
goto BITS_FILAS
decfsz CounterC
goto PIXEL_84
retlw 00
;********************** Posicion X ******************************************
X_address
iorlw b'10000000' ;añade bit de comando
call TX_SPI_C
RETLW 0X00
;*********************** Posicion Y *****************************************
Y_address
iorlw b'01000000' ;añade bit de comando
call TX_SPI_C
RETLW 0X00
;_________________________video invertido____________________________________
Invert_video
movlw b'00001101' ;mode [Inverse video mode]
call TX_SPI_C
return
;_________________________video normal____________________________________
normal_video
movlw b'00001100' ;mode [normal mode]
call TX_SPI_C
return
;________________Transmision de datos por puerto serie SPI___________________
TX_SPI_C
bcf PIR1,SSP1IF ; borra flag interrupcion
MOVWF TEMP_CARACTER
bcf LCD_SCE ; Enable display!!!!!!!!!!!!!!!!!!!!!!
NOP
NOP
bcf LCD_DorC ; Modo COMANDO
movFf TEMP_CARACTER, SSP1BUF ; Transmision por puerto SPI
GOTO SPI_DELAY
TX_SPI_D
; MOVWF TEMP_CARACTER
bcf PIR1,SSP1IF ; borra flag interrupcion
; MOVWF TEMP_CARACTER
bcf LCD_SCE ; Enable display!!!!!!!!!!!!!!!!!!!!!!
NOP
NOP
bsf LCD_DorC ; Modo DATO (por defecto)
movFf TEMP_CARACTER, SSP1BUF ; Transmision por puerto SPI
SPI_DELAY
NOP
NOP
btfss PIR1,SSP1IF ; Espera a que se envie el dato
goto SPI_DELAY
bcf PIR1,SSP1IF ; borra flag interrupcion
bsf LCD_SCE ; display OFF
RETLW 0X00
;******************************************************************************