OLED 128X96 cheap china lcd


Closed Thread
Results 1 to 11 of 11
  1. #1
    Join Date
    Feb 2010
    Posts
    17

    Default OLED 128X96 cheap china lcd

    Hi,
    bought one of those cheap chineese oled 128x96 no documentation but I manged to get it up and running for my GPS system with pic16F887.
    For those who are interested here is the code:


    Code:
    ;***************************CONFIG SETUP***************************
    ;__CONFIG    _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_OFF & _WDT_OFF & _HS_OSC 
    ;__CONFIG    _CONFIG2, _WRT_OFF & _BOR21V   
    '*************************************************  ******************************
    
    '==========================MCU SETUP============================================  
    DEFINE OSC 20
    Include "modedefs.bas"
    DEFINE ADC_BITS 10     ' ADCIN resolution  (Bits)
    DEFINE ADC_CLOCK 0     ' Work around that sets Vref bits in ADCON1
    DEFINE ADC_SAMPLEUS 50 ' ADC sampling time (uSec)
    ADCON0=ADCON0 | %11000000  ' Work around that sets ADCS in ADCON0
    CM1CON0 = 0
    CM2CON0 = 0
    ANSEL = 0 ' set ANx as analog 
    ANSELH = 0
    ADCON1 = %10000000 ' Right justified results for 10 bits
    ADCON0 = %10000001 ' Internal OSC, AN0, Configure and turn on A/D Module
    OPTION_REG=7
    INTCON = 0 
    
    
    '============================I/O SETUP==========================================
    TRISA = %0
    TRISB = %11111111
    TRISC  = %10000000
    TRISD = 0
    TRISE = 0
    
    '================================usuart===========  =============================9+
      
    
    
    '==============================BAUD SETUP=======================================
    N96 con 16416 ' Inverted 19200 baud for the lcd rs232  
    T96 con 32 '19200 TTL (TBD)
    RES var PORTA.1'PIN 3
    SDA var PORTA.2 'pin 4
    SCL  VAR PORTA.3 'pin 5
    TEXT VAR BYTE[20]
    LENGTH VAR BYTE[2]
    DC VAR BIT' "DATA OR COMMAND", 1=DATA;0=COMMAND
    LCD_DATA VAR BYTE
    COM VAR BYTE'COMMAND
    PAGE VAR BYTE'LCD PAGE(B0 TO B7)
    I VAR BYTE
    J VAR BYTE
    X VAR BYTE' LCD POSITION X(0 TO 127)
    Y VAR BYTE'LCD POSITION X(0 TO 7)
    CLEAR
    '=================================================  ============================
    PAGE = $B0
    high res
    LOW RES
    PAUSE 20
    HIGH RES
    PAUSE 50
    pause 5
    GOSUB INIT
    GOSUB CLEAR_LCD
    GOSUB TITLE
    
    
    
    
    
    MAIN:
    PAUSE 1000
    COM=$A6:GOSUB SEND_COMMAND '$A6=NORMAL MODE;$A7=INVERSE MODE
    PAUSE 100
    COM=$2E:GOSUB SEND_COMMAND
    COM=$27:GOSUB SEND_COMMAND
    COM=$00:GOSUB SEND_COMMAND
    COM=$03:GOSUB SEND_COMMAND
    COM=$04:GOSUB SEND_COMMAND
    COM=$06:GOSUB SEND_COMMAND
    COM=$00:GOSUB SEND_COMMAND
    COM=$FF:GOSUB SEND_COMMAND
    COM=$2F:GOSUB SEND_COMMAND
    PAUSE 10000
    
    
    
    GOTO MAIN
    
    
    
    
    
    
    
    '=========================lcd initialization====================================
    INIT:
    high res
    LOW RES
    PAUSE 20
    HIGH RES
    PAUSE 50
    
    
    COM=$AE:GOSUB SEND_COMMAND'DISPALY OFF
    COM=$20:GOSUB SEND_COMMAND'HORIZONTAL MODE
    COM=$00:GOSUB SEND_COMMAND
    COM=$40:GOSUB SEND_COMMAND' DISPLAY START AT 0
    COM=$A1:GOSUB SEND_COMMAND'REMAP 0-127
    COM=$C8:GOSUB SEND_COMMAND'SCAN DIRECTION
    COM=$DA:GOSUB SEND_COMMAND'COM PINS
    COM=$10:GOSUB SEND_COMMAND'COM PINS
    COM=$A4:GOSUB SEND_COMMAND' DISPLAY ON
    COM=$A7:GOSUB SEND_COMMAND '$A6=NORMAL MODE;$A7=INVERSE MODE
    COM=$AF:GOSUB SEND_COMMAND ' DISPLAY ON
    
     return
    '=================================================  ==============================
    '==============================clear lcd========================================
    CLEAR_LCD:
    
    
       FOR J=0 TO 7 
        FOR I=0 TO 127
            LCD_DATA=$00:GOSUB SEND_DATA
        NEXT I
       NEXT J                             
      
    
    RETURN 
     
     
     
     
    
    '****************SEND COMMAND*******************************************  *****
    
    SEND_COMMAND:
    dc=0
    SHIFTOUT SDA,SCL,1,[DC\1]'SEND COMMAND BIT(D/C=0)
    SHIFTOUT SDA,SCL,1,[COM\8]
    dc=1
    RETURN 
    '*************************************************  ****************************
    RETURN
    
    '======================Send data==============================================  =
    SEND_DATA:
    DC=1
    SHIFTOUT SDA,SCL,1,[DC\1]'SEND DATA BIT(D/C=1)
    SHIFTOUT SDA,SCL,1,[LCD_DATA\8]
    RETURN
    '=================================================  ==============================
    '=============================FILL================  =============================
    FILL:
    FOR J=0 TO 7
    FOR I=0 TO 127
    LCD_DATA=$FF:GOSUB SEND_DATA
    NEXT I
    NEXT J
    RETURN
    '=================================================  ==============================
    '=========================TITLE===================  ==============================
    TITLE:
    X=0:Y=0 :GOSUB SET_XY
    FOR I=0 TO 127
    LOOKUP I,[$00,$40,$60,$50,$7E,$50,$60,$40,$02,$06,$0E,$1E,$3  E,$00,$00,$00,_
    $00,$00,$00,$00,$00,$1F,$3F,$60,$60,$60,$60,$60,$6  0,$3C,$1C,$00,_
    $00,$7F,$7F,$61,$61,$61,$61,$61,$61,$3F,$1E,$00,$0  0,$1E,$3F,$61,_
    $61,$61,$61,$61,$61,$38,$18,$00,$00,$00,$00,$00,$0  0,$00,$00,$00,_
    $00,$00,$00,$00,$00,$00,$00,$1F,$3F,$60,$60,$60,$6  0,$60,$60,$3C,_
    $1C,$00,$00,$1E,$3F,$61,$61,$61,$61,$61,$61,$38,$1  8,$00,$00,$3F,_
    $7F,$60,$18,$06,$06,$18,$60,$7F,$3F,$00,$00,$00,$0  0,$00,$00,$00,_
    $00,$00,$00,$1C,$63,$41,$5D,$41,$5D,$41,$5D,$41,$5  D,$41,$7F,$00],LCD_DATA
    lcd_data=lcd_data rev 8
    GOSUB SEND_DATA
    NEXT I
    X=0:Y=1 :GOSUB SET_XY
    for i=0 to 127
    lookup i,[$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0  0,$00,$00,$00,_
    $00,$00,$00,$00,$00,$F8,$FC,$06,$06,$06,$C6,$C6,$C  6,$FC,$F8,$00,_
    $00,$FE,$FE,$80,$80,$80,$80,$80,$80,$00,$00,$00,$0  0,$18,$1C,$86,_
    $86,$86,$86,$86,$86,$FC,$78,$00,$00,$00,$00,$00,$0  0,$00,$00,$00,_
    $00,$00,$00,$00,$00,$00,$00,$F8,$FC,$06,$06,$06,$C  6,$C6,$C6,$FC,_
    $F8,$00,$00,$18,$1C,$86,$86,$86,$86,$86,$86,$FC,$7  8,$00,$00,$FE,_
    $FE,$00,$00,$00,$00,$00,$00,$FE,$FE,$00,$00,$00,$0  0,$00,$00,$00,_
    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0  0,$00,$00,$00],lcd_data
    lcd_data=lcd_data rev 8
    GOSUB SEND_DATA
    NEXT I
    
    
    X=0:Y=3:GOSUB SET_XY
    for i=0 to 127
    lookup i,[$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$3C,$7E,$C  3,$C3,$C3,$C3,_
    $C3,$C3,$71,$30,$00,$00,$7F,$FF,$C3,$C3,$C3,$C3,$C  3,$C3,$C3,$C3,_
    $00,$00,$7F,$FF,$C1,$C1,$C1,$C1,$C1,$C1,$FF,$7F,$0  0,$00,$7F,$FF,_
    $C3,$C3,$C3,$C3,$C3,$C3,$7E,$3C,$00,$00,$3F,$7F,$C  0,$C0,$C0,$C0,_
    $C0,$C0,$70,$30,$00,$00,$FF,$FF,$03,$03,$03,$03,$0  3,$03,$FF,$FF,_
    $00,$00,$C0,$C0,$C0,$C0,$FF,$FF,$C0,$C0,$C0,$C0,$0  0,$00,$FF,$FF,_
    $0C,$0C,$03,$03,$00,$00,$FF,$FF,$00,$00,$3F,$7F,$C  0,$C0,$C0,$C1,_
    $C1,$C1,$79,$39,$00,$00,$00,$00,$00,$00,$00,$00,$0  0,$00,$00,$00],lcd_data
    lcd_data=lcd_data rev 8
    GOSUB SEND_DATA
    NEXT I
    X=0:Y=4:GOSUB SET_XY
    for i=0 to 127
    lookup i,[$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$30,$38,$0  C,$0C,$0C,$0C,_
    $0C,$0C,$F8,$F0,$00,$00,$F8,$FC,$0C,$0C,$0C,$0C,$0  C,$0C,$0C,$0C,_
    $00,$00,$FC,$FC,$80,$80,$80,$80,$80,$80,$FC,$FC,$0  0,$00,$FC,$FC,_
    $80,$C0,$60,$30,$18,$0C,$04,$00,$00,$00,$F0,$F8,$0  C,$0C,$0C,$0C,_
    $0C,$0C,$38,$30,$00,$00,$FC,$FC,$00,$00,$00,$00,$0  0,$00,$FC,$FC,_
    $00,$00,$0C,$0C,$0C,$0C,$FC,$FC,$0C,$0C,$0C,$0C,$0  0,$00,$FC,$FC,_
    $00,$00,$00,$00,$C0,$C0,$FC,$FC,$00,$00,$F0,$F8,$0  C,$0C,$0C,$8C,_
    $8C,$8C,$F8,$F0,$00,$00,$00,$00,$00,$00,$00,$00,$0  0,$00,$00,$00],lcd_data
    lcd_data=lcd_data rev 8
    GOSUB SEND_DATA
    NEXT I
    X=0:Y=5:GOSUB SET_XY
    for i=0 to 127
    lookup i,[$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$1F,$3F,$3  0,$30,$30,$30,_
    $30,$30,$30,$30,$00,$00,$0F,$1F,$30,$30,$30,$30,$3  0,$30,$1F,$0F,_
    $00,$00,$1F,$3F,$30,$30,$30,$30,$30,$30,$1F,$0F,$0  0,$00,$00,$00,_
    $00,$00,$00,$0F,$1F,$30,$30,$30,$30,$30,$30,$1C,$0  C,$00,$00,$30,_
    $30,$30,$30,$3F,$3F,$30,$30,$30,$30,$00,$00,$0F,$1  F,$30,$30,$30,_
    $30,$30,$30,$1E,$0E,$00,$00,$3F,$3F,$03,$03,$00,$0  0,$00,$00,$3F,_
    $3F,$00,$00,$1F,$3F,$30,$30,$30,$30,$30,$30,$3F,$1  F,$00,$00,$3F,_
    $3F,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0  0,$00,$00,$00],lcd_data
    lcd_data=lcd_data rev 8
    GOSUB SEND_DATA
    NEXT I
    X=0:Y=6:GOSUB SET_XY
    for i=0 to 127
    lookup i,[$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$FF,$FF,$C  0,$C0,$C0,$C0,_
    $C0,$C0,$00,$00,$00,$00,$FC,$FE,$03,$03,$03,$03,$0  3,$03,$FE,$FC,_
    $00,$00,$FF,$FF,$E0,$F0,$D8,$CC,$C6,$C3,$81,$00,$0  0,$00,$00,$00,_
    $00,$00,$00,$0C,$8E,$C3,$C3,$C3,$C3,$C3,$C3,$7E,$3  C,$00,$00,$03,_
    $03,$03,$03,$FF,$FF,$03,$03,$03,$03,$00,$00,$FC,$F  E,$03,$03,$03,_
    $63,$63,$63,$7E,$7C,$00,$00,$FF,$FF,$00,$00,$C0,$C  0,$30,$30,$FF,_
    $FF,$00,$00,$FF,$FF,$60,$60,$60,$60,$60,$60,$FF,$F  F,$00,$00,$FF,_
    $FF,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$0  0,$00,$00,$00],lcd_data
    lcd_data=lcd_data rev 8
    GOSUB SEND_DATA
    NEXT I
    
    
    RETURN
    '===========================================SET X AND Y=========================
    SET_XY:
    COM=$21:GOSUB SEND_COMMAND
    COM=X:GOSUB SEND_COMMAND
    COM=127:GOSUB SEND_COMMAND
    COM=$22:GOSUB SEND_COMMAND
    COM=Y:GOSUB SEND_COMMAND
    COM=Y:GOSUB SEND_COMMAND
    RETURN
    '=================================================  ==============================
    END


    Note the display is very small you can barely read the 7x5 font so I had to double it to make readable.
    This is just an example for those who are interested to give you a head start.
    the above code looks like this:


    This is just an example and sorry for the messed up code. But it works
    Have fun programming and always wear your safety glasses!!!!!!!!!!!!!!

    Best regards,

    Joe.

  2. #2
    Join Date
    Oct 2004
    Posts
    440


    Did you find this post helpful? Yes | No

    Default Re: OLED 128X96 cheap china lcd

    Joe

    Looks good!
    Do you have a link to where you purchased the OLED?


    Thanks
    Norm

  3. #3
    Join Date
    May 2013
    Posts
    12


    Did you find this post helpful? Yes | No

    Default Re: OLED 128X96 cheap china lcd

    Hello,
    To display the data you send through I2C or SPI, I have a problem and hope you can help me.

  4. #4


    Did you find this post helpful? Yes | No

    Default Re: OLED 128X96 cheap china lcd

    Quote Originally Posted by Denner View Post
    Hello,
    To display the data you send through I2C or SPI, I have a problem and hope you can help me.
    I have altered Joe's original code to use I2C for comms. I used PIC16F88 for the below code. I used a monochrome display running ssd1306 driver/controller.

    Code:
    ;***************************CONFIG SETUP***************************
    ;__CONFIG    _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_OFF & _WDT_OFF & _HS_OSC 
    ;__CONFIG    _CONFIG2, _WRT_OFF & _BOR21V   
    '*************************************************  ******************************
       #CONFIG     
        __CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_ON & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_IO
        #ENDCONFIG
        
    '==========================MCU SETUP============================================  
    DEFINE OSC 8
    DEFINE I2C_HOLD 1
    'Include "modedefs.bas"
    'DEFINE ADC_BITS 10     ' ADCIN resolution  (Bits)
    'DEFINE ADC_CLOCK 0     ' Work around that sets Vref bits in ADCON1
    'DEFINE ADC_SAMPLEUS 50 ' ADC sampling time (uSec)
    'ADCON0=ADCON0 | %11000000  ' Work around that sets ADCS in ADCON0
    'CM1CON0 = 0
    'CM2CON0 = 0
    'ANSEL = 0 ' set ANx as analog 
    'ANSELH = 0
    'ADCON1 = %10000000 ' Right justified results for 10 bits
    'ADCON0 = %10000001 ' Internal OSC, AN0, Configure and turn on A/D Module
    'OPTION_REG=7
    'INTCON = 0
     
        TrisB = %00010000
        CMCON = 7                       ' Turn Off Comparators
        ADCON1 = 7                      ' Disable A/D converter    
        ANSEL = %00000000               ' set all analog pins to digital
        OSCCON = %01110000              ' Set PIC16F88 to 4MHz = %01100000 or
                                        ' 8MHz = %01110000
    
    '============================I/O SETUP==========================================
     BT var PortB.4
    LED var PortB.3
    
    '================================usuart========================================
    
    '==============================BAUD SETUP=======================================
    
    I2CDevice var byte
    SCL var PortA.3         ' I2C Clock  PortB.4
    SDA var PortA.2         ' I2C Data   PortB.1
    TEXT VAR BYTE[20]
    LENGTH VAR BYTE[2]
    DC VAR Byte' "DATA OR COMMAND", $40=DATA; $0=COMMAND --> changed from bit to byte
    LCD_DATA VAR BYTE
    COM VAR BYTE'COMMAND
    'PAGE VAR BYTE'LCD PAGE(B0 TO B7)
    
    I VAR BYTE
    J VAR BYTE
    X VAR BYTE' LCD POSITION X(0 TO 127)
    Y VAR BYTE'LCD POSITION Y(0 TO 7)
    CLEAR
    '=============================================================================
    'PAGE = $B0
    
    I2CDevice = $78      ' X/Y/Z = $3C, Display = $78,
    
    PAUSE 20
    
    GOSUB INIT
    GOSUB CLEAR_LCD
    GOSUB TITLE
    
    
    MAIN:
    
    COM=$A6:GOSUB SEND_COMMAND '$A6=NORMAL MODE;$A7=INVERSE MODE
    'PAUSE 100
    COM=$2E:GOSUB SEND_COMMAND
    COM=$27:GOSUB SEND_COMMAND
    COM=$00:GOSUB SEND_COMMAND
    COM=$03:GOSUB SEND_COMMAND
    COM=$04:GOSUB SEND_COMMAND
    COM=$06:GOSUB SEND_COMMAND
    COM=$00:GOSUB SEND_COMMAND
    COM=$FF:GOSUB SEND_COMMAND
    COM=$2F:GOSUB SEND_COMMAND
    'PAUSE 10000
    
    End
    GOTO MAIN
    
    
    '=========================lcd initialization====================================
    INIT:
    
    COM=$AE:GOSUB SEND_COMMAND' DISPALY OFF
    COM=$20:GOSUB SEND_COMMAND' HORIZONTAL MODE
    COM=$00:GOSUB SEND_COMMAND
    COM=$40:GOSUB SEND_COMMAND' DISPLAY START AT 0
    COM=$A1:GOSUB SEND_COMMAND' REMAP 0-127 ----> Mirror display
    COM=$C8:GOSUB SEND_COMMAND' SCAN DIRECTION
    'COM=$DA:GOSUB SEND_COMMAND' COM PINS ------> Not Sure what this does
    'COM=$10:GOSUB SEND_COMMAND' COM PINS ------> Not Sure what this does
    COM=$A4:GOSUB SEND_COMMAND' DISPLAY ON
    COM=$A7:GOSUB SEND_COMMAND' $A6=NORMAL MODE;$A7=INVERSE MODE
    COM=$AF:GOSUB SEND_COMMAND' DISPLAY ON
    
     return
    '===============================================================================
    '==============================clear lcd========================================
    CLEAR_LCD:
    
    
       FOR J=0 TO 7 
        FOR I=0 TO 127
            LCD_DATA=$00:GOSUB SEND_DATA  ' was $00
        NEXT I
       NEXT J                             
    
    RETURN 
    
    '****************SEND COMMAND************************************************
    
    SEND_COMMAND:
    dc=$0
    'SHIFTOUT SDA,SCL,1,[DC\1]'SEND COMMAND BIT(D/C=0)
    'SHIFTOUT SDA,SCL,1,[COM\8]
    
    high LED
    I2CWrite SDA,SCL,I2CDevice,DC,[COM]
    
    Low led
    dc=$40
    RETURN 
    '*****************************************************************************
    
    '======================Send data===============================================
    SEND_DATA:
    DC=$40
    'SHIFTOUT SDA,SCL,1,[DC\1]'SEND DATA BIT(D/C=1)
    'SHIFTOUT SDA,SCL,1,[LCD_DATA\8]
    
    high LED
    I2CWrite SDA,SCL,I2CDevice,DC,[LCD_DATA]
    
    Low led
    RETURN
    '===============================================================================
    '=============================FILL=============================================
    FILL:
    FOR J=0 TO 7
    FOR I=0 TO 127
    LCD_DATA=$FF:GOSUB SEND_DATA
    NEXT I
    NEXT J
    RETURN
    '===============================================================================
    '=========================TITLE=================================================
    TITLE:
    X=0:Y=0 :GOSUB SET_XY
    FOR I=0 TO 127
    LOOKUP I,[$00,$40,$60,$50,$7E,$50,$60,$40,$02,$06,$0E,$1E,$3E,$00,$00,$00,_
    $00,$00,$00,$00,$00,$1F,$3F,$60,$60,$60,$60,$60,$60,$3C,$1C,$00,_
    $00,$7F,$7F,$61,$61,$61,$61,$61,$61,$3F,$1E,$00,$00,$1E,$3F,$61,_
    $61,$61,$61,$61,$61,$38,$18,$00,$00,$00,$00,$00,$00,$00,$00,$00,_
    $00,$00,$00,$00,$00,$00,$00,$1F,$3F,$60,$60,$60,$60,$60,$60,$3C,_
    $1C,$00,$00,$1E,$3F,$61,$61,$61,$61,$61,$61,$38,$18,$00,$00,$3F,_
    $7F,$60,$18,$06,$06,$18,$60,$7F,$3F,$00,$00,$00,$00,$00,$00,$00,_
    $00,$00,$00,$1C,$63,$41,$5D,$41,$5D,$41,$5D,$41,$5D,$41,$7F,$00],LCD_DATA
    lcd_data=lcd_data rev 8
    GOSUB SEND_DATA
    NEXT I
    
    X=0:Y=1 :GOSUB SET_XY
    for i=0 to 127
    lookup i,[$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,_
    $00,$00,$00,$00,$00,$F8,$FC,$06,$06,$06,$C6,$C6,$C6,$FC,$F8,$00,_
    $00,$FE,$FE,$80,$80,$80,$80,$80,$80,$00,$00,$00,$00,$18,$1C,$86,_
    $86,$86,$86,$86,$86,$FC,$78,$00,$00,$00,$00,$00,$00,$00,$00,$00,_
    $00,$00,$00,$00,$00,$00,$00,$F8,$FC,$06,$06,$06,$C6,$C6,$C6,$FC,_
    $F8,$00,$00,$18,$1C,$86,$86,$86,$86,$86,$86,$FC,$78,$00,$00,$FE,_
    $FE,$00,$00,$00,$00,$00,$00,$FE,$FE,$00,$00,$00,$00,$00,$00,$00,_
    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00],lcd_data
    lcd_data=lcd_data rev 8
    GOSUB SEND_DATA
    NEXT I
    
    X=0:Y=3:GOSUB SET_XY
    for i=0 to 127
    lookup i,[$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$3C,$7E,$C3,$C3,$C3,$C3,_
    $C3,$C3,$71,$30,$00,$00,$7F,$FF,$C3,$C3,$C3,$C3,$C3,$C3,$C3,$C3,_
    $00,$00,$7F,$FF,$C1,$C1,$C1,$C1,$C1,$C1,$FF,$7F,$00,$00,$7F,$FF,_
    $C3,$C3,$C3,$C3,$C3,$C3,$7E,$3C,$00,$00,$3F,$7F,$C0,$C0,$C0,$C0,_
    $C0,$C0,$70,$30,$00,$00,$FF,$FF,$03,$03,$03,$03,$03,$03,$FF,$FF,_
    $00,$00,$C0,$C0,$C0,$C0,$FF,$FF,$C0,$C0,$C0,$C0,$00,$00,$FF,$FF,_
    $0C,$0C,$03,$03,$00,$00,$FF,$FF,$00,$00,$3F,$7F,$C0,$C0,$C0,$C1,_
    $C1,$C1,$79,$39,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00],lcd_data
    lcd_data=lcd_data rev 8
    GOSUB SEND_DATA
    NEXT I
    
    X=0:Y=4:GOSUB SET_XY
    for i=0 to 127
    lookup i,[$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$30,$38,$0C,$0C,$0C,$0C,_
    $0C,$0C,$F8,$F0,$00,$00,$F8,$FC,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,_
    $00,$00,$FC,$FC,$80,$80,$80,$80,$80,$80,$FC,$FC,$00,$00,$FC,$FC,_
    $80,$C0,$60,$30,$18,$0C,$04,$00,$00,$00,$F0,$F8,$0C,$0C,$0C,$0C,_
    $0C,$0C,$38,$30,$00,$00,$FC,$FC,$00,$00,$00,$00,$00,$00,$FC,$FC,_
    $00,$00,$0C,$0C,$0C,$0C,$FC,$FC,$0C,$0C,$0C,$0C,$00,$00,$FC,$FC,_
    $00,$00,$00,$00,$C0,$C0,$FC,$FC,$00,$00,$F0,$F8,$0C,$0C,$0C,$8C,_
    $8C,$8C,$F8,$F0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00],lcd_data
    lcd_data=lcd_data rev 8
    GOSUB SEND_DATA
    NEXT I
    
    X=0:Y=5:GOSUB SET_XY
    for i=0 to 127
    lookup i,[$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$1F,$3F,$30,$30,$30,$30,_
    $30,$30,$30,$30,$00,$00,$0F,$1F,$30,$30,$30,$30,$30,$30,$1F,$0F,_
    $00,$00,$1F,$3F,$30,$30,$30,$30,$30,$30,$1F,$0F,$00,$00,$00,$00,_
    $00,$00,$00,$0F,$1F,$30,$30,$30,$30,$30,$30,$1C,$0C,$00,$00,$30,_
    $30,$30,$30,$3F,$3F,$30,$30,$30,$30,$00,$00,$0F,$1F,$30,$30,$30,_
    $30,$30,$30,$1E,$0E,$00,$00,$3F,$3F,$03,$03,$00,$00,$00,$00,$3F,_
    $3F,$00,$00,$1F,$3F,$30,$30,$30,$30,$30,$30,$3F,$1F,$00,$00,$3F,_
    $3F,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00],lcd_data
    lcd_data=lcd_data rev 8
    GOSUB SEND_DATA
    NEXT I
    
    X=0:Y=6:GOSUB SET_XY
    for i=0 to 127
    lookup i,[$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$FF,$FF,$C0,$C0,$C0,$C0,_
    $C0,$C0,$00,$00,$00,$00,$FC,$FE,$03,$03,$03,$03,$03,$03,$FE,$FC,_
    $00,$00,$FF,$FF,$E0,$F0,$D8,$CC,$C6,$C3,$81,$00,$00,$00,$00,$00,_
    $00,$00,$00,$0C,$8E,$C3,$C3,$C3,$C3,$C3,$C3,$7E,$3C,$00,$00,$03,_
    $03,$03,$03,$FF,$FF,$03,$03,$03,$03,$00,$00,$FC,$FE,$03,$03,$03,_
    $63,$63,$63,$7E,$7C,$00,$00,$FF,$FF,$00,$00,$C0,$C0,$30,$30,$FF,_
    $FF,$00,$00,$FF,$FF,$60,$60,$60,$60,$60,$60,$FF,$FF,$00,$00,$FF,_
    $FF,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00],lcd_data
    lcd_data=lcd_data rev 8
    GOSUB SEND_DATA
    NEXT I
    
    RETURN
    '===========================================SET X AND Y=========================
    SET_XY:
    COM=$21:GOSUB SEND_COMMAND
    COM=X:GOSUB SEND_COMMAND
    COM=127:GOSUB SEND_COMMAND
    COM=$22:GOSUB SEND_COMMAND
    COM=Y:GOSUB SEND_COMMAND
    COM=Y:GOSUB SEND_COMMAND
    RETURN
    '===============================================================================
    END

  5. #5
    Join Date
    Nov 2003
    Location
    Sao Paulo - Brazil
    Posts
    92


    Did you find this post helpful? Yes | No

    Default Re: OLED 128X96 cheap china lcd

    Hi Guys,

    thank you for sharing your code.

    I have 3 displays bought from the following selle on e-bay :

    http://www.ebay.com/itm/0-96-128x64-...item1e649b61d1

    I have one doubt :

    What pins are you using for IIC connection ?

    I can see :

    SCL var PortA.3 ' I2C Clock PortB.4
    SDA var PortA.2 ' I2C Data PortB.1

    The RES is not necessary ? Should this grounded or connected to vcc ?

    Thank you !

    Regards,

    Sérgio

  6. #6
    Join Date
    Oct 2005
    Location
    Sweden
    Posts
    3,516


    Did you find this post helpful? Yes | No

    Default Re: OLED 128X96 cheap china lcd

    Hi,
    I've got one from that very same seller and I've tried to get it to work numerous times. First with code of my own then with code from this thread - no luck.

    I've found that mine came strapped for 4 wire serial, which is the mode I tried coding for while I'm pretty sure that the code posted here is for 3 wire serial. I changed the solder straps on the display but no luck.

    The datasheet for the controller chip has notes on what pins to use, not use, tie high or tigh low depending on which mode it's supposed to operate in.

    Anyway, I've pretty much given up on it (mine is probably busted), if you get yours going I'd appreciate it if would post the details so I can give it a try on mine, thanks!

    /Henrik.

  7. #7
    Join Date
    Feb 2010
    Posts
    17


    Did you find this post helpful? Yes | No

    Default Re: OLED 128X96 cheap china lcd

    Hi all,
    In the code I posted I'm using the picbasic SHIFTOUT function nothing more or less very simple
    SDA var PORTA.2 'pin 4 output
    SCL VAR PORTA.3 'pin 5 clock
    The above pins are assigned.
    My display Has 3 junpers in the back mrked BS0,BS1 AND BS2. I solder BS2 , BS0 and BS1 are off.
    When I started using this display I tried using I2C but with no luck then switched to SPI using SHIFTOUT.
    SDA and SCL does not mean I'm using I2c just variables I created when I started hoping to use I2C but failed I never renamed them.
    Hope this helps.

  8. #8
    Join Date
    Feb 2010
    Posts
    17


    Did you find this post helpful? Yes | No

    Default Re: OLED 128X96 cheap china lcd

    correction to the above:
    BS0=1;BS1=0BS2=0.
    Sorry.
    Regards,

    Joe

  9. #9


    Did you find this post helpful? Yes | No

    Default Re: OLED 128X96 cheap china lcd

    Quote Originally Posted by srspinho View Post
    Hi Guys,

    thank you for sharing your code.

    I have 3 displays bought from the following selle on e-bay :

    http://www.ebay.com/itm/0-96-128x64-...item1e649b61d1

    I have one doubt :

    What pins are you using for IIC connection ?

    I can see :

    SCL var PortA.3 ' I2C Clock PortB.4
    SDA var PortA.2 ' I2C Data PortB.1

    The RES is not necessary ? Should this grounded or connected to vcc ?

    Thank you !

    Regards,

    Sérgio
    Sorry, the comment:

    SCL var PortA.3 ' I2C Clock PortB.4
    SDA var PortA.2 ' I2C Data PortB.1

    Should read:

    SCL var PortA.3 ' I2C Clock PortA.3
    SDA var PortA.2 ' I2C Data PortA.2

    RES is not necessary in my example as my display only has 4 pins.
    http://www.ebay.com.au/itm/390707779100

    Regards,
    Mac

  10. #10
    Join Date
    Apr 2013
    Posts
    32


    Did you find this post helpful? Yes | No

    Default Re: OLED 128X96 cheap china lcd

    Hello,
    I have a 128x64 0.94" mono oled with ssd1306, I copied and tried CircuitDomain's modified code since he's using same device but I couldn't see any graphics on screen :\
    I'm using 16f877a and made necessary changes on code. I'm able to drive the screen with arduino uno but I want to use it with PIC.
    So, can anyone see what is the problem on codes? Or any suggestion ?

    Code:
    '==========================MCU SETUP============================================  
    DEFINE OSC 16
    DEFINE I2C_HOLD 1
    DEFINE CCP1_REG PORTC
    DEFINE CCP1_BIT 2
    DEFINE CCP2_REG PORTC
    DEFINE CCP2_BIT 1
    
    OPTION_REG=0
    ADCON0=0
    ADCON1=7
    CCP1CON=%00001111
    CCP2CON=%00001111
    TRISA=%00111111
    TRISB=%00000001
    TRISC=0
    TRISD=0
    TRISE=0
    PORTA=0
    PORTB=0
    PORTD=0
    
    '============================I/O SETUP==========================================
    ' BT var PortB.4
    LED var PortB.3
    
    '================================usuart========================================
    
    '==============================BAUD SETUP=======================================
    
    I2CDevice var byte
    SCL var PortC.3         ' I2C Clock  PortC.3
    SDA var PortC.4         ' I2C Data   PortC.4
    TEXT VAR BYTE[20]
    LENGTH VAR BYTE[2]
    DC VAR byte' "DATA OR COMMAND", $40=DATA; $0=COMMAND --> changed from bit to byte
    LCD_DATA VAR BYTE
    COM VAR BYTE'COMMAND
    
    
    I VAR BYTE
    J VAR BYTE
    X VAR BYTE' LCD POSITION X(0 TO 127)
    Y VAR BYTE'LCD POSITION Y(0 TO 7)
    CLEAR
    '=============================================================================
    'PAGE = $B0
    
    I2CDevice = $78      ' X/Y/Z = $3C, Display = $78,
    
    PAUSE 20
    
    GOSUB INIT
    GOSUB CLEAR_LCD
    GOSUB TITLE
    
    
    MAIN:
    
    COM=$A6:GOSUB SEND_COMMAND '$A6=NORMAL MODE;$A7=INVERSE MODE
    'PAUSE 100
    COM=$2E:GOSUB SEND_COMMAND
    COM=$27:GOSUB SEND_COMMAND
    COM=$00:GOSUB SEND_COMMAND
    COM=$03:GOSUB SEND_COMMAND
    COM=$04:GOSUB SEND_COMMAND
    COM=$06:GOSUB SEND_COMMAND
    COM=$00:GOSUB SEND_COMMAND
    COM=$FF:GOSUB SEND_COMMAND
    COM=$2F:GOSUB SEND_COMMAND
    'PAUSE 10000
    
    End
    GOTO MAIN
    
    
    '=========================lcd initialization====================================
    INIT:
    
    COM=$AE:GOSUB SEND_COMMAND' DISPALY OFF
    COM=$20:GOSUB SEND_COMMAND' HORIZONTAL MODE
    COM=$00:GOSUB SEND_COMMAND
    COM=$40:GOSUB SEND_COMMAND' DISPLAY START AT 0
    COM=$A1:GOSUB SEND_COMMAND' REMAP 0-127 ----> Mirror display
    COM=$C8:GOSUB SEND_COMMAND' SCAN DIRECTION
    COM=$DA:GOSUB SEND_COMMAND' COM PINS ------> Not Sure what this does
    COM=$10:GOSUB SEND_COMMAND' COM PINS ------> Not Sure what this does
    COM=$A4:GOSUB SEND_COMMAND' DISPLAY ON
    COM=$A7:GOSUB SEND_COMMAND' $A6=NORMAL MODE;$A7=INVERSE MODE
    COM=$AF:GOSUB SEND_COMMAND' DISPLAY ON
    
     return
    '===============================================================================
    '==============================clear lcd========================================
    CLEAR_LCD:
    
    
       FOR J=0 TO 7 
        FOR I=0 TO 127
            LCD_DATA=$00:GOSUB SEND_DATA  ' was $00
        NEXT I
       NEXT J                             
    
    RETURN 
    
    '****************SEND COMMAND************************************************
    
    SEND_COMMAND:
    dc=0
    'SHIFTOUT SDA,SCL,1,[DC\1]'SEND COMMAND BIT(D/C=0)
    'SHIFTOUT SDA,SCL,1,[COM\8]
    
    high LED
    I2CWrite SDA,SCL,I2CDevice,DC,[COM]
    
    Low led
    dc=$40
    RETURN 
    '*****************************************************************************
    
    '======================Send data===============================================
    SEND_DATA:
    DC=$40
    'SHIFTOUT SDA,SCL,1,[DC\1]'SEND DATA BIT(D/C=1)
    'SHIFTOUT SDA,SCL,1,[LCD_DATA\8]
    
    high LED
    I2CWrite SDA,SCL,I2CDevice,DC,[LCD_DATA]
    
    Low led
    RETURN
    '===============================================================================
    '=============================FILL=============================================
    FILL:
    FOR J=0 TO 7
    FOR I=0 TO 127
    LCD_DATA=$FF:GOSUB SEND_DATA
    NEXT I
    NEXT J
    RETURN
    '===============================================================================
    '=========================TITLE=================================================
    TITLE:
    X=0:Y=0 :GOSUB SET_XY
    FOR I=0 TO 127
    LOOKUP I,[$00,$40,$60,$50,$7E,$50,$60,$40,$02,$06,$0E,$1E,$3E,$00,$00,$00,_
    $00,$00,$00,$00,$00,$1F,$3F,$60,$60,$60,$60,$60,$60,$3C,$1C,$00,_
    $00,$7F,$7F,$61,$61,$61,$61,$61,$61,$3F,$1E,$00,$00,$1E,$3F,$61,_
    $61,$61,$61,$61,$61,$38,$18,$00,$00,$00,$00,$00,$00,$00,$00,$00,_
    $00,$00,$00,$00,$00,$00,$00,$1F,$3F,$60,$60,$60,$60,$60,$60,$3C,_
    $1C,$00,$00,$1E,$3F,$61,$61,$61,$61,$61,$61,$38,$18,$00,$00,$3F,_
    $7F,$60,$18,$06,$06,$18,$60,$7F,$3F,$00,$00,$00,$00,$00,$00,$00,_
    $00,$00,$00,$1C,$63,$41,$5D,$41,$5D,$41,$5D,$41,$5D,$41,$7F,$00],LCD_DATA
    lcd_data=lcd_data rev 8
    GOSUB SEND_DATA
    NEXT I
    
    X=0:Y=1 :GOSUB SET_XY
    for i=0 to 127
    lookup i,[$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,_
    $00,$00,$00,$00,$00,$F8,$FC,$06,$06,$06,$C6,$C6,$C6,$FC,$F8,$00,_
    $00,$FE,$FE,$80,$80,$80,$80,$80,$80,$00,$00,$00,$00,$18,$1C,$86,_
    $86,$86,$86,$86,$86,$FC,$78,$00,$00,$00,$00,$00,$00,$00,$00,$00,_
    $00,$00,$00,$00,$00,$00,$00,$F8,$FC,$06,$06,$06,$C6,$C6,$C6,$FC,_
    $F8,$00,$00,$18,$1C,$86,$86,$86,$86,$86,$86,$FC,$78,$00,$00,$FE,_
    $FE,$00,$00,$00,$00,$00,$00,$FE,$FE,$00,$00,$00,$00,$00,$00,$00,_
    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00],lcd_data
    lcd_data=lcd_data rev 8
    GOSUB SEND_DATA
    NEXT I
    
    X=0:Y=3:GOSUB SET_XY
    for i=0 to 127
    lookup i,[$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$3C,$7E,$C3,$C3,$C3,$C3,_
    $C3,$C3,$71,$30,$00,$00,$7F,$FF,$C3,$C3,$C3,$C3,$C3,$C3,$C3,$C3,_
    $00,$00,$7F,$FF,$C1,$C1,$C1,$C1,$C1,$C1,$FF,$7F,$00,$00,$7F,$FF,_
    $C3,$C3,$C3,$C3,$C3,$C3,$7E,$3C,$00,$00,$3F,$7F,$C0,$C0,$C0,$C0,_
    $C0,$C0,$70,$30,$00,$00,$FF,$FF,$03,$03,$03,$03,$03,$03,$FF,$FF,_
    $00,$00,$C0,$C0,$C0,$C0,$FF,$FF,$C0,$C0,$C0,$C0,$00,$00,$FF,$FF,_
    $0C,$0C,$03,$03,$00,$00,$FF,$FF,$00,$00,$3F,$7F,$C0,$C0,$C0,$C1,_
    $C1,$C1,$79,$39,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00],lcd_data
    lcd_data=lcd_data rev 8
    GOSUB SEND_DATA
    NEXT I
    
    X=0:Y=4:GOSUB SET_XY
    for i=0 to 127
    lookup i,[$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$30,$38,$0C,$0C,$0C,$0C,_
    $0C,$0C,$F8,$F0,$00,$00,$F8,$FC,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,_
    $00,$00,$FC,$FC,$80,$80,$80,$80,$80,$80,$FC,$FC,$00,$00,$FC,$FC,_
    $80,$C0,$60,$30,$18,$0C,$04,$00,$00,$00,$F0,$F8,$0C,$0C,$0C,$0C,_
    $0C,$0C,$38,$30,$00,$00,$FC,$FC,$00,$00,$00,$00,$00,$00,$FC,$FC,_
    $00,$00,$0C,$0C,$0C,$0C,$FC,$FC,$0C,$0C,$0C,$0C,$00,$00,$FC,$FC,_
    $00,$00,$00,$00,$C0,$C0,$FC,$FC,$00,$00,$F0,$F8,$0C,$0C,$0C,$8C,_
    $8C,$8C,$F8,$F0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00],lcd_data
    lcd_data=lcd_data rev 8
    GOSUB SEND_DATA
    NEXT I
    
    X=0:Y=5:GOSUB SET_XY
    for i=0 to 127
    lookup i,[$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$1F,$3F,$30,$30,$30,$30,_
    $30,$30,$30,$30,$00,$00,$0F,$1F,$30,$30,$30,$30,$30,$30,$1F,$0F,_
    $00,$00,$1F,$3F,$30,$30,$30,$30,$30,$30,$1F,$0F,$00,$00,$00,$00,_
    $00,$00,$00,$0F,$1F,$30,$30,$30,$30,$30,$30,$1C,$0C,$00,$00,$30,_
    $30,$30,$30,$3F,$3F,$30,$30,$30,$30,$00,$00,$0F,$1F,$30,$30,$30,_
    $30,$30,$30,$1E,$0E,$00,$00,$3F,$3F,$03,$03,$00,$00,$00,$00,$3F,_
    $3F,$00,$00,$1F,$3F,$30,$30,$30,$30,$30,$30,$3F,$1F,$00,$00,$3F,_
    $3F,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00],lcd_data
    lcd_data=lcd_data rev 8
    GOSUB SEND_DATA
    NEXT I
    
    X=0:Y=6:GOSUB SET_XY
    for i=0 to 127
    lookup i,[$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$FF,$FF,$C0,$C0,$C0,$C0,_
    $C0,$C0,$00,$00,$00,$00,$FC,$FE,$03,$03,$03,$03,$03,$03,$FE,$FC,_
    $00,$00,$FF,$FF,$E0,$F0,$D8,$CC,$C6,$C3,$81,$00,$00,$00,$00,$00,_
    $00,$00,$00,$0C,$8E,$C3,$C3,$C3,$C3,$C3,$C3,$7E,$3C,$00,$00,$03,_
    $03,$03,$03,$FF,$FF,$03,$03,$03,$03,$00,$00,$FC,$FE,$03,$03,$03,_
    $63,$63,$63,$7E,$7C,$00,$00,$FF,$FF,$00,$00,$C0,$C0,$30,$30,$FF,_
    $FF,$00,$00,$FF,$FF,$60,$60,$60,$60,$60,$60,$FF,$FF,$00,$00,$FF,_
    $FF,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00],lcd_data
    lcd_data=lcd_data rev 8
    GOSUB SEND_DATA
    NEXT I
    
    RETURN
    '===========================================SET X AND Y=========================
    SET_XY:
    COM=$21:GOSUB SEND_COMMAND
    COM=X:GOSUB SEND_COMMAND
    COM=127:GOSUB SEND_COMMAND
    COM=$22:GOSUB SEND_COMMAND
    COM=Y:GOSUB SEND_COMMAND
    COM=Y:GOSUB SEND_COMMAND
    RETURN
    '===============================================================================
    END
    And here is my exact circuit connection
    Name:  oled_circ.jpg
