I'm using this graphical LCD with a PIC18F26K22. The application counts pulses coming in on TMR0 and, every two seconds, displays the number of counts received. The graphics code works great until I get a pulse rate greater that 5 or 10 per second. As the incoming pulse rate increases the GLCD gets more and more garbled, as if some bytes of data are being skipped or corrupted.

Here's the code. Sorry it's kind of long but most of it is the GLCD initialization and character generation functions. Much has been translated from the C example given in the datasheet. I've also attached a PDF of the schematic.
LCD-T0.pdf
Code:
'Using PIC18F26K22

disable

#CONFIG
  CONFIG MCLRE = INTMCLR  ;RE3 input pin enabled; MCLR disabled
  CONFIG FOSC = INTIO67
  CONFIG WDTEN = OFF      ;Watch dog timer is always disabled. SWDTEN has no effect.
  CONFIG CCP2MX = PORTB3  ;CCP2 input/output is multiplexed with RB3
  CONFIG PBADEN = OFF     ;PORTB  ;<5:0> pins are configured as digital I/O on Reset
  CONFIG T3CMX = PORTB5   ;T3CKI is on RB5
#ENDCONFIG

Define OSC 8

ANSELA = 0
ANSELB = 0
ANSELC = 0
ADCON0 = 0

OSCCON = %01100010  '8MHz

LATA  = %00000000
TRISA = %00010000

LATB =  %00000000
TRISB = %00000011

TRISC.2 = 1
'Start the I2C lines in the right states
LATC.3 = 1  'SCL high
TRISC.3 = 0 'SCL as output
LATC.4 = 0  'SDA low
TRISC.4 = 0 'SDA as output

LATC.5 = 1  'CSB starts high
TRISC.5 = 0 'CSB as output

T0CON = %10101000
'        |||||000 - T0PS:  (n/a)
'        ||||1    - PSA:  1 = TImer0 prescaler is NOT assigned. Timer0 clock input bypasses prescaler.
'        |||0     - T0SE:  0 = Increment on low-to-high transition on T0CKI pin
'        ||1      - T0CS:  1 = Transition on T0CKI pin
'        |0       - TMR0ON: 0 = Timer0 is configured as a 16-bit timer/counter
'        1        - TMR0ON: 1 Enables timer0

T1CON = %10001111
'        |||||||1 - TMR1ON
'        ||||||1  - TxRD16: 1 = Enables register read/write of Timer1/3/5 in one 16-bit operation
'        |||||1   - TxSYNC: 1 = Do not synchronize external clock input
'        ||||1    - TxSOSCEN: 1 = Dedicated Secondary oscillator circuit enabled
'        ||00     - TxCKPS: 00 = 1:1 Prescale value
'        10       - TMRxCS: If TxSOSCEN = 1: Crystal oscillator on SOSCI/SOSCO pins


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'ALIASES
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
LCD_RST var LATB.3
SCL var LATC.3
SDA var LATC.4
SDA_Dir var TRISC.4

TMR1IF var PIR1.0  'TMR1 Overflow Interrupt Flag bit

CSB var LATC.5 

GIE var INTCON.7
TMR1ON var T1CON.0

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Variables
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
nAddr var byte

nSlave var byte
nComSend var byte
nDataSend var byte
nSlave = $7E'
nComSend = 0
nDataSend = $40

i var byte 
j var byte 
w var word
nChar var byte
nPage var byte

wDisplay var word
nDig3 var byte
nDig2 var byte
nDig1 var byte
nDig0 var byte
nDPPos var byte ' 0 or 3 or 2 or 1
nDPPos = 0

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
while OSCCON.2 = 0 : wend
CSB = 0
LCD_RST = 0
pause 500
LCD_RST = 1

pause 500
gosub Init_LCD
pauseus 500
gosub clearscreen
pauseus 500

'Set up interrupts
INTCON = %11000000    'GIE, PIE
PIE1 = %00000001  'TMR1 Overflow Interrupt Enable bit
TMR1IF = 0      

ON INTERRUPT GOTO IntHandler

enable
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Main Loop
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Main:
  @ Nop
goto main
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'End of Main Loop
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
disable

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'HELPER FUNCTIONS
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
ClearScreen:
for nPage = $B0 to $BC
  gosub I2C_Start
  nChar = nSlave : gosub I2C_out
  nChar = nComSend : gosub I2C_out
  nChar = nPage : gosub I2C_out  '(page);
  nChar = $10 : gosub I2C_out  'I2C_out(0x10); //column address Y9:Y6
  nChar = $01 : gosub I2C_out  'I2C_out(0x01);//column address Y5:Y2
  gosub I2C_Stop
  gosub I2C_Start
  nChar = nSlave : gosub I2C_out
  nChar = nDataSend : gosub I2C_out
  for w = 0 to 159'2070
    nChar = 0 : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
  next w
