#include <xc.h>
/************ OLED Display.h *********/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Commnet this line if the OLED Display needs a Reset Pin
//#define RESET_PIN_NEEDED
#if defined RESET_PIN_NEEDED
#ifndef OLED_RESET_PIN
#define OLED_RESET_PIN PORTCbits . RC0
#endif
#endif
#define ARRAY_WIDHT 128
#define ARRAY_HEIGHT 8
#define ARRAY_LENGHT ( 8 * ARRAY_HEIGHT )
#define SSD1306_GDDRAM ( ARRAY_WIDHT * ARRAY_HEIGHT / 8 )
unsigned char TEST [ ARRAY_HEIGHT ] [ ARRAY_WIDHT ];
#define WHITE 0x01
#define BLACK 0x00
#define FILL 0x01
#define NO_FILL 0x00
// 1. Fundamental Commands.
#define OLED_CONTRAST 0x81
#define OLED_DISPLAY_ALL_ON_RESUME 0xA4
#define OLED_DISPLAY_ALL_ON 0xA5
#define OLED_NORMAL_DISPLAY 0xA6
#define OLED_INVERTED_DISPLAY 0xA7
#define OLED_DISPLAY_OFF 0xAE
#define OLED_DISPLAY_ON 0xAF
// 2. Scrolling
#define OLED_RIGHT_HORIZONTAL_SCROLL 0x26
#define OLED_LEFT_HORIZONTAL_SCROLL 0x27
#define OLED_5_FRAMES 0x00
#define OLED_64_FRAMES 0x01
#define OLED_128_FRAMES 0x02
#define OLED_256_FRAMES 0x03
#define OLED_3_FRAMES 0x04
#define OLED_4_FRAMES 0x05
#define OLED_25_FRAMES 0x06
#define OLED_2_FRAMES 0x07
#define OLED_DUMMY_BYTE 0x00
#define OLED_VERTICAL_RIGHT 0x29
#define OLED_VERTICAL_LEFT 0x2A
#define OLED_DEACTIVATE_SCROLL 0x2E
#define OLED_ACTIVATE_SCROLL 0x2F
#define OLED_VERTICAL_SCROLL 0xA3
// 3. Addressing.
#define OLED_LOW_COLUMN_START 0x00
#define OLED_HIGH_COLUMN_START 0x10
#define OLED_MEMORY_MODE 0x20
#define OLED_HORIZONTAL_MODE 0x00
#define OLED_VERTICAL_MODE 0x01
#define OLED_PAGE_MODE 0x02
#define OLED_COLUMN_ADDRESS 0x21
#define OLED_PAGE_ADDRESS 0x22
#define OLED_PAGE_START 0xB0
// 4. Hardware Configuration.
#define OLED_SET_START_LINE 0x40
#define OLED_SEGMENT_REMAP 0xA0
#define OLED_SET_MULTIPLEX_RATIO 0xA8
#define OLED_COM_SCAN_INCREMENT 0xC0
#define OLED_COM_SCAN_DECREMENT 0xC8
#define OLED_DISPLAY_OFFSET 0xD3
#define OLED_SET_COM_PINS 0xDA
// 5. Timing.
#define OLED_DISPLAY_CLOCK_RATIO 0xD5
#define OLED_CLOCK_RESET_RATIO 0x80
#define OLED_SET_PRECHARGE 0xD9
#define OLED_PRECHARGE_RESET 0x22
#define OLED_PRECHARGE_P1_P2 0xF1
#define OLED_SET_VCOM_H 0xDB
#define OLED_VCC_RESET 0x20
// 6?. Other
#define OLED_CHARGE_PUMP 0x8D
#define OLED_DISABLE_CHARGE 0x10
#define OLED_ENABLE_CHARGE 0x14
#define bitWise(n) ( 1 << n )
#define SIZE_ONE 0x01
#define SIZE_TWO 0x02
#define SIZE_THREE 0x03
#define DDGRAM_CLEAR 0x01
#define DDGRAM_NO_CLEAR 0x00
char OLEDSetUp ( void );
void OLEDCommand ( unsigned char c );
void OLEDPixel ( int x, int y, char color );
void OLEDCommandSend ( char reg, char data );
void OLEDData ( unsigned char c );
void OLEDFill ( unsigned char dat );
void OLEDUpdateDisplay ( unsigned char clear );
void OLEDClearBuffer ( void );
void OLEDInvertedDisplay ( unsigned char complement );
void OLEDScrollToRight ( unsigned char start, unsigned char stop, unsigned char frequency );
void OLEDScrollToLeft ( unsigned char start, unsigned char stop, unsigned char frequency );
void OLEDScrollVerticalAndRight ( unsigned char start, unsigned char stop,
unsigned char frequency, unsigned char offset );
void OLEDScrollVerticalAndLeft ( unsigned char start, unsigned char stop,
unsigned char frequency, unsigned char offset );
void OLEDScrollVertical ( unsigned char startRow, unsigned char stopRow, unsigned char frequency ); //8!
void OLEDStopScroll ( void );
void testArray ( void );
void clearTest ( void );
void printArrayTest ( void );
void OLEDLine ( unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, char color );
void OLEDRectangular ( unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, unsigned char fill, char color );
void OLEDCircle ( int x, int y, int radius, char fill, char color );
void OLEDBar ( int x1, int y1, int x2, int y2, int width, char color );
void OLEDAreaFill ( unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, unsigned char fill, char color );
void OLEDText ( int x, int y, char* textptr, int size, char color );
// CHARACTERS GRTAPIC MODE // !!
#if defined ( _PIC16F887_H_ )
const char TEXT[51][5] =
#elif defined ( _PIC18F45K22_H_ ) || defined ( _PIC18F44K22_H_ )
// const char TEXT[51][5] @ 0x1000 =
// __far const char TEXT[51][5] =
const char TEXT[51][5] @ 0x1000 =
#endif
{0x00, 0x00, 0x00, 0x00, 0x00, // SPACE
0x00, 0x00, 0x5F, 0x00, 0x00, // !
0x00, 0x03, 0x00, 0x03, 0x00, // "
0x14, 0x3E, 0x14, 0x3E, 0x14, // #
0x24, 0x2A, 0x7F, 0x2A, 0x12, // $
0x43, 0x33, 0x08, 0x66, 0x61, // %
0x36, 0x49, 0x55, 0x22, 0x50, // &
0x00, 0x05, 0x03, 0x00, 0x00, // '
0x00, 0x1C, 0x22, 0x41, 0x00, // (
0x00, 0x41, 0x22, 0x1C, 0x00, // )
0x14, 0x08, 0x3E, 0x08, 0x14, // *
0x08, 0x08, 0x3E, 0x08, 0x08, // +
0x00, 0x50, 0x30, 0x00, 0x00, // ,
0x08, 0x08, 0x08, 0x08, 0x08, // -
0x00, 0x60, 0x60, 0x00, 0x00, // .
0x20, 0x10, 0x08, 0x04, 0x02, // /
0x3E, 0x51, 0x49, 0x45, 0x3E, // 0
0x04, 0x02, 0x7F, 0x00, 0x00, // 1
0x42, 0x61, 0x51, 0x49, 0x46, // 2
0x22, 0x41, 0x49, 0x49, 0x36, // 3
0x18, 0x14, 0x12, 0x7F, 0x10, // 4
0x27, 0x45, 0x45, 0x45, 0x39, // 5
0x3E, 0x49, 0x49, 0x49, 0x32, // 6
0x01, 0x01, 0x71, 0x09, 0x07, // 7
0x36, 0x49, 0x49, 0x49, 0x36, // 8
0x26, 0x49, 0x49, 0x49, 0x3E, // 9
0x00, 0x36, 0x36, 0x00, 0x00, // :
0x00, 0x56, 0x36, 0x00, 0x00, // ;
0x08, 0x14, 0x22, 0x41, 0x00, // <
0x14, 0x14, 0x14, 0x14, 0x14, // =
0x00, 0x41, 0x22, 0x14, 0x08, // >
0x02, 0x01, 0x51, 0x09, 0x06, // ?
0x3E, 0x41, 0x59, 0x55, 0x5E, // @
0x7E, 0x09, 0x09, 0x09, 0x7E, // A
0x7F, 0x49, 0x49, 0x49, 0x36, // B
0x3E, 0x41, 0x41, 0x41, 0x22, // C
0x7F, 0x41, 0x41, 0x41, 0x3E, // D
0x7F, 0x49, 0x49, 0x49, 0x41, // E
0x7F, 0x09, 0x09, 0x09, 0x01, // F
0x3E, 0x41, 0x41, 0x49, 0x3A, // G
0x7F, 0x08, 0x08, 0x08, 0x7F, // H
0x00, 0x41, 0x7F, 0x41, 0x00, // I
0x30, 0x40, 0x40, 0x40, 0x3F, // J
0x7F, 0x08, 0x14, 0x22, 0x41, // K
0x7F, 0x40, 0x40, 0x40, 0x40, // L
0x7F, 0x02, 0x0C, 0x02, 0x7F, // M
0x7F, 0x02, 0x04, 0x08, 0x7F, // N
0x3E, 0x41, 0x41, 0x41, 0x3E, // O
0x7F, 0x09, 0x09, 0x09, 0x06, // P
0x1E, 0x21, 0x21, 0x21, 0x5E, // Q
0x7F, 0x09, 0x09, 0x09, 0x76};// R
const char TEXT2[44][5]={0x26, 0x49, 0x49, 0x49, 0x32, // S
0x01, 0x01, 0x7F, 0x01, 0x01, // T
0x3F, 0x40, 0x40, 0x40, 0x3F, // U
0x1F, 0x20, 0x40, 0x20, 0x1F, // V
0x7F, 0x20, 0x10, 0x20, 0x7F, // W
0x41, 0x22, 0x1C, 0x22, 0x41, // X
0x07, 0x08, 0x70, 0x08, 0x07, // Y
0x61, 0x51, 0x49, 0x45, 0x43, // Z
0x00, 0x7F, 0x41, 0x00, 0x00, // [
0x02, 0x04, 0x08, 0x10, 0x20, // \
0x00, 0x00, 0x41, 0x7F, 0x00, // ]
0x04, 0x02, 0x01, 0x02, 0x04, // ^
0x40, 0x40, 0x40, 0x40, 0x40, // _
0x00, 0x01, 0x02, 0x04, 0x00, // `
0x20, 0x54, 0x54, 0x54, 0x78, // a
0x7F, 0x44, 0x44, 0x44, 0x38, // b
0x38, 0x44, 0x44, 0x44, 0x44, // c
0x38, 0x44, 0x44, 0x44, 0x7F, // d
0x38, 0x54, 0x54, 0x54, 0x18, // e
0x04, 0x04, 0x7E, 0x05, 0x05, // f
0x08, 0x54, 0x54, 0x54, 0x3C, // g
0x7F, 0x08, 0x04, 0x04, 0x78, // h
0x00, 0x44, 0x7D, 0x40, 0x00, // i
0x20, 0x40, 0x44, 0x3D, 0x00, // j
0x7F, 0x10, 0x28, 0x44, 0x00, // k
0x00, 0x41, 0x7F, 0x40, 0x00, // l
0x7C, 0x04, 0x78, 0x04, 0x78, // m
0x7C, 0x08, 0x04, 0x04, 0x78, // n
0x38, 0x44, 0x44, 0x44, 0x38, // o
0x7C, 0x14, 0x14, 0x14, 0x08, // p
0x08, 0x14, 0x14, 0x14, 0x7C, // q
0x00, 0x7C, 0x08, 0x04, 0x04, // r
0x48, 0x54, 0x54, 0x54, 0x20, // s
0x04, 0x04, 0x3F, 0x44, 0x44, // t
0x3C, 0x40, 0x40, 0x20, 0x7C, // u
0x1C, 0x20, 0x40, 0x20, 0x1C, // v
0x3C, 0x40, 0x30, 0x40, 0x3C, // w
0x44, 0x28, 0x10, 0x28, 0x44, // x
0x0C, 0x50, 0x50, 0x50, 0x3C, // y
0x44, 0x64, 0x54, 0x4C, 0x44, // z
0x00, 0x08, 0x36, 0x41, 0x41, // {
0x00, 0x00, 0x7F, 0x00, 0x00, // |
0x41, 0x41, 0x36, 0x08, 0x00, // }
0x02, 0x01, 0x02, 0x04, 0x02};// ~