Code:
' ====== FUSES =====================================================================================
' External Oscillator - 32MHz crystal
' 16F18446
#CONFIG
__config _CONFIG1, _FCMEN_OFF & _CSWEN_OFF & _CLKOUTEN_OFF & _RSTOSC_EXT1X & _FEXTOSC_HS
__config _CONFIG2, _MCLRE_OFF & _PWRTS_PWRT_64 & _LPBOREN_OFF & _BOREN_OFF & _BORV_LO & _ZCDDIS_OFF & _PPS1WAY_OFF & _STVREN_ON
__config _CONFIG3, _WDTCPS_WDTCPS_31 & _WDTE_SWDTEN & _WDTCWS_WDTCWS_7 & _WDTCCS_LFINTOSC
__config _CONFIG4, _BBSIZE_BB512 & _BBEN_OFF & _SAFEN_OFF & _WRTAPP_OFF & _WRTB_OFF & _WRTC_OFF & _WRTD_OFF & _WRTSAF_OFF & _LVP_OFF
__config _CONFIG5, _CP_OFF
#ENDCONFIG
@ ERRORLEVEL -306
@ ERRORLEVEL -202
' ====== REGISTERS =================================================================================
' 16F18446
ANSELA = %00000000
ANSELB = %00000000
ANSELC = %00000000
TRISA = %00000000
TRISB = %00000000
TRISC = %00000000
' ====== DEFINES ===================================================================================
DEFINE OSC 32
DEFINE I2C_SLOW 1 ' if >8MHz
' ====== VARIABLES =================================================================================
SDA VAR PORTB.5
SCL VAR PORTB.6
I2CDevice CON $78
Page VAR BYTE
' ====== SSD1306 I2C OLED initialization ===========================================================
PAUSE 500 ' let OLED module settle
I2CWrite SDA,SCL,I2CDevice,[$00,$AE,$D5,$80,$A8,$3F,$D3,$00,$20,$00,$AD,$30,$8D,$14,$68,$A6,$A4,_
$A1,$C8,$DA,$12,$81,$7F,$D9,$22,$DB,$40,$2E,$AF]
' Clear display
I2CWrite SDA,SCL,I2CDevice,[$00,$21,28,99,$22,0,4]
FOR Page = 0 TO 4 ' 5 pages, draw nothing, pages are each 8 pixels high and 72 pixels wide
I2CWrite SDA,SCL,I2CDevice,[$40,_
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, _
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, _
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, _
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
NEXT Page
' ====== PROGRAM ===================================================================================
MAIN:
' 1st splash screen
I2CWrite SDA,SCL,I2CDevice,[$00,$21,28,99,$22,0,0]
GOSUB SPLASH_1_72x40PAGE0
I2CWrite SDA,SCL,I2CDevice,[$00,$21,28,99,$22,1,1]
GOSUB SPLASH_1_72x40PAGE1
I2CWrite SDA,SCL,I2CDevice,[$00,$21,28,99,$22,2,2]
GOSUB SPLASH_1_72x40PAGE2
I2CWrite SDA,SCL,I2CDevice,[$00,$21,28,99,$22,3,3]
GOSUB SPLASH_1_72x40PAGE3
I2CWrite SDA,SCL,I2CDevice,[$00,$21,28,99,$22,4,4]
GOSUB SPLASH_1_72x40PAGE4
PAUSE 2000
' 2nd splash screen
I2CWrite SDA,SCL,I2CDevice,[$00,$21,28,99,$22,0,0]
GOSUB SPLASH_2_72x40PAGE0
I2CWrite SDA,SCL,I2CDevice,[$00,$21,28,99,$22,1,1]
GOSUB SPLASH_2_72x40PAGE1
I2CWrite SDA,SCL,I2CDevice,[$00,$21,28,99,$22,2,2]
GOSUB SPLASH_2_72x40PAGE2
I2CWrite SDA,SCL,I2CDevice,[$00,$21,28,99,$22,3,3]
GOSUB SPLASH_2_72x40PAGE3
I2CWrite SDA,SCL,I2CDevice,[$00,$21,28,99,$22,4,4]
GOSUB SPLASH_2_72x40PAGE4
PAUSE 2000
GOTO MAIN
END
' ====== CHARACTERS TO DISPLAY =====================================================================
' SPLASH 1
SPLASH_1_72x40PAGE0:
I2CWrite SDA,SCL,I2CDevice,[$40,_
0,0,252,252,252,60,28,28,28,56,248,248,240,192,0,0,0,252,252,252,0,0,0,0,192,240,248,120,60,28,28,28,28,60,248,248,240,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
RETURN
SPLASH_1_72x40PAGE1:
I2CWrite SDA,SCL,I2CDevice,[$40,_
0,0,255,255,255,56,56,56,56,60,31,31,15,3,0,0,0,255,255,255,0,0,0,62,255,255,255,128,0,0,0,0,0,0,192,192,192,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
RETURN
SPLASH_1_72x40PAGE2:
I2CWrite SDA,SCL,I2CDevice,[$40,_
0,0,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0,15,15,15,0,0,0,0,1,3,7,15,14,14,12,14,14,15,15,7,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
RETURN
SPLASH_1_72x40PAGE3:
I2CWrite SDA,SCL,I2CDevice,[$40,_
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,252,252,140,140,204,252,120,0,0,0,96,96,32,32,224,224,0,0,192,224,224,32,32,96,64,0,0,192,236,108,0,128,192,224,96,32,96,96,64,0]
RETURN
SPLASH_1_72x40PAGE4:
I2CWrite SDA,SCL,I2CDevice,[$40,_
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,62,63,55,49,49,57,31,31,6,0,28,62,54,34,18,63,63,7,0,16,56,49,35,55,62,30,0,0,56,63,15,0,0,31,63,48,48,48,56,24,0,0]
RETURN
' SPLASH 2
SPLASH_2_72x40PAGE0:
I2CWrite SDA,SCL,I2CDevice,[$40,_
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
RETURN
SPLASH_2_72x40PAGE1:
I2CWrite SDA,SCL,I2CDevice,[$40,_
0,0,128,128,192,192,0,0,0,0,128,192,192,192,192,192,128,0,0,192,192,192,192,192,192,0,0,128,128,192,192,0,0,0,0,128,192,64,192,128,0,0,0,0,0,0,0,192,192,192,0,0,0,0,0,0,0,192,192,192,0,0,0,128,192,192,192,192,192,128,0,0]
RETURN
SPLASH_2_72x40PAGE2:
I2CWrite SDA,SCL,I2CDevice,[$40,_
0,0,1,129,255,255,128,0,0,0,255,255,136,12,140,249,249,0,0,255,255,12,12,12,12,0,0,1,129,255,255,128,0,0,99,255,32,8,156,255,99,0,0,96,120,124,103,99,255,255,96,0,0,96,120,124,103,99,255,255,96,0,0,255,255,136,12,140,249,249,0,0]
RETURN
SPLASH_2_72x40PAGE3:
I2CWrite SDA,SCL,I2CDevice,[$40,_
0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,0,0,0]
RETURN
SPLASH_2_72x40PAGE4:
I2CWrite SDA,SCL,I2CDevice,[$40,_
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
RETURN
Bookmarks