next nPage
return

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Zero:
  '0 page 0
  if nPage = $B2 then
    for i = 0 to 33
      lookup i,[_
      $00, $00, $80, $C0, $C0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0,_
      $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $C0,_
      $C0, $80, $00, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  '0 page 1
  elseif nPage = $B3 then
    for i = 0 to 33
      lookup i,[_
      $FC, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $03, $03, $03, $03,_
      $03, $03, $03, $03, $03, $03, $03, $03, $FF, $FF, $FF, $FF, $FF, $FF, $FF,_
      $FF, $FF, $FF, $FC],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  '0 page 2
  elseif nPage = $B4 then
    for i = 0 to 33
      lookup i,[_
      $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $00, $00, $00, $00,_
      $00, $00, $00, $00, $00, $00, $00, $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF,_
      $FF, $FF, $FF, $FF],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  '0 page 3
  elseif nPage = $B5 then
    for i = 0 to 33
      lookup i,[_
      $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $00, $00, $00, $00,_
      $00, $00, $00, $00, $00, $00, $00, $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF,_
      $FF, $FF, $FF, $FF],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  '0 page 4
  elseif nPage = $B6 then
    for i = 0 to 33
      lookup i,[_
      $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $00, $00, $00, $00,_
      $00, $00, $00, $00, $00, $00, $00, $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF,_
      $FF, $FF, $FF, $FF],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  '0 page 5
  elseif nPage = $B7 then
    for i = 0 to 33
      lookup i,[_
      $7F, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $80, $80, $80, $80,_
      $80, $80, $80, $80, $80, $80, $80, $80, $FF, $FF, $FF, $FF, $FF, $FF, $FF,_
      $FF, $FF, $FF, $7F],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  '0 page 6
  elseif nPage = $B8 then
    for i = 0 to 33
      lookup i,[_
      $00, $01, $03, $07, $07, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F,_
      $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $07,_
      $07, $03, $01, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i
  endif
return

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
One:
  '1 page 0
  if nPage = $B2 then
    for i = 0 to 33
      lookup i,[_
      $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $80,_
      $80, $C0, $C0, $C0, $E0, $E0, $E0, $E0, $00, $00, $00, $00, $00, $00, $00,_
      $00, $00, $00, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  '1 page 1
  elseif nPage = $B3 then
    for i = 0 to 33
      lookup i,[_
      $00, $00, $00, $00, $00, $00, $00, $7C, $7E, $7E, $7E, $7F, $FF, $FF, $FF,_
      $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $00, $00, $00, $00, $00, $00, $00,_
      $00, $00, $00, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  '1 page 2
  elseif nPage = $B4 then
    for i = 0 to 33
      lookup i,[_
      $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $FF, $FF, $FF,_
      $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $00, $00, $00, $00, $00, $00, $00,_
      $00, $00, $00, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  '1 page 3
  elseif nPage = $B5 then
    for i = 0 to 33
      lookup i,[_
      $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $FF, $FF, $FF,_
      $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $00, $00, $00, $00, $00, $00, $00,_
      $00, $00, $00, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  '1 page 4
  elseif nPage = $B6 then
    for i = 0 to 33
      lookup i,[_
      $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $FF, $FF, $FF,_
      $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $00, $00, $00, $00, $00, $00, $00,_
      $00, $00, $00, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  '1 page 5
  elseif nPage = $B7 then
    for i = 0 to 33
      lookup i,[_
      $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $FF, $FF, $FF,_
      $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $00, $00, $00, $00, $00, $00, $00,_
      $00, $00, $00, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  '1 page 6
  elseif nPage = $B8 then
    for i = 0 to 33
      lookup i,[_
      $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $0C, $0F, $0F, $0F,_
      $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0C, $00, $00, $00, $00, $00, $00,_
      $00, $00, $00, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i
  endif
return

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Two:
  '2 page 0
  if nPage = $B2 then
    for i = 0 to 33
      lookup i,[_
      $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0,_
      $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $C0,_
      $C0, $80, $00, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  '2 page 1
  elseif nPage = $B3 then
    for i = 0 to 33
      lookup i,[_
      $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03,_
      $03, $03, $03, $03, $03, $03, $03, $03, $FF, $FF, $FF, $FF, $FF, $FF, $FF,_
      $FF, $FF, $FF, $FC],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  '2 page 2
  elseif nPage = $B4 then
    for i = 0 to 33
      lookup i,[_
      $00, $00, $00, $00, $00, $00, $00, $00, $00, $80, $80, $80, $C0, $C0, $C0,_
      $C0, $E0, $E0, $E0, $E0, $F0, $F0, $F8, $FF, $FF, $FF, $FF, $FF, $FF, $FF,_
      $FF, $FF, $FF, $FF],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  '2 page 3
  elseif nPage = $B5 then
    for i = 0 to 33
      lookup i,[_
      $00, $F0, $FC, $FC, $FE, $FE, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,_
      $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $7F, $7F, $7F, $7F, $3F, $3F, $3F,_
      $1F, $0F, $03, $01],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  '2 page 4
  elseif nPage = $B6 then
    for i = 0 to 33
      lookup i,[_
      $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $07, $03, $03, $03,_
      $03, $01, $01, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,_
      $00, $00, $00, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  '2 page 5
  elseif nPage = $B7 then
    for i = 0 to 33
      lookup i,[_
      $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $80, $80, $80, $80,_
      $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80,_
      $80, $80, $80, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  '2 page 6
  elseif nPage = $B8 then
    for i = 0 to 33
      lookup i,[_
      $00, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F,_
      $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F,_
      $0F, $0F, $03, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i
  endif
return

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Three:
  'page 0
  if nPage = $B2 then
    for i = 0 to 33
      lookup i,[_
      $C0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0,_
      $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $C0,_
      $C0, $80, $00, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 1
  elseif nPage = $B3 then
    for i = 0 to 33
      lookup i,[_
      $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03,_
      $03, $03, $03, $03, $03, $03, $03, $03, $03, $FF, $FF, $FF, $FF, $FF, $FF,_
      $FF, $FF, $FF, $FC],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 2
  elseif nPage = $B4 then
    for i = 0 to 33
      lookup i,[_
      $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,_
      $00, $00, $00, $00, $00, $00, $00, $00, $00, $FF, $FF, $FF, $FF, $FF, $FF,_
      $FF, $FF, $FF, $FF],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 3
  elseif nPage = $B5 then
    for i = 0 to 33
      lookup i,[_
      $00, $00, $00, $00, $00, $00, $00, $00, $3E, $3E, $3E, $3E, $3E, $3E, $3E,_
      $3E, $3E, $3E, $3E, $3E, $3E, $3E, $3E, $3E, $FF, $FF, $FF, $FF, $F7, $F7,_
      $F7, $E3, $C3, $80],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 4
  elseif nPage = $B6 then
    for i = 0 to 33
      lookup i,[_
      $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,_
      $00, $00, $00, $00, $00, $00, $00, $00, $00, $FF, $FF, $FF, $FF, $FF, $FF,_
      $FF, $FF, $FF, $FF],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 5
  elseif nPage = $B7 then
    for i = 0 to 33
      lookup i,[_
      $00, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80,_
      $80, $80, $80, $80, $80, $80, $80, $80, $80, $FF, $FF, $FF, $FF, $FF, $FF,_
      $FF, $FF, $FF, $7F],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 6
  elseif nPage = $B8 then
    for i = 0 to 33
      lookup i,[_
      $00, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F,_
      $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $07,_
      $07, $03, $01, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i
  endif
return

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Four:
  'page 0
  if nPage = $B2 then
    for i = 0 to 33
      lookup i,[_
      $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,_
      $00, $80, $C0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $00, $00, $00, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 1
  elseif nPage = $B3 then
    for i = 0 to 33
      lookup i,[_
      $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $80, $C0, $E0, $F0, $F8, $FC,_
      $FF, $7F, $1F, $0F, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $00, $00, $00, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 2
  elseif nPage = $B4 then
    for i = 0 to 33
      lookup i,[_
      $00, $00, $00, $80, $C0, $E0, $F0, $F8, $FC, $FF, $FF, $7F, $1F, $0F, $07, $01,_
      $00, $00, $00, $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $00, $00, $00, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 3
  elseif nPage = $B5 then
    for i = 0 to 33
      lookup i,[_
      $F8, $FC, $FE, $FF, $FF, $FF, $FF, $FF, $F7, $F1, $F0, $F0, $F0, $F0, $F0, $F0,_
      $F0, $F0, $F0, $F0, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $F0, $F0, $F0, $F0],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 4
  elseif nPage = $B6 then
    for i = 0 to 33
      lookup i,[_
      $1F, $1F, $1F, $1F, $1F, $1F, $1F, $1F, $1F, $1F, $1F, $1F, $1F, $1F, $1F, $1F,_
      $1F, $1F, $1F, $1F, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $1F, $1F, $1F, $1F],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 5
  elseif nPage = $B7 then
    for i = 0 to 33
      lookup i,[_
      $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,_
      $00, $00, $00, $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $00, $00, $00, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 6
  elseif nPage = $B8 then
    for i = 0 to 33
      lookup i,[_
      $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,_
      $00, $00, $00, $0C, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0C, $00, $00, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i
  endif
return

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Five:
  'page 0
  if nPage = $B2 then
    for i = 0 to 33
      lookup i,[_
      $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0,_
      $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $C0, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 1
  elseif nPage = $B3 then
    for i = 0 to 33
      lookup i,[_
      $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $03, $03, $03, $03, $03, $03,_
      $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 2
  elseif nPage = $B4 then
    for i = 0 to 33
      lookup i,[_
      $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $00, $00, $00, $00, $00, $00,_
      $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 3
  elseif nPage = $B5 then
    for i = 0 to 33
      lookup i,[_
      $1F, $1F, $1F, $1F, $1F, $1F, $1F, $1F, $1F, $1F, $1F, $1F, $1F, $1F, $1F, $1F,_
      $1F, $1F, $1F, $1F, $1F, $1F, $1F, $FF, $FF, $FF, $FF, $FF, $FF, $FE, $FE, $FC, $F8, $E0],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 4
  elseif nPage = $B6 then
    for i = 0 to 33
      lookup i,[_
      $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,_
      $00, $00, $00, $00, $00, $00, $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 5
  elseif nPage = $B7 then
    for i = 0 to 33
      lookup i,[_
      $00, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80,_
      $80, $80, $80, $80, $80, $80, $80, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $7F],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 6
  elseif nPage = $B8 then
    for i = 0 to 33
      lookup i,[_
      $00, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F,_
      $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $07, $07, $03, $01, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i
  endif
return

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Six:
  'page 0
  if nPage = $B2 then
    for i = 0 to 33
      lookup i,[_
      $00, $00, $80, $C0, $C0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0,_
      $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 1
  elseif nPage = $B3 then
    for i = 0 to 33
      lookup i,[_
      $FC, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $03, $03, $03, $03, $03, $03,_
      $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 2
  elseif nPage = $B4 then
    for i = 0 to 33
      lookup i,[_
      $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $00, $00, $80, $80, $80, $80,_
      $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $00, $00, $00, $00, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 3
  elseif nPage = $B5 then
    for i = 0 to 33
      lookup i,[_
      $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $0F, $0F, $0F, $0F, $0F, $0F,_
      $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FE, $FC, $F0],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 4
  elseif nPage = $B6 then
    for i = 0 to 33
      lookup i,[_
      $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $00, $00, $00, $00, $00, $00,_
      $00, $00, $00, $00, $00, $00, $00, $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 5
  elseif nPage = $B7 then
    for i = 0 to 33
      lookup i,[_
      $7F, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $80, $80, $80, $80, $80, $80,_
      $80, $80, $80, $80, $80, $80, $80, $80, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $7F],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 6
  elseif nPage = $B8 then
    for i = 0 to 33
      lookup i,[_
      $00, $01, $03, $07, $07, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F,_
      $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $07, $07, $03, $01, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i
  endif
return

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Seven:
  'page 0
  if nPage = $B2 then
    for i = 0 to 33
      lookup i,[_
      $80, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0,_
      $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 1
  elseif nPage = $B3 then
    for i = 0 to 33
      lookup i,[_
      $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03,_
      $03, $03, $83, $C3, $E3, $F3, $FB, $FF, $FF, $FF, $FF, $FF, $7F, $3F, $1F, $0F, $07, $03],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 2
  elseif nPage = $B4 then
    for i = 0 to 33
      lookup i,[_
      $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $80, $E0,_
      $F8, $FE, $FF, $FF, $FF, $FF, $FF, $FF, $3F, $0F, $03, $00, $00, $00, $00, $00, $00, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 3
  elseif nPage = $B5 then
    for i = 0 to 33
      lookup i,[_
      $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $E0, $F8, $FE, $FF, $FF,_
      $FF, $FF, $FF, $FF, $7F, $0F, $03, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 4
  elseif nPage = $B6 then
    for i = 0 to 33
      lookup i,[_
      $00, $00, $00, $00, $00, $00, $00, $00, $00, $F8, $FF, $FF, $FF, $FF, $FF, $FF,_
      $FF, $FF, $3F, $03, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 5
  elseif nPage = $B7 then
    for i = 0 to 33
      lookup i,[_
      $00, $00, $00, $00, $00, $00, $00, $E0, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,_
      $7F, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 6
  elseif nPage = $B8 then
    for i = 0 to 33
      lookup i,[_
      $00, $00, $00, $00, $00, $00, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F,_
      $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i
  endif
return

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Eight:
  'page 0
  if nPage = $B2 then
    for i = 0 to 33
      lookup i,[_
      $00, $80, $C0, $C0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0,_
      $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $C0, $C0, $80, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 1
  elseif nPage = $B3 then
    for i = 0 to 33
      lookup i,[_
      $FE, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $03, $03, $03, $03, $03, $03,_
      $03, $03, $03, $03, $03, $03, $03, $03, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FE],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 2
  elseif nPage = $B4 then
    for i = 0 to 33
      lookup i,[_
      $7F, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $00, $00, $00, $00, $00, $00,_
      $00, $00, $00, $00, $00, $00, $00, $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $7F],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 3
  elseif nPage = $B5 then
    for i = 0 to 33
      lookup i,[_
      $00, $C1, $E1, $E3, $F3, $F7, $F7, $FF, $FF, $FF, $3E, $3E, $3E, $3E, $3E, $3E,_
      $3E, $3E, $3E, $3E, $3E, $3E, $3E, $3E, $FF, $FF, $FF, $F7, $F7, $F3, $E3, $E1, $C1, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 4
  elseif nPage = $B6 then
    for i = 0 to 33
      lookup i,[_
      $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $00, $00, $00, $00, $00, $00,_
      $00, $00, $00, $00, $00, $00, $00, $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 5
  elseif nPage = $B7 then
    for i = 0 to 33
      lookup i,[_
      $7F, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $80, $80, $80, $80, $80, $80,_
      $80, $80, $80, $80, $80, $80, $80, $80, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $7F],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 6
  elseif nPage = $B8 then
    for i = 0 to 33
      lookup i,[_
      $00, $01, $03, $07, $07, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F,_
      $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $07, $07, $03, $01, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i
  endif
return

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Nine:
  'page 0
  if nPage = $B2 then
    for i = 0 to 33
      lookup i,[_
      $00, $00, $80, $C0, $C0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0,_
      $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0, $C0, $C0, $80, $00, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 1
  elseif nPage = $B3 then
    for i = 0 to 33
      lookup i,[_
      $FC, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $03, $03, $03, $03, $03, $03,_
      $03, $03, $03, $03, $03, $03, $03, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FC],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 2
  elseif nPage = $B4 then
    for i = 0 to 33
      lookup i,[_
      $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $00, $00, $00, $00, $00, $00,_
      $00, $00, $00, $00, $00, $00, $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 3
  elseif nPage = $B5 then
    for i = 0 to 33
      lookup i,[_
      $0F, $3F, $7F, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $F0, $F0, $F0, $F0, $F0, $F0,_
      $F0, $F0, $F0, $F0, $F0, $F0, $F0, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 4
  elseif nPage = $B6 then
    for i = 0 to 33
      lookup i,[_
      $00, $00, $00, $00, $00, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01,_
      $01, $01, $01, $01, $01, $00, $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 5
  elseif nPage = $B7 then
    for i = 0 to 33
      lookup i,[_
      $00, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80,_
      $80, $80, $80, $80, $80, $80, $80, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $7F],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i

  'page 6
  elseif nPage = $B8 then
    for i = 0 to 33
      lookup i,[_
      $00, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F,_
      $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $07, $07, $03, $01, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
    next i
  endif
return

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
DP:
  Select case nPage
  case 0,1,2,3,4
    for i = 0 to 7
      lookup i,[$00, $00, $00, $00, $00, $00, $00, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
  next i

  case 5
    for i = 0 to 7
      lookup i,[$00, $00, $80, $80, $80, $80, $00, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
  next i

  case 6      
    for i = 0 to 7
      lookup i,[$00, $0F, $1F, $1F, $1F, $1F, $0F, $00],nChar
      gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
  next i
  end select
return

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
DPNo:
  for i = 0 to 7
    nChar = 0
    gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
  next i
return

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Blank:
  for i = 0 to 33
    nChar = 0
    gosub I2C_Out : gosub I2C_Out : gosub I2C_Out : gosub I2C_Out
  next i
return

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

DisplayVal:
  for nPage = $B2 to $B8
    'Set up display    
    gosub I2C_Start
    nChar = nSlave : gosub I2C_out
    'Set page and column
    nChar = nComSend : gosub I2C_out
    nChar = nPage : gosub I2C_out  '(page);
    nChar = $10 : gosub I2C_out  'I2C_out(0x10);       //column address Y9:Y6
    nChar = $00 : gosub I2C_out  'I2C_out(0x01);      //column address Y5:Y2
    'Set to recieve pixel data
    gosub I2C_Stop
    gosub I2C_Start
    nChar = nSlave : gosub I2C_out
    nChar = nDataSend : gosub I2C_out
    

    'wDisplay can show up to four digits on the board
    'put blanks instead of leading zeros
    if wDisplay > 999 then 
      nDig3 = wDisplay dig 3
    else 
      nDig3 = 11
    endif
    if wDisplay > 99 then 
      nDig2 = wDisplay dig 2
    else 
      nDig2 = 11
    endif
    if wDisplay > 9 then 
      nDig1 = wDisplay dig 1
    else 
      nDig1 = 11
    endif
    nDig0 = wDisplay dig 0
  
    'Fourth digit
    if nDig3 = 0 then 
      gosub zero
    elseif nDig3 = 1 then 
      gosub one
    elseif nDig3 = 2 then
      gosub two
    elseif nDig3 = 3 then
      gosub three
    elseif nDig3 = 4 then
      gosub four
    elseif nDig3 = 5 then
      gosub five
    elseif nDig3 = 6 then
      gosub six
    elseif nDig3 = 7 then
      gosub seven
    elseif nDig3 = 8 then
      gosub Eight
    elseif nDig3 = 9 then
      gosub nine
    else 
      gosub blank
    endif
  
    'Third DP
    if nDPPos = 3 then
      gosub DP
    else
      gosub DPno
    endif
  
    'third digit
    if nDig2 = 0 then 
      gosub zero
    elseif nDig2 = 1 then 
      gosub one
    elseif nDig2 = 2 then
      gosub two
    elseif nDig2 = 3 then
      gosub three
    elseif nDig2 = 4 then
      gosub four
    elseif nDig2 = 5 then
      gosub five
    elseif nDig2 = 6 then
      gosub six
    elseif nDig2 = 7 then
      gosub seven
    elseif nDig2 = 8 then
      gosub Eight
    elseif nDig2 = 9 then
      gosub nine
    else 
      gosub blank
    endif
  
    'Second dp
    if nDPPos = 2 then
      gosub DP
    else
      gosub DPno
    endif
    
    'Second digit
    if nDig1 = 0 then 
      gosub zero
    elseif nDig1 = 1 then 
      gosub one
    elseif nDig1 = 2 then
      gosub two
    elseif nDig1 = 3 then
      gosub three
    elseif nDig1 = 4 then
      gosub four
    elseif nDig1 = 5 then
      gosub five
    elseif nDig1 = 6 then
      gosub six
    elseif nDig1 = 7 then
      gosub seven
    elseif nDig1 = 8 then
      gosub Eight
    elseif nDig1 = 9 then
      gosub nine
    else 
      gosub blank
    endif
  
    'First DP
    if nDPPos = 1 then
      gosub DP
    else
      gosub DPno
    endif
  
    'First digit (rightmost)
    if nDig0 = 0 then 
      gosub zero
    elseif nDig0 = 1 then 
      gosub one
    elseif nDig0 = 2 then
      gosub two
    elseif nDig0 = 3 then
      gosub three
    elseif nDig0 = 4 then
      gosub four
    elseif nDig0 = 5 then
      gosub five
    elseif nDig0 = 6 then
      gosub six
    elseif nDig0 = 7 then
      gosub seven
    elseif nDig0 = 8 then
      gosub Eight
    elseif nDig0 = 9 then
      gosub nine
    else 
      gosub blank
    endif
    
    gosub I2C_Stop
  next nPage
return


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
I2C_Start:
  SCL=1
  SDA=1
pauseus 1  
  SDA=0
  SCL=0
return

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
I2C_Stop:
  SDA=0
  SCL=0
pauseus 1  
  SCL=1
  SDA=1
return

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
I2C_Out:
  SCL = 0

  sda = nChar.bit7
  SCL = 1       'clock in data
  SCL = 0
  
  sda = nChar.bit6
  SCL = 1       'clock in data
  SCL = 0
  
  sda = nChar.bit5
  SCL = 1       'clock in data
  SCL = 0
  
  sda = nChar.bit4
  SCL = 1       'clock in data
  SCL = 0
  
  sda = nChar.bit3
  SCL = 1       'clock in data
  SCL = 0

  sda = nChar.bit2
  SCL = 1       'clock in data
  SCL = 0

  sda = nChar.bit1
  SCL = 1       'clock in data
  SCL = 0

  sda = nChar.bit0
  SCL = 1       'clock in data
  SCL = 0

  SDA_Dir = 1   'Make SDA an input
  SCL = 1

  while PORTA.4 = 1  'wait here until ACK
    SCL=0
    SCL=1
  wend
  SCL=0
  SDA_Dir = 0  'Make SDA an output
return

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Init_LCD:
  gosub I2C_Start
  nChar = nSlave : gosub I2C_Out  
  nChar = nComSend : gosub I2C_Out  'we'll be sending commands
  nChar = $48 : gosub I2C_Out'  0100 1000 //partial display duty ratio   "Select partial display line"
  nChar = $64 : gosub I2C_Out'  0110 0100 // 1/100 duty
  nChar = $A0 : gosub I2C_Out'  1010 0000 //ADC select  (normal or reverse)
  nChar = $C8 : gosub I2C_Out'  1100 1000 //SHL select    COM output scanning direction
  nChar = $44 : gosub I2C_Out' //initial Com0 register
  nChar = $00 : gosub I2C_Out' //scan from Com0
  nChar = $AB : gosub I2C_Out' //OSC on
  nChar = $26 : gosub I2C_Out' //
  nChar = $81 : gosub I2C_Out'  1000 0001 //set electronic volume
  nChar = $15 : gosub I2C_Out'   0001 0101 //vopcode=0x1C  $15   LARGER = DARKER.  No effect on Current
  nChar = $56 : gosub I2C_Out'  0101 0110 //set 1/11 bias
  nChar = $64 : gosub I2C_Out'  0110 0100 //3x "DC-DC Step-up" boosting circuit
  pause 200
  nChar = $2C : gosub I2C_Out'  0010 1100 //  Power Control
  nChar = $66 : gosub I2C_Out'  0110 0110 //5x Boosting circuit"
  pause 200
  nChar = $2E : gosub I2C_Out'  0010 1110 //
  pause 200
  nChar = $2F : gosub I2C_Out'  0010 1111 // power control, everything on
  nChar = $F3 : gosub I2C_Out'  1111 0011 //bias save circuit
  nChar = $00 : gosub I2C_Out' //
  nChar = $96 : gosub I2C_Out' //frc and pwm
  nChar = $38 : gosub I2C_Out' //external mode
  nChar = $75 : gosub I2C_Out' //
  nChar = $97 : gosub I2C_Out' //3frc, 45 pwm
  nChar = $80 : gosub I2C_Out' //start 16-level grayscale settings
  nChar = $00 : gosub I2C_Out' //
  nChar = $81 : gosub I2C_Out' //
  nChar = $00 : gosub I2C_Out' //
  nChar = $82 : gosub I2C_Out' //
  nChar = $00 : gosub I2C_Out' //
  nChar = $83 : gosub I2C_Out' //
  nChar = $00 : gosub I2C_Out' //
  nChar = $84 : gosub I2C_Out' //
  nChar = $06 : gosub I2C_Out' //
  nChar = $85 : gosub I2C_Out' //
  nChar = $06 : gosub I2C_Out' //
  nChar = $86 : gosub I2C_Out' //
  nChar = $06 : gosub I2C_Out' //
  nChar = $87 : gosub I2C_Out' //
  nChar = $06 : gosub I2C_Out' //
  nChar = $88 : gosub I2C_Out' //
  nChar = $0B : gosub I2C_Out' //
  nChar = $89 : gosub I2C_Out' //
  nChar = $0B : gosub I2C_Out' //
  nChar = $8A : gosub I2C_Out' //
  nChar = $0B : gosub I2C_Out' //
  nChar = $8B : gosub I2C_Out' //
  nChar = $0B : gosub I2C_Out' //
  nChar = $8C : gosub I2C_Out' //
  nChar = $10 : gosub I2C_Out' //
  nChar = $8D : gosub I2C_Out' //
  nChar = $10 : gosub I2C_Out' //
  nChar = $8E : gosub I2C_Out' //
  nChar = $10 : gosub I2C_Out' //
  nChar = $8F : gosub I2C_Out' //
  nChar = $10 : gosub I2C_Out' //
  nChar = $90 : gosub I2C_Out' //
  nChar = $15 : gosub I2C_Out' //
  nChar = $91 : gosub I2C_Out' //
  nChar = $15 : gosub I2C_Out' //
  nChar = $92 : gosub I2C_Out' //
  nChar = $15 : gosub I2C_Out' //
  nChar = $93 : gosub I2C_Out' //
  nChar = $15 : gosub I2C_Out' //
  nChar = $94 : gosub I2C_Out' //
  nChar = $1A : gosub I2C_Out' //
  nChar = $95 : gosub I2C_Out' //
  nChar = $1A : gosub I2C_Out' //
  nChar = $96 : gosub I2C_Out' //
  nChar = $1A : gosub I2C_Out' //
  nChar = $97 : gosub I2C_Out' //
  nChar = $1A : gosub I2C_Out' //
  nChar = $98 : gosub I2C_Out' //
  nChar = $1E : gosub I2C_Out' //
  nChar = $99 : gosub I2C_Out' //
  nChar = $1E : gosub I2C_Out' //
  nChar = $9A : gosub I2C_Out' //
  nChar = $1E : gosub I2C_Out' //
  nChar = $9B : gosub I2C_Out' //
  nChar = $1E : gosub I2C_Out' //
  nChar = $9C : gosub I2C_Out' //
  nChar = $23 : gosub I2C_Out' //
  nChar = $9D : gosub I2C_Out' //
  nChar = $23 : gosub I2C_Out' //
  nChar = $9E : gosub I2C_Out' //
  nChar = $23 : gosub I2C_Out' //
  nChar = $9F : gosub I2C_Out' //
  nChar = $23 : gosub I2C_Out' //
  nChar = $A0 : gosub I2C_Out' //
  nChar = $27 : gosub I2C_Out' //
  nChar = $A1 : gosub I2C_Out' //
  nChar = $27 : gosub I2C_Out' //
  nChar = $A2 : gosub I2C_Out' //
  nChar = $27 : gosub I2C_Out' //
  nChar = $A3 : gosub I2C_Out' //
  nChar = $27 : gosub I2C_Out' //
  nChar = $A4 : gosub I2C_Out' //
  nChar = $2B : gosub I2C_Out' //
  nChar = $A5 : gosub I2C_Out' //
  nChar = $2B : gosub I2C_Out' //
  nChar = $A6 : gosub I2C_Out' //
  nChar = $2B : gosub I2C_Out' //
  nChar = $A7 : gosub I2C_Out' //
  nChar = $2B : gosub I2C_Out' //
  nChar = $A8 : gosub I2C_Out' //
  nChar = $2F : gosub I2C_Out' //
  nChar = $A9 : gosub I2C_Out' //
  nChar = $2F : gosub I2C_Out' //
  nChar = $AA : gosub I2C_Out' //
  nChar = $2F : gosub I2C_Out' //
  nChar = $AB : gosub I2C_Out' //
  nChar = $2F : gosub I2C_Out' //
  nChar = $AC : gosub I2C_Out' //
  nChar = $32 : gosub I2C_Out' //
  nChar = $AD : gosub I2C_Out' //
  nChar = $32 : gosub I2C_Out' //
  nChar = $AE : gosub I2C_Out' //
  nChar = $32 : gosub I2C_Out' //
  nChar = $AF : gosub I2C_Out' //
  nChar = $32 : gosub I2C_Out' //
  nChar = $B0 : gosub I2C_Out' //
  nChar = $35 : gosub I2C_Out' //
  nChar = $B1 : gosub I2C_Out' //
  nChar = $35 : gosub I2C_Out' //
  nChar = $B2 : gosub I2C_Out' //
  nChar = $35 : gosub I2C_Out' //
  nChar = $B3 : gosub I2C_Out' //
  nChar = $35 : gosub I2C_Out' //
  nChar = $B4 : gosub I2C_Out' //
  nChar = $38 : gosub I2C_Out' //
  nChar = $B5 : gosub I2C_Out' //
  nChar = $38 : gosub I2C_Out' //
  nChar = $B6 : gosub I2C_Out' //
  nChar = $38 : gosub I2C_Out' //
  nChar = $B7 : gosub I2C_Out' //
  nChar = $38 : gosub I2C_Out' //
  nChar = $B8 : gosub I2C_Out' //
  nChar = $3A : gosub I2C_Out' //
  nChar = $B9 : gosub I2C_Out' //
  nChar = $3A : gosub I2C_Out' //
  nChar = $BA : gosub I2C_Out' //
  nChar = $3A : gosub I2C_Out' //
  nChar = $BB : gosub I2C_Out' //
  nChar = $3A : gosub I2C_Out' //
  nChar = $BC : gosub I2C_Out' //
  nChar = $3C : gosub I2C_Out' //
  nChar = $BD : gosub I2C_Out' //
  nChar = $3C : gosub I2C_Out' //
  nChar = $BE : gosub I2C_Out' //
  nChar = $3C : gosub I2C_Out' //
  nChar = $BF : gosub I2C_Out' //
  nChar = $3C : gosub I2C_Out' //end grayscale settings
  nChar = $38 : gosub I2C_Out' //
  nChar = $74 : gosub I2C_Out' //
  nChar = $AF : gosub I2C_Out' //display on
  gosub I2C_Stop
return

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'INTERRUPT HANDLER
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
IntHandler:
disable
  'Two seconds have elapsed
  if TMR1IF = 1 then
    TMR1ON = 0
    wDisplay.lowBYTE = TMR0L
    wDisplay.highBYTE = TMR0H
    TMR0H = 0
    TMR0L = 0
    gosub displayval 'display
    TMR1IF = 0
    TMR1ON = 1
  endif
resume

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
end
I have not been able to see any direct evidence of bad data watching the SDA and SCL lines with as oscilloscope. I'm not sure at this point where to look for the problem. Could be my PBP, could be a problem with the PIC. I have duplicated this behavior on three different '18F26K22s so at least it's consistent. I've taken the project off of the pcb to eliminate possible interferences from other components. I have it on a breadboard with only the connections shown in the schematic.

Any suggestions or advice would be appreciated.

Best Regards,
Paul