2 * This file is part of Cleanflight.
4 * Cleanflight is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
9 * Cleanflight is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with Cleanflight. If not, see <http://www.gnu.org/licenses/>.
27 #include "display_ug2864hsweg01.h"
29 #define INVERSE_CHAR_FORMAT 0x7f // 0b01111111
30 #define NORMAL_CHAR_FORMAT 0x00 // 0b00000000
32 unsigned char CHAR_FORMAT
= NORMAL_CHAR_FORMAT
;
34 static const uint8_t multiWiiFont
[][5] = { // Refer to "Times New Roman" Font Database... 5 x 7 font
35 { 0x00, 0x00, 0x00, 0x00, 0x00 }, { 0x00, 0x00, 0x4F, 0x00, 0x00 }, // ( 1) ! - 0x0021 Exclamation Mark
36 { 0x00, 0x07, 0x00, 0x07, 0x00 }, // ( 2) " - 0x0022 Quotation Mark
37 { 0x14, 0x7F, 0x14, 0x7F, 0x14 }, // ( 3) # - 0x0023 Number Sign
38 { 0x24, 0x2A, 0x7F, 0x2A, 0x12 }, // ( 4) $ - 0x0024 Dollar Sign
39 { 0x23, 0x13, 0x08, 0x64, 0x62 }, // ( 5) % - 0x0025 Percent Sign
40 { 0x36, 0x49, 0x55, 0x22, 0x50 }, // ( 6) & - 0x0026 Ampersand
41 { 0x00, 0x05, 0x03, 0x00, 0x00 }, // ( 7) ' - 0x0027 Apostrophe
42 { 0x00, 0x1C, 0x22, 0x41, 0x00 }, // ( 8) ( - 0x0028 Left Parenthesis
43 { 0x00, 0x41, 0x22, 0x1C, 0x00 }, // ( 9) ) - 0x0029 Right Parenthesis
44 { 0x14, 0x08, 0x3E, 0x08, 0x14 }, // ( 10) * - 0x002A Asterisk
45 { 0x08, 0x08, 0x3E, 0x08, 0x08 }, // ( 11) + - 0x002B Plus Sign
46 { 0x00, 0x50, 0x30, 0x00, 0x00 }, // ( 12) , - 0x002C Comma
47 { 0x08, 0x08, 0x08, 0x08, 0x08 }, // ( 13) - - 0x002D Hyphen-Minus
48 { 0x00, 0x60, 0x60, 0x00, 0x00 }, // ( 14) . - 0x002E Full Stop
49 { 0x20, 0x10, 0x08, 0x04, 0x02 }, // ( 15) / - 0x002F Solidus
50 { 0x3E, 0x51, 0x49, 0x45, 0x3E }, // ( 16) 0 - 0x0030 Digit Zero
51 { 0x00, 0x42, 0x7F, 0x40, 0x00 }, // ( 17) 1 - 0x0031 Digit One
52 { 0x42, 0x61, 0x51, 0x49, 0x46 }, // ( 18) 2 - 0x0032 Digit Two
53 { 0x21, 0x41, 0x45, 0x4B, 0x31 }, // ( 19) 3 - 0x0033 Digit Three
54 { 0x18, 0x14, 0x12, 0x7F, 0x10 }, // ( 20) 4 - 0x0034 Digit Four
55 { 0x27, 0x45, 0x45, 0x45, 0x39 }, // ( 21) 5 - 0x0035 Digit Five
56 { 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // ( 22) 6 - 0x0036 Digit Six
57 { 0x01, 0x71, 0x09, 0x05, 0x03 }, // ( 23) 7 - 0x0037 Digit Seven
58 { 0x36, 0x49, 0x49, 0x49, 0x36 }, // ( 24) 8 - 0x0038 Digit Eight
59 { 0x06, 0x49, 0x49, 0x29, 0x1E }, // ( 25) 9 - 0x0039 Dight Nine
60 { 0x00, 0x36, 0x36, 0x00, 0x00 }, // ( 26) : - 0x003A Colon
61 { 0x00, 0x56, 0x36, 0x00, 0x00 }, // ( 27) ; - 0x003B Semicolon
62 { 0x08, 0x14, 0x22, 0x41, 0x00 }, // ( 28) < - 0x003C Less-Than Sign
63 { 0x14, 0x14, 0x14, 0x14, 0x14 }, // ( 29) = - 0x003D Equals Sign
64 { 0x00, 0x41, 0x22, 0x14, 0x08 }, // ( 30) > - 0x003E Greater-Than Sign
65 { 0x02, 0x01, 0x51, 0x09, 0x06 }, // ( 31) ? - 0x003F Question Mark
66 { 0x32, 0x49, 0x79, 0x41, 0x3E }, // ( 32) @ - 0x0040 Commercial At
67 { 0x7E, 0x11, 0x11, 0x11, 0x7E }, // ( 33) A - 0x0041 Latin Capital Letter A
68 { 0x7F, 0x49, 0x49, 0x49, 0x36 }, // ( 34) B - 0x0042 Latin Capital Letter B
69 { 0x3E, 0x41, 0x41, 0x41, 0x22 }, // ( 35) C - 0x0043 Latin Capital Letter C
70 { 0x7F, 0x41, 0x41, 0x22, 0x1C }, // ( 36) D - 0x0044 Latin Capital Letter D
71 { 0x7F, 0x49, 0x49, 0x49, 0x41 }, // ( 37) E - 0x0045 Latin Capital Letter E
72 { 0x7F, 0x09, 0x09, 0x09, 0x01 }, // ( 38) F - 0x0046 Latin Capital Letter F
73 { 0x3E, 0x41, 0x49, 0x49, 0x7A }, // ( 39) G - 0x0047 Latin Capital Letter G
74 { 0x7F, 0x08, 0x08, 0x08, 0x7F }, // ( 40) H - 0x0048 Latin Capital Letter H
75 { 0x00, 0x41, 0x7F, 0x41, 0x00 }, // ( 41) I - 0x0049 Latin Capital Letter I
76 { 0x20, 0x40, 0x41, 0x3F, 0x01 }, // ( 42) J - 0x004A Latin Capital Letter J
77 { 0x7F, 0x08, 0x14, 0x22, 0x41 }, // ( 43) K - 0x004B Latin Capital Letter K
78 { 0x7F, 0x40, 0x40, 0x40, 0x40 }, // ( 44) L - 0x004C Latin Capital Letter L
79 { 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // ( 45) M - 0x004D Latin Capital Letter M
80 { 0x7F, 0x04, 0x08, 0x10, 0x7F }, // ( 46) N - 0x004E Latin Capital Letter N
81 { 0x3E, 0x41, 0x41, 0x41, 0x3E }, // ( 47) O - 0x004F Latin Capital Letter O
82 { 0x7F, 0x09, 0x09, 0x09, 0x06 }, // ( 48) P - 0x0050 Latin Capital Letter P
83 { 0x3E, 0x41, 0x51, 0x21, 0x5E }, // ( 49) Q - 0x0051 Latin Capital Letter Q
84 { 0x7F, 0x09, 0x19, 0x29, 0x46 }, // ( 50) R - 0x0052 Latin Capital Letter R
85 { 0x46, 0x49, 0x49, 0x49, 0x31 }, // ( 51) S - 0x0053 Latin Capital Letter S
86 { 0x01, 0x01, 0x7F, 0x01, 0x01 }, // ( 52) T - 0x0054 Latin Capital Letter T
87 { 0x3F, 0x40, 0x40, 0x40, 0x3F }, // ( 53) U - 0x0055 Latin Capital Letter U
88 { 0x1F, 0x20, 0x40, 0x20, 0x1F }, // ( 54) V - 0x0056 Latin Capital Letter V
89 { 0x3F, 0x40, 0x38, 0x40, 0x3F }, // ( 55) W - 0x0057 Latin Capital Letter W
90 { 0x63, 0x14, 0x08, 0x14, 0x63 }, // ( 56) X - 0x0058 Latin Capital Letter X
91 { 0x07, 0x08, 0x70, 0x08, 0x07 }, // ( 57) Y - 0x0059 Latin Capital Letter Y
92 { 0x61, 0x51, 0x49, 0x45, 0x43 }, // ( 58) Z - 0x005A Latin Capital Letter Z
93 { 0x00, 0x7F, 0x41, 0x41, 0x00 }, // ( 59) [ - 0x005B Left Square Bracket
94 { 0x02, 0x04, 0x08, 0x10, 0x20 }, // ( 60) \ - 0x005C Reverse Solidus
95 { 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ( 61) ] - 0x005D Right Square Bracket
96 { 0x04, 0x02, 0x01, 0x02, 0x04 }, // ( 62) ^ - 0x005E Circumflex Accent
97 { 0x40, 0x40, 0x40, 0x40, 0x40 }, // ( 63) _ - 0x005F Low Line
98 { 0x01, 0x02, 0x04, 0x00, 0x00 }, // ( 64) ` - 0x0060 Grave Accent
99 { 0x20, 0x54, 0x54, 0x54, 0x78 }, // ( 65) a - 0x0061 Latin Small Letter A
100 { 0x7F, 0x48, 0x44, 0x44, 0x38 }, // ( 66) b - 0x0062 Latin Small Letter B
101 { 0x38, 0x44, 0x44, 0x44, 0x20 }, // ( 67) c - 0x0063 Latin Small Letter C
102 { 0x38, 0x44, 0x44, 0x48, 0x7F }, // ( 68) d - 0x0064 Latin Small Letter D
103 { 0x38, 0x54, 0x54, 0x54, 0x18 }, // ( 69) e - 0x0065 Latin Small Letter E
104 { 0x08, 0x7E, 0x09, 0x01, 0x02 }, // ( 70) f - 0x0066 Latin Small Letter F
105 { 0x06, 0x49, 0x49, 0x49, 0x3F }, // ( 71) g - 0x0067 Latin Small Letter G
106 { 0x7F, 0x08, 0x04, 0x04, 0x78 }, // ( 72) h - 0x0068 Latin Small Letter H
107 { 0x00, 0x44, 0x7D, 0x40, 0x00 }, // ( 73) i - 0x0069 Latin Small Letter I
108 { 0x20, 0x40, 0x44, 0x3D, 0x00 }, // ( 74) j - 0x006A Latin Small Letter J
109 { 0x7F, 0x10, 0x28, 0x44, 0x00 }, // ( 75) k - 0x006B Latin Small Letter K
110 { 0x00, 0x41, 0x7F, 0x40, 0x00 }, // ( 76) l - 0x006C Latin Small Letter L
111 { 0x7C, 0x04, 0x18, 0x04, 0x7C }, // ( 77) m - 0x006D Latin Small Letter M
112 { 0x7C, 0x08, 0x04, 0x04, 0x78 }, // ( 78) n - 0x006E Latin Small Letter N
113 { 0x38, 0x44, 0x44, 0x44, 0x38 }, // ( 79) o - 0x006F Latin Small Letter O
114 { 0x7C, 0x14, 0x14, 0x14, 0x08 }, // ( 80) p - 0x0070 Latin Small Letter P
115 { 0x08, 0x14, 0x14, 0x18, 0x7C }, // ( 81) q - 0x0071 Latin Small Letter Q
116 { 0x7C, 0x08, 0x04, 0x04, 0x08 }, // ( 82) r - 0x0072 Latin Small Letter R
117 { 0x48, 0x54, 0x54, 0x54, 0x20 }, // ( 83) s - 0x0073 Latin Small Letter S
118 { 0x04, 0x3F, 0x44, 0x40, 0x20 }, // ( 84) t - 0x0074 Latin Small Letter T
119 { 0x3C, 0x40, 0x40, 0x20, 0x7C }, // ( 85) u - 0x0075 Latin Small Letter U
120 { 0x1C, 0x20, 0x40, 0x20, 0x1C }, // ( 86) v - 0x0076 Latin Small Letter V
121 { 0x3C, 0x40, 0x30, 0x40, 0x3C }, // ( 87) w - 0x0077 Latin Small Letter W
122 { 0x44, 0x28, 0x10, 0x28, 0x44 }, // ( 88) x - 0x0078 Latin Small Letter X
123 { 0x0C, 0x50, 0x50, 0x50, 0x3C }, // ( 89) y - 0x0079 Latin Small Letter Y
124 { 0x44, 0x64, 0x54, 0x4C, 0x44 }, // ( 90) z - 0x007A Latin Small Letter Z
125 { 0x00, 0x08, 0x36, 0x41, 0x00 }, // ( 91) { - 0x007B Left Curly Bracket
126 { 0x00, 0x00, 0x7F, 0x00, 0x00 }, // ( 92) | - 0x007C Vertical Line
127 { 0x00, 0x41, 0x36, 0x08, 0x00 }, // ( 93) } - 0x007D Right Curly Bracket
128 { 0x02, 0x01, 0x02, 0x04, 0x02 }, // ( 94) ~ - 0x007E Tilde
129 { 0x3E, 0x55, 0x55, 0x41, 0x22 }, // ( 95) C - 0x0080 <Control>
130 { 0x00, 0x00, 0x00, 0x00, 0x00 }, // ( 96) - 0x00A0 No-Break Space
131 { 0x00, 0x00, 0x79, 0x00, 0x00 }, // ( 97) ! - 0x00A1 Inverted Exclamation Mark
132 { 0x18, 0x24, 0x74, 0x2E, 0x24 }, // ( 98) c - 0x00A2 Cent Sign
133 { 0x48, 0x7E, 0x49, 0x42, 0x40 }, // ( 99) L - 0x00A3 Pound Sign
134 { 0x5D, 0x22, 0x22, 0x22, 0x5D }, // (100) o - 0x00A4 Currency Sign
135 { 0x15, 0x16, 0x7C, 0x16, 0x15 }, // (101) Y - 0x00A5 Yen Sign
136 { 0x00, 0x00, 0x77, 0x00, 0x00 }, // (102) | - 0x00A6 Broken Bar
137 { 0x0A, 0x55, 0x55, 0x55, 0x28 }, // (103) - 0x00A7 Section Sign
138 { 0x00, 0x01, 0x00, 0x01, 0x00 }, // (104) " - 0x00A8 Diaeresis
139 { 0x00, 0x0A, 0x0D, 0x0A, 0x04 }, // (105) - 0x00AA Feminine Ordinal Indicator
140 { 0x08, 0x14, 0x2A, 0x14, 0x22 }, // (106) << - 0x00AB Left-Pointing Double Angle Quotation Mark
141 { 0x04, 0x04, 0x04, 0x04, 0x1C }, // (107) - 0x00AC Not Sign
142 { 0x00, 0x08, 0x08, 0x08, 0x00 }, // (108) - - 0x00AD Soft Hyphen
143 { 0x01, 0x01, 0x01, 0x01, 0x01 }, // (109) - 0x00AF Macron
144 { 0x00, 0x02, 0x05, 0x02, 0x00 }, // (110) - 0x00B0 Degree Sign
145 { 0x44, 0x44, 0x5F, 0x44, 0x44 }, // (111) +- - 0x00B1 Plus-Minus Sign
146 { 0x00, 0x00, 0x04, 0x02, 0x01 }, // (112) ` - 0x00B4 Acute Accent
147 { 0x7E, 0x20, 0x20, 0x10, 0x3E }, // (113) u - 0x00B5 Micro Sign
148 { 0x06, 0x0F, 0x7F, 0x00, 0x7F }, // (114) - 0x00B6 Pilcrow Sign
149 { 0x00, 0x18, 0x18, 0x00, 0x00 }, // (115) . - 0x00B7 Middle Dot
150 { 0x00, 0x40, 0x50, 0x20, 0x00 }, // (116) - 0x00B8 Cedilla
151 { 0x00, 0x0A, 0x0D, 0x0A, 0x00 }, // (117) - 0x00BA Masculine Ordinal Indicator
152 { 0x22, 0x14, 0x2A, 0x14, 0x08 }, // (118) >> - 0x00BB Right-Pointing Double Angle Quotation Mark
153 { 0x17, 0x08, 0x34, 0x2A, 0x7D }, // (119) /4 - 0x00BC Vulgar Fraction One Quarter
154 { 0x17, 0x08, 0x04, 0x6A, 0x59 }, // (120) /2 - 0x00BD Vulgar Fraction One Half
155 { 0x30, 0x48, 0x45, 0x40, 0x20 }, // (121) ? - 0x00BE Inverted Question Mark
156 { 0x42, 0x00, 0x42, 0x00, 0x42 }, // (122) - 0x00BF Horizontal Bargraph - 0 (empty)
157 { 0x7E, 0x42, 0x00, 0x42, 0x00 }, // (123) - 0x00C0 Horizontal Bargraph - 1
158 { 0x7E, 0x7E, 0x00, 0x42, 0x00 }, // (124) - 0x00C1 Horizontal Bargraph - 2
159 { 0x7E, 0x7E, 0x7E, 0x42, 0x00 }, // (125) - 0x00C2 Horizontal Bargraph - 3
160 { 0x7E, 0x7E, 0x7E, 0x7E, 0x00 }, // (126) - 0x00C3 Horizontal Bargraph - 4
161 { 0x7E, 0x7E, 0x7E, 0x7E, 0x7E }, // (127) - 0x00C4 Horizontal Bargraph - 5 (full)
162 { 0x5A, 0x00, 0x00, 0x00, 0x5A }, // (128) - 0x00C5 Vertical Bargraph - 0 (empty)
163 { 0x5A, 0x40, 0x40, 0x40, 0x5A }, // (129) - 0x00C6 Vertical Bargraph - 1
164 { 0x7A, 0x60, 0x60, 0x60, 0x7A }, // (130) - 0x00C7 Vertical Bargraph - 2
165 { 0x7A, 0x70, 0x70, 0x70, 0x7A }, // (131) - 0x00C8 Vertical Bargraph - 3
166 { 0x7A, 0x78, 0x78, 0x78, 0x7A }, // (131) - 0x00C8 Vertical Bargraph - 4
167 { 0x7A, 0x7C, 0x7C, 0x7C, 0x7A }, // (131) - 0x00C8 Vertical Bargraph - 5
168 { 0x7A, 0x7E, 0x7E, 0x7E, 0x7A }, // (131) - 0x00C8 Vertical Bargraph - 6 (full)
171 #define OLED_address 0x3C // OLED at address 0x3C in 7bit
173 static bool i2c_OLED_send_cmd(uint8_t command
)
175 return i2cWrite(OLED_address
, 0x80, command
);
178 bool i2c_OLED_send_byte(uint8_t val
)
180 return i2cWrite(OLED_address
, 0x40, val
);
183 void i2c_OLED_clear_display(void)
185 i2c_OLED_send_cmd(0xa6); // Set Normal Display
186 i2c_OLED_send_cmd(0xae); // Display OFF
187 i2c_OLED_send_cmd(0x20); // Set Memory Addressing Mode
188 i2c_OLED_send_cmd(0x00); // Set Memory Addressing Mode to Horizontal addressing mode
189 i2c_OLED_send_cmd(0xb0); // set page address to 0
190 i2c_OLED_send_cmd(0x40); // Display start line register to 0
191 i2c_OLED_send_cmd(0); // Set low col address to 0
192 i2c_OLED_send_cmd(0x10); // Set high col address to 0
193 for(uint16_t i
= 0; i
< 1024; i
++) { // fill the display's RAM with graphic... 128*64 pixel picture
194 i2c_OLED_send_byte(0x00); // clear
196 i2c_OLED_send_cmd(0x81); // Setup CONTRAST CONTROL, following byte is the contrast Value... always a 2 byte instruction
197 i2c_OLED_send_cmd(200); // Here you can set the brightness 1 = dull, 255 is very bright
198 i2c_OLED_send_cmd(0xaf); // display on
201 void i2c_OLED_clear_display_quick(void)
203 i2c_OLED_send_cmd(0xb0); // set page address to 0
204 i2c_OLED_send_cmd(0x40); // Display start line register to 0
205 i2c_OLED_send_cmd(0); // Set low col address to 0
206 i2c_OLED_send_cmd(0x10); // Set high col address to 0
207 for(uint16_t i
= 0; i
< 1024; i
++) { // fill the display's RAM with graphic... 128*64 pixel picture
208 i2c_OLED_send_byte(0x00); // clear
212 void i2c_OLED_set_xy(uint8_t col
, uint8_t row
)
214 i2c_OLED_send_cmd(0xb0 + row
); //set page address
215 i2c_OLED_send_cmd(0x00 + ((CHARACTER_WIDTH_TOTAL
* col
) & 0x0f)); //set low col address
216 i2c_OLED_send_cmd(0x10 + (((CHARACTER_WIDTH_TOTAL
* col
) >> 4) & 0x0f)); //set high col address
219 void i2c_OLED_set_line(uint8_t row
)
221 i2c_OLED_send_cmd(0xb0 + row
); //set page address
222 i2c_OLED_send_cmd(0); //set low col address
223 i2c_OLED_send_cmd(0x10); //set high col address
226 void i2c_OLED_send_charH(unsigned char ascii
,bool highlight
)
230 for (i
= 0; i
< 5; i
++) {
232 buffer
= ~multiWiiFont
[ascii
- 32][i
];
234 buffer
= multiWiiFont
[ascii
- 32][i
];
235 buffer
^= CHAR_FORMAT
; // apply
236 i2c_OLED_send_byte(buffer
);
238 i2c_OLED_send_byte(CHAR_FORMAT
); // the gap
241 void i2c_OLED_send_char(unsigned char ascii
){
242 i2c_OLED_send_charH(ascii
,false);
245 void i2c_OLED_send_stringH(const char *string
, bool highlight
)
247 // Sends a string of chars until null terminator
249 i2c_OLED_send_charH(*string
,highlight
);
253 void i2c_OLED_send_string(const char *string
){
254 i2c_OLED_send_stringH(string
,false);
257 * according to http://www.adafruit.com/datasheets/UG-2864HSWEG01.pdf Chapter 4.4 Page 15
260 bool ug2864hsweg01InitI2C(void)
264 if (!i2c_OLED_send_cmd(0xAE)) {
268 i2c_OLED_send_cmd(0xD4); // Set Display Clock Divide Ratio / OSC Frequency
269 i2c_OLED_send_cmd(0x80); // Display Clock Divide Ratio / OSC Frequency
270 i2c_OLED_send_cmd(0xA8); // Set Multiplex Ratio
271 i2c_OLED_send_cmd(0x3F); // Multiplex Ratio for 128x64 (64-1)
272 i2c_OLED_send_cmd(0xD3); // Set Display Offset
273 i2c_OLED_send_cmd(0x00); // Display Offset
274 i2c_OLED_send_cmd(0x40); // Set Display Start Line
275 i2c_OLED_send_cmd(0x8D); // Set Charge Pump
276 i2c_OLED_send_cmd(0x14); // Charge Pump (0x10 External, 0x14 Internal DC/DC)
277 i2c_OLED_send_cmd(0xA1); // Set Segment Re-Map
278 i2c_OLED_send_cmd(0xC8); // Set Com Output Scan Direction
279 i2c_OLED_send_cmd(0xDA); // Set COM Hardware Configuration
280 i2c_OLED_send_cmd(0x12); // COM Hardware Configuration
281 i2c_OLED_send_cmd(0x81); // Set Contrast
282 i2c_OLED_send_cmd(0xCF); // Contrast
283 i2c_OLED_send_cmd(0xD9); // Set Pre-Charge Period
284 i2c_OLED_send_cmd(0xF1); // Set Pre-Charge Period (0x22 External, 0xF1 Internal)
285 i2c_OLED_send_cmd(0xDB); // Set VCOMH Deselect Level
286 i2c_OLED_send_cmd(0x40); // VCOMH Deselect Level
287 i2c_OLED_send_cmd(0xA4); // Set all pixels OFF
288 i2c_OLED_send_cmd(0xA6); // Set display not inverted
289 i2c_OLED_send_cmd(0xAF); // Set display On
291 i2c_OLED_clear_display();
296 void ug2864hsweg01InitI2C(void)
298 i2c_OLED_send_cmd(0xae); //display off
299 i2c_OLED_send_cmd(0xa4); //SET All pixels OFF
300 // i2c_OLED_send_cmd(0xa5); //SET ALL pixels ON
303 // i2c_OLED_send_cmd(0x8D); // charge pump
304 // i2c_OLED_send_cmd(0x14); // enable
305 i2c_OLED_send_cmd(0x20); //Set Memory Addressing Mode
306 i2c_OLED_send_cmd(0x02); //Set Memory Addressing Mode to Page addressing mode(RESET)
307 // i2c_OLED_send_cmd(0xa0); //colum address 0 mapped to SEG0 (POR)*** wires at bottom
308 i2c_OLED_send_cmd(0xa1); //colum address 127 mapped to SEG0 (POR) ** wires at top of board
309 // i2c_OLED_send_cmd(0xC0); // Scan from Right to Left (POR) *** wires at bottom
310 i2c_OLED_send_cmd(0xC8); // Scan from Left to Right ** wires at top
311 i2c_OLED_send_cmd(0xa6); // Set WHITE chars on BLACK backround
312 // i2c_OLED_send_cmd(0xa7); // Set BLACK chars on WHITE backround
313 i2c_OLED_send_cmd(0x81); // Setup CONTRAST CONTROL, following byte is the contrast Value
314 i2c_OLED_send_cmd(0xaf); // contrast value between 1 ( == dull) to 256 ( == bright)
315 // i2c_OLED_send_cmd(0xd3); // Display Offset :
316 // i2c_OLED_send_cmd(0x0); // 0
318 // i2c_OLED_send_cmd(0x40); // Display start line [0;63] -> [0x40;0x7f]
320 #ifdef DISPLAY_FONT_DSIZE
321 i2c_OLED_send_cmd(0xd6); // zoom
322 i2c_OLED_send_cmd(0x01);// on
324 // i2c_OLED_send_cmd(0xd6); // zoom
325 // i2c_OLED_send_cmd(0x00); // off
328 i2c_OLED_send_cmd(0xaf); //display on
330 i2c_OLED_clear_display();