Created
March 6, 2018 11:45
-
-
Save tiagohm/332bab028f9e64711bcaf3a30e58bd1a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
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