PDA

View Full Version : OLED 128X96 cheap china lcd



starwick
- 4th May 2013, 15:14
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:




;***************************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:

http://www.youtube.com/watch?v=TV7F5ArnRIw

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.

Normnet
- 4th May 2013, 15:56
Joe

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


Thanks
Norm

Denner
- 22nd May 2013, 23:48
Hello,
To display the data you send through I2C or SPI, I have a problem and hope you can help me.

CircuitDomain
- 22nd February 2014, 13:09
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.


;***************************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,$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

srspinho
- 26th February 2014, 15:22
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-OLED-Module-SSD1306-Blue-Yellow-White-/130536923601?pt=LH_DefaultDomain_0&hash=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

HenrikOlsson
- 26th February 2014, 18:53
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.

starwick
- 27th February 2014, 00:49
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.

starwick
- 27th February 2014, 01:07
correction to the above:
BS0=1;BS1=0BS2=0.
Sorry.
Regards,

Joe

CircuitDomain
- 27th February 2014, 05:11
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-OLED-Module-SSD1306-Blue-Yellow-White-/130536923601?pt=LH_DefaultDomain_0&hash=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

elcrcp
- 9th June 2015, 15:01
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 ?



'==========================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,$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


And here is my exact circuit connection
7849

csantex
- 19th June 2017, 05:23
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 ?



'==========================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,$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


And here is my exact circuit connection
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.