Quantcast
Channel: MEL PICBASIC Forum
Viewing all articles
Browse latest Browse all 4745

OLED 128X96 cheap china lcd

$
0
0
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.

Viewing all articles
Browse latest Browse all 4745

Trending Articles