Try again
Code:
DEFINE OSC 40 ' 10 MHz XTAL AND X 4 INTERNAL PLL
DEFINE I2C_SLOW 1
SDA VAR PORTD.2 ; I2C Data pin
SCL VAR PORTD.3 ; I2C Clock Pin
LCD_Addr CON 78
'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
;----[Initialize the LCD]-------------------------------------------------------
PAUSE 1000 ; 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
LCD_RS = 1 ' this is data
goto main
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
Main:
I2CWRITE SDA,SCL, LCD_Addr, [%00000000] ' bck_lt= off
PAUSE 200
I2CWRITE SDA,SCL, LCD_Addr, [%00001000] ' bck_lt=on
PAUSE 200
LCD_Data = "T"
gosub LCD_Write: PAUSEUS 50
LCD_Data = "e"
gosub LCD_Write: PAUSEUS 50
LCD_Data = "s"
gosub LCD_Write: PAUSEUS 50
LCD_Data = "t"
gosub LCD_Write: PAUSEUS 50
LCD_Data = "-"
gosub LCD_Write: PAUSEUS 50
pause 500
goto Main
Bookmarks