Skip to content

Instantly share code, notes, and snippets.

@tiagohm tiagohm/SSD1306.c
Created Mar 6, 2018

Embed
What would you like to do?
/*
SSD1306 - Display monocromático OLED 128x64
Autor: Tiago Melo
Blog: Microcontrolandos
Compilador: MikroC PRO PIC
Bibliotecas: Soft_I2C
*/
/* Fundamental Command */
#define SSD1306_SETCONTRAST 0x81
#define SSD1306_ENTIREDISPLAYON_RESUME 0xA4
#define SSD1306_ENTIREDISPLAYON 0xA5
#define SSD1306_NORMALDISPLAY 0xA6
#define SSD1306_INVERTDISPLAY 0xA7
#define SSD1306_DISPLAYOFF 0xAE
#define SSD1306_DISPLAYON 0xAF
/* Scrolling Command */
#define SSD1306_RIGHT_HORIZONTAL_SCROLL 0x26
#define SSD1306_LEFT_HORIZONTAL_SCROLL 0x27
#define SSD1306_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL 0x29
#define SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL 0x2A
#define SSD1306_DEACTIVATE_SCROLL 0x2E
#define SSD1306_ACTIVATE_SCROLL 0x2F
#define SSD1306_SET_VERTICAL_SCROLL_AREA 0xA3
/* Addressing Setting Command */
#define SSD1306_SETLOWCOLUMN 0x00
#define SSD1306_SETHIGHCOLUMN 0x10
#define SSD1306_MEMORYMODE 0x20
#define SSD1306_COLUMNADDR 0x21
#define SSD1306_PAGEADDR 0x22
#define SSD1306_PAGESTARTADDR 0xB0
/* Hardware Configuration(Panel resolution and layout related) Command */
#define SSD1306_SETSTARTLINE 0x40
#define SSD1306_SEGREMAP 0xA0
#define SSD1306_SETMULTIPLEXRATIO 0xA8
#define SSD1306_COMSCANINC 0xC0
#define SSD1306_COMSCANDEC 0xC8
#define SSD1306_SETDISPLAYOFFSET 0xD3
#define SSD1306_SETCOMPINS 0xDA
/* Timing and Driving Scheme Setting Command */
#define SSD1306_SETDISPLAYCLOCKDIV 0xD5
#define SSD1306_SETPRECHARGE 0xD9
#define SSD1306_SETVCOMDETECT 0xDB
#define SSD1306_NOP 0xE3
#define SSD1306_CHARGEPUMP 0x8D
#define SSD1306_EXTERNALVCC 0x1
#define SSD1306_SWITCHCAPVCC 0x2
#define SSD1306_CL_WHITE 0
#define SSD1306_CL_BLACK 1
/* Funções */
void SSD1306_Init();
void SSD1306_Cmd(char wData);
void SSD1306_Data(char wData);
void SSD1306_Chr(char character, char color);
void SSD1306_Chr8(char row, char col, char wChar, char color);
void SSD1306_Chr16(char row, char col, char wChar, char color);
void SSD1306_Out8(char row, char col, char *texto, char color);
void SSD1306_Out16(char row, char col, char *texto, char color);
void SSD1306_Set_Cursor(char row, char col);
void SSD1306_Set_Contrast(char value);
#define SSD1306_Clear() SSD1306_Fill(0)
//https://bitbucket.org/tinusaur/ssd1306xled/src/d467de1d216d/ssd1306xled/?at=default
const code char SSD1306_Font8x16[][16] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0
0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,// ! 1
0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// " 2
0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,// # 3
0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,// $ 4
0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,// % 5
0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,// & 6
0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// ' 7
0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,// ( 8
0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,// ) 9
0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,// * 10
0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,// + 11
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,// , 12
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,// - 13
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,// . 14
0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,// / 15
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,// 0 16
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,// 1 17
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,// 2 18
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,// 3 19
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,// 4 20
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,// 5 21
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,// 6 22
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,// 7 23
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,// 8 24
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,// 9 25
0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,// : 26
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,// ; 27
0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,// < 28
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,// = 29
0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,// > 30
0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,// ? 31
0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,// @ 32
0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,// A 33
0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,// B 34
0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,// C 35
0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,// D 36
0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,// E 37
0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,// F 38
0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,// G 39
0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,// H 40
0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,// I 41
0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,// J 42
0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,// K 43
0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,// L 44
0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,// M 45
0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,// N 46
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,// O 47
0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,// P 48
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,// Q 49
0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,// R 50
0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,// S 51
0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,// T 52
0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,// U 53
0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,// V 54
0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,// W 55
0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,// X 56
0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,// Y 57
0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,// Z 58
0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,// [ 59
0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,// \ 60
0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,// ] 61
0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// ^ 62
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,// _ 63
0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// ` 64
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,// a 65
0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,// b 66
0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,// c 67
0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,// d 68
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,// e 69
0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,// f 70
0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,// g 71
0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,// h 72
0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,// i 73
0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,// j 74
0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,// k 75
0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,// l 76
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,// m 77
0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,// n 78
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,// o 79
0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,// p 80
0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,// q 81
0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,// r 82
0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,// s 83
0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,// t 84
0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,// u 85
0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,// v 86
0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,// w 87
0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,// x 88
0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,// y 89
0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,// z 90
0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,// { 91
0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,// | 92
0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,// } 93
0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// ~ 94
};
const code char SSD1306_Font8x8[][8] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x5F,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x07,0x00,0x07,0x00,0x00,0x00,
0x00,0x14,0x7F,0x14,0x7F,0x14,0x00,0x00,
0x00,0x24,0x2A,0x7F,0x2A,0x12,0x00,0x00,
0x00,0x23,0x13,0x08,0x64,0x62,0x00,0x00,
0x00,0x36,0x49,0x55,0x22,0x50,0x00,0x00,
0x00,0x00,0x05,0x03,0x00,0x00,0x00,0x00,
0x00,0x1C,0x22,0x41,0x00,0x00,0x00,0x00,
0x00,0x41,0x22,0x1C,0x00,0x00,0x00,0x00,
0x00,0x08,0x2A,0x1C,0x2A,0x08,0x00,0x00,
0x00,0x08,0x08,0x3E,0x08,0x08,0x00,0x00,
0x00,0xA0,0x60,0x00,0x00,0x00,0x00,0x00,
0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x00,
0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00,
0x00,0x20,0x10,0x08,0x04,0x02,0x00,0x00,
0x00,0x3E,0x51,0x49,0x45,0x3E,0x00,0x00,
0x00,0x00,0x42,0x7F,0x40,0x00,0x00,0x00,
0x00,0x62,0x51,0x49,0x49,0x46,0x00,0x00,
0x00,0x22,0x41,0x49,0x49,0x36,0x00,0x00,
0x00,0x18,0x14,0x12,0x7F,0x10,0x00,0x00,
0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00,
0x00,0x3C,0x4A,0x49,0x49,0x30,0x00,0x00,
0x00,0x01,0x71,0x09,0x05,0x03,0x00,0x00,
0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00,
0x00,0x06,0x49,0x49,0x29,0x1E,0x00,0x00,
0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,
0x00,0x00,0xAC,0x6C,0x00,0x00,0x00,0x00,
0x00,0x08,0x14,0x22,0x41,0x00,0x00,0x00,
0x00,0x14,0x14,0x14,0x14,0x14,0x00,0x00,
0x00,0x41,0x22,0x14,0x08,0x00,0x00,0x00,
0x00,0x02,0x01,0x51,0x09,0x06,0x00,0x00,
0x00,0x32,0x49,0x79,0x41,0x3E,0x00,0x00,
0x00,0x7E,0x09,0x09,0x09,0x7E,0x00,0x00,
0x00,0x7F,0x49,0x49,0x49,0x36,0x00,0x00,
0x00,0x3E,0x41,0x41,0x41,0x22,0x00,0x00,
0x00,0x7F,0x41,0x41,0x22,0x1C,0x00,0x00,
0x00,0x7F,0x49,0x49,0x49,0x41,0x00,0x00,
0x00,0x7F,0x09,0x09,0x09,0x01,0x00,0x00,
0x00,0x3E,0x41,0x41,0x51,0x72,0x00,0x00,
0x00,0x7F,0x08,0x08,0x08,0x7F,0x00,0x00,
0x00,0x41,0x7F,0x41,0x00,0x00,0x00,0x00,
0x00,0x20,0x40,0x41,0x3F,0x01,0x00,0x00,
0x00,0x7F,0x08,0x14,0x22,0x41,0x00,0x00,
0x00,0x7F,0x40,0x40,0x40,0x40,0x00,0x00,
0x00,0x7F,0x02,0x0C,0x02,0x7F,0x00,0x00,
0x00,0x7F,0x04,0x08,0x10,0x7F,0x00,0x00,
0x00,0x3E,0x41,0x41,0x41,0x3E,0x00,0x00,
0x00,0x7F,0x09,0x09,0x09,0x06,0x00,0x00,
0x00,0x3E,0x41,0x51,0x21,0x5E,0x00,0x00,
0x00,0x7F,0x09,0x19,0x29,0x46,0x00,0x00,
0x00,0x26,0x49,0x49,0x49,0x32,0x00,0x00,
0x00,0x01,0x01,0x7F,0x01,0x01,0x00,0x00,
0x00,0x3F,0x40,0x40,0x40,0x3F,0x00,0x00,
0x00,0x1F,0x20,0x40,0x20,0x1F,0x00,0x00,
0x00,0x3F,0x40,0x38,0x40,0x3F,0x00,0x00,
0x00,0x63,0x14,0x08,0x14,0x63,0x00,0x00,
0x00,0x03,0x04,0x78,0x04,0x03,0x00,0x00,
0x00,0x61,0x51,0x49,0x45,0x43,0x00,0x00,
0x00,0x7F,0x41,0x41,0x00,0x00,0x00,0x00,
0x00,0x02,0x04,0x08,0x10,0x20,0x00,0x00,
0x00,0x41,0x41,0x7F,0x00,0x00,0x00,0x00,
0x00,0x04,0x02,0x01,0x02,0x04,0x00,0x00,
0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,
0x00,0x01,0x02,0x04,0x00,0x00,0x00,0x00,
0x00,0x20,0x54,0x54,0x54,0x78,0x00,0x00,
0x00,0x7F,0x48,0x44,0x44,0x38,0x00,0x00,
0x00,0x38,0x44,0x44,0x28,0x00,0x00,0x00,
0x00,0x38,0x44,0x44,0x48,0x7F,0x00,0x00,
0x00,0x38,0x54,0x54,0x54,0x18,0x00,0x00,
0x00,0x08,0x7E,0x09,0x02,0x00,0x00,0x00,
0x00,0x18,0xA4,0xA4,0xA4,0x7C,0x00,0x00,
0x00,0x7F,0x08,0x04,0x04,0x78,0x00,0x00,
0x00,0x00,0x7D,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x84,0x7D,0x00,0x00,0x00,0x00,
0x00,0x7F,0x10,0x28,0x44,0x00,0x00,0x00,
0x00,0x41,0x7F,0x40,0x00,0x00,0x00,0x00,
0x00,0x7C,0x04,0x18,0x04,0x78,0x00,0x00,
0x00,0x7C,0x08,0x04,0x7C,0x00,0x00,0x00,
0x00,0x38,0x44,0x44,0x38,0x00,0x00,0x00,
0x00,0xFC,0x24,0x24,0x18,0x00,0x00,0x00,
0x00,0x18,0x24,0x24,0xFC,0x00,0x00,0x00,
0x00,0x00,0x7C,0x08,0x04,0x00,0x00,0x00,
0x00,0x48,0x54,0x54,0x24,0x00,0x00,0x00,
0x00,0x04,0x7F,0x44,0x00,0x00,0x00,0x00,
0x00,0x3C,0x40,0x40,0x7C,0x00,0x00,0x00,
0x00,0x1C,0x20,0x40,0x20,0x1C,0x00,0x00,
0x00,0x3C,0x40,0x30,0x40,0x3C,0x00,0x00,
0x00,0x44,0x28,0x10,0x28,0x44,0x00,0x00,
0x00,0x1C,0xA0,0xA0,0x7C,0x00,0x00,0x00,
0x00,0x44,0x64,0x54,0x4C,0x44,0x00,0x00,
0x00,0x08,0x36,0x41,0x00,0x00,0x00,0x00,
0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,
0x00,0x41,0x36,0x08,0x00,0x00,0x00,0x00,
0x00,0x02,0x01,0x01,0x02,0x01,0x00,0x00,
0x00,0x02,0x05,0x05,0x02,0x00,0x00,0x00
};
/* Envia um comando */
void SSD1306_Cmd(char wData) {
Soft_I2C_Start(); //Sinal de start
Soft_I2C_Write(0x78); //Envia o endereço do display
Soft_I2C_Write(0x00); //Control Byte
Soft_I2C_Write(wData); //Comando
Soft_I2C_Stop(); //Sinal de stop
}
/* Envia um dado */
void SSD1306_Data(char wData) {
Soft_I2C_Start(); //Sinal de start
Soft_I2C_Write(0x78); //Envia o endereço do display
Soft_I2C_Write(0b1100000); //Control Byte
Soft_I2C_Write(wData); //Dado
Soft_I2C_Stop(); //Sinal de stop
}
/* Inicializa o display */
void SSD1306_Init() {
SSD1306_Cmd(SSD1306_DISPLAYOFF); //Display Off
/* MUITO IMPORTANTE!!! */
SSD1306_Cmd(SSD1306_SETMULTIPLEXRATIO); //Multiplex Ratio
SSD1306_Cmd(0x3F);
SSD1306_Cmd(SSD1306_SETDISPLAYOFFSET); //Display Offset
SSD1306_Cmd(0x00);
SSD1306_Cmd(SSD1306_SETSTARTLINE); //Display Start Line
SSD1306_Cmd(SSD1306_SEGREMAP | 1);
SSD1306_Cmd(SSD1306_COMSCANDEC); //COM Output Scan Direction
SSD1306_Cmd(SSD1306_SETCOMPINS); //COM Pins Hardware Configuration
SSD1306_Cmd(0x12);
SSD1306_Cmd(SSD1306_SETCONTRAST); //Contrast Control
SSD1306_Cmd(255);
SSD1306_Cmd(SSD1306_ENTIREDISPLAYON_RESUME); //Entire Display On/Off
SSD1306_Cmd(SSD1306_NORMALDISPLAY); //Normal/Inverse Display
SSD1306_Cmd(SSD1306_SETDISPLAYCLOCKDIV); //Display Clock Divide Ratio/Oscillator Frequency
SSD1306_Cmd(0x80);
SSD1306_Cmd(SSD1306_SETPRECHARGE); //Pre-Charge Period
SSD1306_Cmd(0x25);
SSD1306_Cmd(SSD1306_SETVCOMDETECT); //VCOMH Deselect Level
SSD1306_Cmd(0x20);
/* MUITO IMPORTANTE!!! */
SSD1306_Cmd(SSD1306_PAGEADDR);
SSD1306_Cmd(0);
SSD1306_Cmd(7);
/* posicao inicial do cursor */
SSD1306_Cmd(0xB0);
SSD1306_Cmd(0x10);
SSD1306_Cmd(0x00);
SSD1306_Cmd(SSD1306_MEMORYMODE);
SSD1306_Cmd(2);
SSD1306_Cmd(SSD1306_CHARGEPUMP); //Charge Pump
SSD1306_Cmd(0x14); //Enable Charge Pump
SSD1306_Cmd(SSD1306_DISPLAYON); //Display On
}
/* Define a posição do cursor */
void SSD1306_Set_Cursor(char row, char col) {
SSD1306_Cmd(SSD1306_PAGESTARTADDR | row); //Define a posicao da linha
SSD1306_Cmd((SSD1306_SETHIGHCOLUMN |(col >> 4))); //Define o nibble MSB da posição da coluna
SSD1306_Cmd((0x0f & col)); //Difne o nibble LSB da posição da coluna
}
/* Define o constraste do display */
void SSD1306_Set_Contrast(char value) {
SSD1306_Cmd(SSD1306_SETCONTRAST); //Envia o comando para alterar o contraste
SSD1306_Cmd(value); //Define o novo valor do constraste
}
/* Escreve um caracter 8x8 na posição atual do cursor */
void SSD1306_Chr(char wChar, char color) {
char i;
wChar = wChar - 0x20;
color = color ? 0x00 : 0xFF;
for(i = 0; i < 8; i++)
SSD1306_Data(SSD1306_Font8x8[wChar][i] ^ color);
}
/* Escreve um caracter 8x8 na posição especificada */
void SSD1306_Chr8(char row, char col, char wChar, char color) {
SSD1306_Set_Cursor(row, col << 3);
SSD1306_Chr(wChar, color);
}
/* Escreve um caracter 8x16 na posição especificada */
void SSD1306_Chr16(char row, char col, char wChar, char color) {
char i;
col <<= 3;
SSD1306_Set_Cursor(row++, col);
wChar = wChar - 0x20;
color = color ? 0x00 : 0xFF;
for(i = 0; i < 8; i++)
SSD1306_Data(SSD1306_Font8x16[wChar][i] ^ color);
SSD1306_Set_Cursor(row, col);
for(i = 8; i < 16; i++)
SSD1306_Data(SSD1306_Font8x16[wChar][i] ^ color);
}
/* Escreve um texto com caracteres 8x8 na posição especificada */
void SSD1306_Out8(char row, char col, char *texto, char color) {
SSD1306_Set_Cursor(row, col << 3);
while(*texto)
SSD1306_Chr(*texto++, color);
}
/* Escreve um texto com caracteres 8x16 na posição especificada */
void SSD1306_Out16(char row, char col, char *texto, char color) {
while(*texto)
SSD1306_Chr16(row, col++, *texto++, color);
}
/* Desenha uma imagem */
void SSD1306_Image(const char *bmp, char color) {
char x, y;
color = color ? 0x00 : 0xFF;
for(y = 0; y < 8; y++)
{
SSD1306_Set_Cursor(y, 0);
Soft_I2C_Start();
Soft_I2C_Write(0x78);
Soft_I2C_Write(0b1100000);
for(x = 0; x < 128; x++)
Soft_I2C_Write(*bmp++ ^ color);
Soft_I2C_Stop();
}
}
/* Preeche o display com o byte */
void SSD1306_Fill(char color) {
char x, y;
for(y = 0; y < 8; y++)
{
SSD1306_Set_Cursor(y, 0);
Soft_I2C_Start();
Soft_I2C_Write(0x78);
Soft_I2C_Write(0b1100000);
for(x = 0; x < 128; x++)
Soft_I2C_Write(color);
Soft_I2C_Stop();
}
}
//Pinos do display SSD1306.
sbit Soft_I2C_Sda at PORTB.B0;
sbit Soft_I2C_Scl at PORTB.B1;
sbit Soft_I2C_Sda_Direction at TRISB.B0;
sbit Soft_I2C_Scl_Direction at TRISB.B1;
/* Imagem gerada pela ferramenta GLCD Bitmap Editor do MikroC, display KS0108 */
const code char logo[1024] = { ... };
void main()
{
Soft_I2C_Init(); //Inicializa a comunicação I2C
SSD1306_Init(); //Inicializa o display
SSD1306_Clear(); //Limpa o display
SSD1306_Out8(0, 0, "Tiago", 0); //Imprime o texto na linha 0, coluna 0, com as cores invertida
Delay_ms(5000); //Aguarda 5ms
SSD1306_Image(logo, 1); //Desenha a imagem
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.