Code:
' ====== FUSES =====================================================================================
' External Oscillator
' 16F18446
#CONFIG
__config _CONFIG1, _FCMEN_OFF & _CSWEN_OFF & _CLKOUTEN_OFF & _RSTOSC_EXT1X & _FEXTOSC_HS
__config _CONFIG2, _MCLRE_OFF & _PWRTS_PWRT_64 & _LPBOREN_OFF & _BOREN_SBOREN & _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
WPUA = %00000000
ANSELB = %00000000
WPUB = %00000000
ANSELC = %00000000
WPUC = %00000000
ADCON0 = %00000000
ADCON1 = %00000000
ADCON2 = %00000000
ADCON3 = %00000000
INTCON = %00000000
CM1CON0 = %00000000
CM1CON1 = %00000000
TRISA = %00000000
TRISB = %00000000
TRISC = %00000000
PORTA = %00000000
PORTB = %00000000
PORTC = %00000000
LATA = %00000000
LATB = %00000000
LATC = %00000000
INLVLA = %00000000
INLVLB = %00000000
INLVLC = %00000000
' ====== DEFINES ===================================================================================
DEFINE OSC 4
' ====== VARIABLES =================================================================================
SDA VAR LATB.5
SCL VAR LATB.6
I2CDevice CON $78
Page VAR BYTE
' ====== SSD1306 I2C 72x40 OLED display initialization =============================================
PAUSE 500 ' let OLED module settle
I2CWrite SDA,SCL,I2CDevice,[$00,$AE]
I2CWrite SDA,SCL,I2CDevice,[$00,$D5]
I2CWrite SDA,SCL,I2CDevice,[$00,$80]
I2CWrite SDA,SCL,I2CDevice,[$00,$A8]
I2CWrite SDA,SCL,I2CDevice,[$00,$3F]
I2CWrite SDA,SCL,I2CDevice,[$00,$D3]
I2CWrite SDA,SCL,I2CDevice,[$00,$00]
I2CWrite SDA,SCL,I2CDevice,[$00,$20]
I2CWrite SDA,SCL,I2CDevice,[$00,$00]
I2CWrite SDA,SCL,I2CDevice,[$00,$AD]
I2CWrite SDA,SCL,I2CDevice,[$00,$30]
I2CWrite SDA,SCL,I2CDevice,[$00,$8D]
I2CWrite SDA,SCL,I2CDevice,[$00,$14]
I2CWrite SDA,SCL,I2CDevice,[$00,$68]
I2CWrite SDA,SCL,I2CDevice,[$00,$A6]
I2CWrite SDA,SCL,I2CDevice,[$00,$A4]
I2CWrite SDA,SCL,I2CDevice,[$00,$A1]
I2CWrite SDA,SCL,I2CDevice,[$00,$C8]
I2CWrite SDA,SCL,I2CDevice,[$00,$DA]
I2CWrite SDA,SCL,I2CDevice,[$00,$12]
I2CWrite SDA,SCL,I2CDevice,[$00,$81]
I2CWrite SDA,SCL,I2CDevice,[$00,$7F]
I2CWrite SDA,SCL,I2CDevice,[$00,$D9]
I2CWrite SDA,SCL,I2CDevice,[$00,$22]
I2CWrite SDA,SCL,I2CDevice,[$00,$DB]
I2CWrite SDA,SCL,I2CDevice,[$00,$40]
I2CWrite SDA,SCL,I2CDevice,[$00,$2E]
I2CWrite SDA,SCL,I2CDevice,[$00,$AF]
' Clear display
I2CWrite SDA,SCL,I2CDevice,[$00,$21,28,99,$22,0,4]
FOR Page = 0 TO 4
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:
I2CWrite SDA,SCL,I2CDevice,[$00,$21,28,43,$22,1,4]
GOSUB ZERO32x16
I2CWrite SDA,SCL,I2CDevice,[$00,$21,50,65,$22,1,4]
GOSUB ZERO32x16
I2CWrite SDA,SCL,I2CDevice,[$00,$21,72,76,$22,1,4]
GOSUB DOT32x16
I2CWrite SDA,SCL,I2CDevice,[$00,$21,84,99,$22,1,4]
GOSUB ZERO32x16
LATB.7 = !LATB.7 ' proof of loop
pause 500
GOTO MAIN
END
' ====== CHARACTERS TO DISPLAY =====================================================================
ZERO32x16:
I2CWrite SDA,SCL,I2CDevice,[$40,_
128,192,224,240,240,240,240,240,240,240,240,240,240,224,192,128, _
255,255,255,255,1,0,0,0,0,0,0,1,255,255,255,255, _
255,255,255,255,0,0,0,0,0,0,0,0,255,255,255,255, _
31,63,127,255,248,240,240,240,240,240,240,248,255,127,63,31]
RETURN
DOT32x16:
I2CWrite SDA,SCL,I2CDevice,[$40,_
0,0,0,0,0,_
0,0,0,0,0,_
0,0,0,0,0,_
248,248,248,248,248]
RETURN
Bookmarks