Views: 1579
Size:  145.2 KB

  11. #11
    Join Date
    Jun 2017
    Posts
    27


    Did you find this post helpful? Yes | No

    Default Re: OLED 128X96 cheap china lcd

    Quote Originally Posted by elcrcp View Post
    Hello,
    I have a 128x64 0.94" mono oled with ssd1306, I copied and tried CircuitDomain's modified code since he's using same device but I couldn't see any graphics on screen :\
    I'm using 16f877a and made necessary changes on code. I'm able to drive the screen with arduino uno but I want to use it with PIC.
    So, can anyone see what is the problem on codes? Or any suggestion ?

    Code:
    '==========================MCU SETUP============================================  
    DEFINE OSC 16
    DEFINE I2C_HOLD 1
    DEFINE CCP1_REG PORTC
    DEFINE CCP1_BIT 2
    DEFINE CCP2_REG PORTC
    DEFINE CCP2_BIT 1
    
    OPTION_REG=0
    ADCON0=0
    ADCON1=7
    CCP1CON=001111
    CCP2CON=001111
    TRISA=111111
    TRISB=000001
    TRISC=0
    TRISD=0
    TRISE=0
    PORTA=0
    PORTB=0
    PORTD=0
    
    '============================I/O SETUP==========================================
    ' BT var PortB.4
    LED var PortB.3
    
    '================================usuart========================================
    
    '==============================BAUD SETUP=======================================
    
    I2CDevice var byte
    SCL var PortC.3         ' I2C Clock  PortC.3
    SDA var PortC.4         ' I2C Data   PortC.4
    TEXT VAR BYTE[20]
    LENGTH VAR BYTE[2]
    DC VAR byte' "DATA OR COMMAND", $40=DATA; $0=COMMAND --> changed from bit to byte
    LCD_DATA VAR BYTE
    COM VAR BYTE'COMMAND
    
    
    I VAR BYTE
    J VAR BYTE
    X VAR BYTE' LCD POSITION X(0 TO 127)
    Y VAR BYTE'LCD POSITION Y(0 TO 7)
    CLEAR
    '=============================================================================
    'PAGE = $B0
    
    I2CDevice = $78      ' X/Y/Z = $3C, Display = $78,
    
    PAUSE 20
    
    GOSUB INIT
    GOSUB CLEAR_LCD
    GOSUB TITLE
    
    
    MAIN:
    
    COM=$A6:GOSUB SEND_COMMAND '$A6=NORMAL MODE;$A7=INVERSE MODE
    'PAUSE 100
    COM=$2E:GOSUB SEND_COMMAND
    COM=$27:GOSUB SEND_COMMAND
    COM=$00:GOSUB SEND_COMMAND
    COM=$03:GOSUB SEND_COMMAND
    COM=$04:GOSUB SEND_COMMAND
    COM=$06:GOSUB SEND_COMMAND
    COM=$00:GOSUB SEND_COMMAND
    COM=$FF:GOSUB SEND_COMMAND
    COM=$2F:GOSUB SEND_COMMAND
    'PAUSE 10000
    
    End
    GOTO MAIN
    
    
    '=========================lcd initialization====================================
    INIT:
    
    COM=$AE:GOSUB SEND_COMMAND' DISPALY OFF
    COM=$20:GOSUB SEND_COMMAND' HORIZONTAL MODE
    COM=$00:GOSUB SEND_COMMAND
    COM=$40:GOSUB SEND_COMMAND' DISPLAY START AT 0
    COM=$A1:GOSUB SEND_COMMAND' REMAP 0-127 ----> Mirror display
    COM=$C8:GOSUB SEND_COMMAND' SCAN DIRECTION
    COM=$DA:GOSUB SEND_COMMAND' COM PINS ------> Not Sure what this does
    COM=$10:GOSUB SEND_COMMAND' COM PINS ------> Not Sure what this does
    COM=$A4:GOSUB SEND_COMMAND' DISPLAY ON
    COM=$A7:GOSUB SEND_COMMAND' $A6=NORMAL MODE;$A7=INVERSE MODE
    COM=$AF:GOSUB SEND_COMMAND' DISPLAY ON
    
     return
    '===============================================================================
    '==============================clear lcd========================================
    CLEAR_LCD:
    
    
       FOR J=0 TO 7 
        FOR I=0 TO 127
            LCD_DATA=$00:GOSUB SEND_DATA  ' was $00
        NEXT I
       NEXT J                             
    
    RETURN 
    
    '****************SEND COMMAND************************************************
    
    SEND_COMMAND:
    dc=0
    'SHIFTOUT SDA,SCL,1,[DC\1]'SEND COMMAND BIT(D/C=0)
    'SHIFTOUT SDA,SCL,1,[COM\8]
    
    high LED
    I2CWrite SDA,SCL,I2CDevice,DC,[COM]
    
    Low led
    dc=$40
    RETURN 
    '*****************************************************************************
    
    '======================Send data===============================================
    SEND_DATA:
    DC=$40
    'SHIFTOUT SDA,SCL,1,[DC\1]'SEND DATA BIT(D/C=1)
    'SHIFTOUT SDA,SCL,1,[LCD_DATA\8]
    
    high LED
    I2CWrite SDA,SCL,I2CDevice,DC,[LCD_DATA]
    
    Low led
    RETURN
    '===============================================================================
    '=============================FILL=============================================
    FILL:
    FOR J=0 TO 7
    FOR I=0 TO 127
    LCD_DATA=$FF:GOSUB SEND_DATA
    NEXT I
    NEXT J
    RETURN
    '===============================================================================
    '=========================TITLE=================================================
    TITLE:
    X=0:Y=0 :GOSUB SET_XY
    FOR I=0 TO 127
    LOOKUP I,[$00,$40,$60,$50,$7E,$50,$60,$40,$02,$06,$0E,$1E,$3E,$00,$00,$00,_
    $00,$00,$00,$00,$00,$1F,$3F,$60,$60,$60,$60,$60,$60,$3C,$1C,$00,_
    $00,$7F,$7F,$61,$61,$61,$61,$61,$61,$3F,$1E,$00,$00,$1E,$3F,$61,_
    $61,$61,$61,$61,$61,$38,$18,$00,$00,$00,$00,$00,$00,$00,$00,$00,_
    $00,$00,$00,$00,$00,$00,$00,$1F,$3F,$60,$60,$60,$60,$60,$60,$3C,_
    $1C,$00,$00,$1E,$3F,$61,$61,$61,$61,$61,$61,$38,$18,$00,$00,$3F,_
    $7F,$60,$18,$06,$06,$18,$60,$7F,$3F,$00,$00,$00,$00,$00,$00,$00,_
    $00,$00,$00,$1C,$63,$41,$5D,$41,$5D,$41,$5D,$41,$5D,$41,$7F,$00],LCD_DATA
    lcd_data=lcd_data rev 8
    GOSUB SEND_DATA
    NEXT I
    
    X=0:Y=1 :GOSUB SET_XY
    for i=0 to 127
    lookup i,[$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,_
    $00,$00,$00,$00,$00,$F8,$FC,$06,$06,$06,$C6,$C6,$C6,$FC,$F8,$00,_
    $00,$FE,$FE,$80,$80,$80,$80,$80,$80,$00,$00,$00,$00,$18,$1C,$86,_
    $86,$86,$86,$86,$86,$FC,$78,$00,$00,$00,$00,$00,$00,$00,$00,$00,_
    $00,$00,$00,$00,$00,$00,$00,$F8,$FC,$06,$06,$06,$C6,$C6,$C6,$FC,_
    $F8,$00,$00,$18,$1C,$86,$86,$86,$86,$86,$86,$FC,$78,$00,$00,$FE,_
    $FE,$00,$00,$00,$00,$00,$00,$FE,$FE,$00,$00,$00,$00,$00,$00,$00,_
    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00],lcd_data
    lcd_data=lcd_data rev 8
    GOSUB SEND_DATA
    NEXT I
    
    X=0:Y=3:GOSUB SET_XY
    for i=0 to 127
    lookup i,[$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$3C,$7E,$C3,$C3,$C3,$C3,_
    $C3,$C3,$71,$30,$00,$00,$7F,$FF,$C3,$C3,$C3,$C3,$C3,$C3,$C3,$C3,_
    $00,$00,$7F,$FF,$C1,$C1,$C1,$C1,$C1,$C1,$FF,$7F,$00,$00,$7F,$FF,_
    $C3,$C3,$C3,$C3,$C3,$C3,$7E,$3C,$00,$00,$3F,$7F,$C0,$C0,$C0,$C0,_
    $C0,$C0,$70,$30,$00,$00,$FF,$FF,$03,$03,$03,$03,$03,$03,$FF,$FF,_
    $00,$00,$C0,$C0,$C0,$C0,$FF,$FF,$C0,$C0,$C0,$C0,$00,$00,$FF,$FF,_
    $0C,$0C,$03,$03,$00,$00,$FF,$FF,$00,$00,$3F,$7F,$C0,$C0,$C0,$C1,_
    $C1,$C1,$79,$39,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00],lcd_data
    lcd_data=lcd_data rev 8
    GOSUB SEND_DATA
    NEXT I
    
    X=0:Y=4:GOSUB SET_XY
    for i=0 to 127
    lookup i,[$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$30,$38,$0C,$0C,$0C,$0C,_
    $0C,$0C,$F8,$F0,$00,$00,$F8,$FC,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,_
    $00,$00,$FC,$FC,$80,$80,$80,$80,$80,$80,$FC,$FC,$00,$00,$FC,$FC,_
    $80,$C0,$60,$30,$18,$0C,$04,$00,$00,$00,$F0,$F8,$0C,$0C,$0C,$0C,_
    $0C,$0C,$38,$30,$00,$00,$FC,$FC,$00,$00,$00,$00,$00,$00,$FC,$FC,_
    $00,$00,$0C,$0C,$0C,$0C,$FC,$FC,$0C,$0C,$0C,$0C,$00,$00,$FC,$FC,_
    $00,$00,$00,$00,$C0,$C0,$FC,$FC,$00,$00,$F0,$F8,$0C,$0C,$0C,$8C,_
    $8C,$8C,$F8,$F0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00],lcd_data
    lcd_data=lcd_data rev 8
    GOSUB SEND_DATA
    NEXT I
    
    X=0:Y=5:GOSUB SET_XY
    for i=0 to 127
    lookup i,[$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$1F,$3F,$30,$30,$30,$30,_
    $30,$30,$30,$30,$00,$00,$0F,$1F,$30,$30,$30,$30,$30,$30,$1F,$0F,_
    $00,$00,$1F,$3F,$30,$30,$30,$30,$30,$30,$1F,$0F,$00,$00,$00,$00,_
    $00,$00,$00,$0F,$1F,$30,$30,$30,$30,$30,$30,$1C,$0C,$00,$00,$30,_
    $30,$30,$30,$3F,$3F,$30,$30,$30,$30,$00,$00,$0F,$1F,$30,$30,$30,_
    $30,$30,$30,$1E,$0E,$00,$00,$3F,$3F,$03,$03,$00,$00,$00,$00,$3F,_
    $3F,$00,$00,$1F,$3F,$30,$30,$30,$30,$30,$30,$3F,$1F,$00,$00,$3F,_
    $3F,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00],lcd_data
    lcd_data=lcd_data rev 8
    GOSUB SEND_DATA
    NEXT I
    
    X=0:Y=6:GOSUB SET_XY
    for i=0 to 127
    lookup i,[$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$FF,$FF,$C0,$C0,$C0,$C0,_
    $C0,$C0,$00,$00,$00,$00,$FC,$FE,$03,$03,$03,$03,$03,$03,$FE,$FC,_
    $00,$00,$FF,$FF,$E0,$F0,$D8,$CC,$C6,$C3,$81,$00,$00,$00,$00,$00,_
    $00,$00,$00,$0C,$8E,$C3,$C3,$C3,$C3,$C3,$C3,$7E,$3C,$00,$00,$03,_
    $03,$03,$03,$FF,$FF,$03,$03,$03,$03,$00,$00,$FC,$FE,$03,$03,$03,_
    $63,$63,$63,$7E,$7C,$00,$00,$FF,$FF,$00,$00,$C0,$C0,$30,$30,$FF,_
    $FF,$00,$00,$FF,$FF,$60,$60,$60,$60,$60,$60,$FF,$FF,$00,$00,$FF,_
    $FF,$03,$03,$03,$03,$03,$03,$03,$03,$00,$00,$00,$00,$00,$00,$00],lcd_data
    lcd_data=lcd_data rev 8
    GOSUB SEND_DATA
    NEXT I
    
    RETURN
    '===========================================SET X AND Y=========================
    SET_XY:
    COM=$21:GOSUB SEND_COMMAND
    COM=X:GOSUB SEND_COMMAND
    COM=127:GOSUB SEND_COMMAND
    COM=$22:GOSUB SEND_COMMAND
    COM=Y:GOSUB SEND_COMMAND
    COM=Y:GOSUB SEND_COMMAND
    RETURN
    '===============================================================================
    END
    And here is my exact circuit connection
    Attachment 7849

    Hi everyone,

    After looking at your schematic, the only problem I see is if the pull-up resistors are tied to +5v, then you would probably be damaging the inputs to the display. They are at 3-3.3v levels. I killed one by not paying attention to the voltages requirements of the device.

    I changed the code to suit my F887 and it still doesn't work.

    Hope this helps.

Similar Threads

  1. Master SPI interface to LCD/OLED??
    By jellis00 in forum mel PIC BASIC Pro
    Replies: 7
    Last Post: - 20th September 2009, 00:44
  2. Cheap Serial LCD ?
    By Sam in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 19th August 2009, 02:18
  3. OLED 128x128 color display
    By Ron Marcus in forum mel PIC BASIC Pro
    Replies: 6
    Last Post: - 21st May 2007, 02:45
  4. Replies: 6
    Last Post: - 4th April 2007, 08:33
  5. Need cheap i2c LCD for 16F877a
    By CodeShredder in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 6th December 2006, 02:25

Members who have read this thread : 1

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts