Initialise is at the end of the second code which you need to include using this code

Code:
INCLUDE "LCD_PCF8574A.pbp"     ; Init LCD using I2C and PCF8574
Code:
; File Name   : LCD_PCF8574A.pbp
; Author      : Darrel Taylor
; Created     : Mon Feb 24 2014
;               Sun Mar 03 2014
;               Updated bit shift. Data is on Lower side, Cmd lines on Upper               
; Compiler    : PicBasic Pro 3.0.6.x or higher
; Description : Uses PCF8574 Port expander to interface with HD44780 LCD
;
;-------------------------------------------------------------------------------
LCD_BuffSize    CON 30
LCD_Buff        VAR BYTE[LCD_BuffSize]
LCD_BuffAddr    CON EXT : @LCD_BuffAddr = _LCD_Buff
LCD_BuffLen     VAR WORD        ; Length of data in buffer
LCD_Data        VAR BYTE        ; Data to Send to LCD
LCD_Byte        VAR BYTE        ; Nibbles to Send
LCD_RS          VAR LCD_Byte.0  ; Register Select bit
LCD_RW          VAR LCD_Byte.1  ; Read/Write bit
LCD_E           VAR LCD_Byte.2  ; Enable bit
LCD_BackLight   VAR LCD_Byte.3  ; Backlight 0=ON
LCD_WriteMode   VAR BYTE        ; 1=LowNibble, 2=HighNibble, 3=Both
LCD_CommandMode VAR BIT         ; Indicates next byte is a command
LCD_Byte2       VAR BYTE        ; Same nibble without E bit
LCD_Idx         VAR BYTE
testmode        var byte

GOTO Over_LCDPCF8574 

;----[Write 1-byte to LCD]--(Input is LCD_Data)---------------------------------
USERCOMMAND "LCD_WRITE"
LCD_WRITE_:
   LCD_E = 1
   IF LCD_WriteMode.1 = 1 THEN                             ; Write High Nibble
     LCD_Byte = (LCD_Byte & $0F) | (LCD_Data  & $F0)
     LCD_Byte2 = LCD_Byte & $FB    
     I2CWRITE SDA,SCL, LCD_Addr,[LCD_Byte, LCD_Byte2]
   ENDIF
  
   IF LCD_WriteMode.0 = 1 THEN                             ; Write Low Nibble
     LCD_Byte = (LCD_Byte & $0F) | ((LCD_Data << 4 )& $F0)
     LCD_Byte2 = LCD_Byte & $FB
     I2CWRITE SDA,SCL, LCD_Addr,[LCD_Byte, LCD_Byte2]
   ENDIF
return

ASM
LCD_WRITE?  macro
    L?CALL _LCD_WRITE_
  endm
ENDASM

;----[Write contents of buffer to LCD]------------------------------------------
USERCOMMAND "LCD_WRITEBUFF"
LCD_WRITEBUFF_:
' The purpose of this routine is to increment through LCD_Buff and
' pass each character to LCD_Data so that it can be written.
' This will loop for LCD_BuffLen which is calculated by 
'    subtracting the starting address of the buffer from the
'    ending address of the buffer.

    LCD_BuffLen = R5 - LCD_BuffAddr -1
    LCD_WriteMode = 3          ; Both Nibbles
    LCD_CommandMode = 0
    FOR LCD_Idx = 0 TO LCD_BuffLen
        IF LCD_Buff(LCD_Idx) = $FE THEN LCD_CommandMode = 1 : GOTO LCD_ByteDone
        IF LCD_CommandMode THEN
            LCD_RS = 0   ' this is a command
            LCD_CommandMode = 0 ' false, next byte will be data
        ELSE
            LCD_RS = 1   ' this is data
        ENDIF
        LCD_Data = LCD_Buff(LCD_Idx)
        LCD_Write
        IF LCD_CommandMode THEN
            PAUSE 2
        ELSE
            PAUSEUS 50
        ENDIF

      LCD_ByteDone:
    NEXT LCD_Idx

    LCD_CommandMode = 0
RETURN

ASM
LCD_WRITEBUFF?  macro
    L?CALL _LCD_WRITEBUFF_
  endm
ENDASM

USERCOMMAND "LED_WRITE"
LED_Write_:    
    ; Write to the LEDs (this is a test routine)
    LCD_E = 1
    IF LCD_WriteMode.0 = 1 THEN                                  ; Write Low Nibble
       LCD_Byte = (LCD_Byte & $0F) | (LCD_Data  & $F0)
       LCD_Byte2 = LCD_Byte & $FB
       i2cwrite SDA,SCL, LCD_Addr2,[LCD_Byte]
       pause 500
       i2cwrite SDA,SCL, LCD_Addr2,[LCD_Byte2]
       pause 500
    endif
    IF LCD_WriteMode.0 = 1 THEN                                  ; Write Low Nibble
       LCD_Byte = (LCD_Byte & $0F) | ((LCD_Data << 4 )& $F0)
       LCD_Byte2 = LCD_Byte & $FB
       i2cwrite SDA,SCL, LCD_Addr2,[LCD_Byte]
       pause 500
       i2cwrite SDA,SCL, LCD_Addr2,[LCD_Byte2]
       pause 500
    endif   
RETURN

ASM
LED_WRITE?  macro
    L?CALL _LED_WRITE_
  endm
ENDASM

Over_LCDPCF8574:

;----[Initialize the LCD]-------------------------------------------------------
PAUSE 250             ; LCD Power-on delay
LCD_Backlight = 1     ; Backlight OFF
LCD_RW = 0            ; Write to LCD
LCD_RS = 0            ; Command Register

LCD_WriteMode = 1     ;-- Low Nibbles only
LCD_Data = 3          ; Reset 3 times
gosub LCD_Write_
PAUSEUS 6000
gosub LCD_Write_
PAUSEUS 1000
gosub LCD_Write_
PAUSEUS 1000

LCD_Data = 2          ; Start 4-bit mode
gosub LCD_Write_
PAUSEUS 1000

LCD_WriteMode = 3     ;-- Both Nibbles
LCD_Data = $28
gosub LCD_Write_      ; Function Set, 4-bit, 2-line, 5x7
LCD_Data = $0C
gosub LCD_Write_      ; Display ON
LCD_Data = $01
gosub LCD_Write_      ; Clear Screen
PAUSE 2
LCD_Data = $06 
gosub LCD_Write_      ; Entry Mode
                       
PAUSE 2               ; Let command finish
The files you need are here
http://support.melabs.com/threads/98...F8574-20x4-LCD