derived from Aidafruit SSD1306 library

Dependents:   Test_SSD1306 L152RE_OLED_SSD1306 EcranZumo

Fork of SSD1306 by Jonathan Gaul

Committer:
masato
Date:
Sun May 04 14:29:51 2014 +0000
Revision:
4:ec5add86f335
Parent:
3:1d9df877c90a
derived from Aidafruit SSD1306 library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Byrn 0:21cb91208386 1
Byrn 0:21cb91208386 2 #include "mbed.h"
Byrn 0:21cb91208386 3 #include "ssd1306.h"
Byrn 0:21cb91208386 4
Byrn 3:1d9df877c90a 5 #include <stdarg.h>
Byrn 3:1d9df877c90a 6
masato 4:ec5add86f335 7 #define pgm_read_byte(addr) (*(const unsigned char *)(addr))
masato 4:ec5add86f335 8
Byrn 0:21cb91208386 9 SSD1306::SSD1306(PinName cs, PinName rs, PinName dc, PinName clk, PinName data)
Byrn 1:1d58d378221c 10 : _spi(data, NC, clk),
Byrn 1:1d58d378221c 11 _cs(cs),
Byrn 1:1d58d378221c 12 _reset(rs),
Byrn 3:1d9df877c90a 13 _dc(dc),
Byrn 3:1d9df877c90a 14 _cursor_x(0),
Byrn 3:1d9df877c90a 15 _cursor_y(0)
Byrn 0:21cb91208386 16 {
Byrn 0:21cb91208386 17 }
Byrn 0:21cb91208386 18
Byrn 0:21cb91208386 19 void SSD1306::off()
Byrn 0:21cb91208386 20 {
Byrn 2:e479b0296757 21 _send_command(0xAE);
Byrn 0:21cb91208386 22 }
Byrn 0:21cb91208386 23
Byrn 0:21cb91208386 24 void SSD1306::on()
Byrn 0:21cb91208386 25 {
Byrn 2:e479b0296757 26 _send_command(0xAF);
Byrn 0:21cb91208386 27 }
Byrn 0:21cb91208386 28
Byrn 1:1d58d378221c 29 void SSD1306::sleep()
Byrn 1:1d58d378221c 30 {
Byrn 1:1d58d378221c 31 _send_command(0xAE);
Byrn 1:1d58d378221c 32 }
Byrn 1:1d58d378221c 33
Byrn 1:1d58d378221c 34 void SSD1306::wake()
Byrn 0:21cb91208386 35 {
Byrn 1:1d58d378221c 36 _send_command(0xAF);
Byrn 1:1d58d378221c 37 }
Byrn 1:1d58d378221c 38
Byrn 1:1d58d378221c 39 void SSD1306::set_inverse(unsigned char value)
Byrn 1:1d58d378221c 40 {
Byrn 1:1d58d378221c 41 _send_command(value ? 0xA7 : 0xA6);
Byrn 1:1d58d378221c 42 }
Byrn 1:1d58d378221c 43
Byrn 1:1d58d378221c 44 void SSD1306::set_display_offset(unsigned char value)
Byrn 1:1d58d378221c 45 {
Byrn 1:1d58d378221c 46 _send_command(0xD3);
Byrn 2:e479b0296757 47 _send_command(value & 0x3F);
Byrn 0:21cb91208386 48 }
Byrn 0:21cb91208386 49
Byrn 1:1d58d378221c 50 void SSD1306::set_contrast(unsigned char value)
Byrn 1:1d58d378221c 51 {
Byrn 1:1d58d378221c 52 _send_command(0x81);
Byrn 1:1d58d378221c 53 _send_command(value);
Byrn 1:1d58d378221c 54 }
Byrn 1:1d58d378221c 55
Byrn 1:1d58d378221c 56 void SSD1306::set_display_start_line(unsigned char value)
Byrn 1:1d58d378221c 57 {
Byrn 1:1d58d378221c 58 _send_command(0x40 | value);
Byrn 1:1d58d378221c 59 }
Byrn 1:1d58d378221c 60
Byrn 2:e479b0296757 61 void SSD1306::set_segment_remap(unsigned char value)
Byrn 0:21cb91208386 62 {
Byrn 1:1d58d378221c 63 _send_command(value ? 0xA1 : 0xA0);
Byrn 1:1d58d378221c 64 }
Byrn 1:1d58d378221c 65
Byrn 1:1d58d378221c 66 void SSD1306::set_multiplex_ratio(unsigned char value)
Byrn 1:1d58d378221c 67 {
Byrn 2:e479b0296757 68 _send_command(0xA8);
Byrn 2:e479b0296757 69 _send_command(value & 0x3F);
Byrn 1:1d58d378221c 70 }
Byrn 1:1d58d378221c 71
Byrn 1:1d58d378221c 72 void SSD1306::set_com_output_scan_direction(unsigned char value)
Byrn 1:1d58d378221c 73 {
Byrn 1:1d58d378221c 74 _send_command(value ? 0xC8 : 0xC0);
Byrn 1:1d58d378221c 75 }
Byrn 1:1d58d378221c 76
Byrn 1:1d58d378221c 77 void SSD1306::set_com_pins_hardware_configuration(unsigned char sequential, unsigned char lr_remap)
Byrn 1:1d58d378221c 78 {
Byrn 1:1d58d378221c 79 _send_command(0xDA);
Byrn 2:e479b0296757 80 _send_command(0x02 | ((sequential & 1) << 4) | ((lr_remap & 1) << 5));
Byrn 2:e479b0296757 81 }
Byrn 2:e479b0296757 82
Byrn 2:e479b0296757 83 void SSD1306::start_horizontal_scroll(unsigned char direction, unsigned char start, unsigned char end, unsigned char interval)
Byrn 2:e479b0296757 84 {
Byrn 2:e479b0296757 85 _send_command(direction ? 0x27 : 0x26);
Byrn 2:e479b0296757 86 _send_command(0x00);
Byrn 2:e479b0296757 87 _send_command(start & 0x07);
Byrn 2:e479b0296757 88 switch (interval) {
Byrn 2:e479b0296757 89 case 2: _send_command(0x07); break; // 111b
Byrn 2:e479b0296757 90 case 3: _send_command(0x04); break; // 100b
Byrn 2:e479b0296757 91 case 4: _send_command(0x05); break; // 101b
Byrn 2:e479b0296757 92 case 5: _send_command(0x00); break; // 000b
Byrn 2:e479b0296757 93 case 25: _send_command(0x06); break; // 110b
Byrn 2:e479b0296757 94 case 64: _send_command(0x01); break; // 001b
Byrn 2:e479b0296757 95 case 128: _send_command(0x02); break; // 010b
Byrn 2:e479b0296757 96 case 256: _send_command(0x03); break; // 011b
Byrn 2:e479b0296757 97 default:
Byrn 2:e479b0296757 98 // default to 2 frame interval
Byrn 2:e479b0296757 99 _send_command(0x07); break;
Byrn 2:e479b0296757 100 }
Byrn 2:e479b0296757 101 _send_command(end & 0x07);
Byrn 2:e479b0296757 102 _send_command(0x00);
Byrn 2:e479b0296757 103 _send_command(0xFF);
Byrn 2:e479b0296757 104
Byrn 2:e479b0296757 105 // activate scroll
Byrn 2:e479b0296757 106 _send_command(0x2F);
Byrn 2:e479b0296757 107 }
Byrn 2:e479b0296757 108
Byrn 2:e479b0296757 109 void SSD1306::start_vertical_and_horizontal_scroll(unsigned char direction, unsigned char start, unsigned char end, unsigned char interval, unsigned char vertical_offset)
Byrn 2:e479b0296757 110 {
Byrn 2:e479b0296757 111 _send_command(direction ? 0x2A : 0x29);
Byrn 2:e479b0296757 112 _send_command(0x00);
Byrn 2:e479b0296757 113 _send_command(start & 0x07);
Byrn 2:e479b0296757 114 switch (interval) {
Byrn 2:e479b0296757 115 case 2: _send_command(0x07); break; // 111b
Byrn 2:e479b0296757 116 case 3: _send_command(0x04); break; // 100b
Byrn 2:e479b0296757 117 case 4: _send_command(0x05); break; // 101b
Byrn 2:e479b0296757 118 case 5: _send_command(0x00); break; // 000b
Byrn 2:e479b0296757 119 case 25: _send_command(0x06); break; // 110b
Byrn 2:e479b0296757 120 case 64: _send_command(0x01); break; // 001b
Byrn 2:e479b0296757 121 case 128: _send_command(0x02); break; // 010b
Byrn 2:e479b0296757 122 case 256: _send_command(0x03); break; // 011b
Byrn 2:e479b0296757 123 default:
Byrn 2:e479b0296757 124 // default to 2 frame interval
Byrn 2:e479b0296757 125 _send_command(0x07); break;
Byrn 2:e479b0296757 126 }
Byrn 2:e479b0296757 127 _send_command(end & 0x07);
Byrn 2:e479b0296757 128 _send_command(vertical_offset);
Byrn 2:e479b0296757 129
Byrn 2:e479b0296757 130 // activate scroll
Byrn 2:e479b0296757 131 _send_command(0x2F);
Byrn 2:e479b0296757 132 }
Byrn 2:e479b0296757 133
Byrn 2:e479b0296757 134 void SSD1306::stop_scroll()
Byrn 2:e479b0296757 135 {
Byrn 2:e479b0296757 136 // all scroll configurations are removed from the display when executing this command.
Byrn 2:e479b0296757 137 _send_command(0x2E);
Byrn 2:e479b0296757 138 }
Byrn 2:e479b0296757 139
Byrn 2:e479b0296757 140 void SSD1306::pam_set_start_address(unsigned char address)
Byrn 2:e479b0296757 141 {
Byrn 2:e479b0296757 142 // "Set Lower Column Start Address for Page Addressing Mode"
Byrn 2:e479b0296757 143 _send_command(address & 0x0F);
Byrn 2:e479b0296757 144
Byrn 2:e479b0296757 145 // "Set Higher Column Start Address for Page Addressing Mode"
Byrn 2:e479b0296757 146 _send_command((address << 4) & 0x0F);
Byrn 2:e479b0296757 147 }
Byrn 2:e479b0296757 148
Byrn 2:e479b0296757 149 void SSD1306::set_memory_addressing_mode(unsigned char mode)
Byrn 2:e479b0296757 150 {
Byrn 2:e479b0296757 151 _send_command(0x20);
Byrn 2:e479b0296757 152 _send_command(mode & 0x3);
Byrn 2:e479b0296757 153 }
Byrn 2:e479b0296757 154
Byrn 2:e479b0296757 155 void SSD1306::hv_set_column_address(unsigned char start, unsigned char end)
Byrn 2:e479b0296757 156 {
Byrn 2:e479b0296757 157 _send_command(0x21);
Byrn 2:e479b0296757 158 _send_command(start & 0x7F);
Byrn 2:e479b0296757 159 _send_command(end & 0x7F);
Byrn 2:e479b0296757 160 }
Byrn 2:e479b0296757 161
Byrn 2:e479b0296757 162 void SSD1306::hv_set_page_address(unsigned char start, unsigned char end)
Byrn 2:e479b0296757 163 {
Byrn 2:e479b0296757 164 _send_command(0x22);
Byrn 2:e479b0296757 165 _send_command(start & 0x07);
Byrn 2:e479b0296757 166 _send_command(end & 0x07);
Byrn 2:e479b0296757 167 }
Byrn 2:e479b0296757 168
Byrn 2:e479b0296757 169 void SSD1306::pam_set_page_start(unsigned char address)
Byrn 2:e479b0296757 170 {
Byrn 2:e479b0296757 171 _send_command(0xB0 | (address & 0x07));
Byrn 2:e479b0296757 172 }
Byrn 2:e479b0296757 173
Byrn 2:e479b0296757 174 void SSD1306::set_display_clock_ratio_and_frequency(unsigned char ratio, unsigned char frequency)
Byrn 2:e479b0296757 175 {
Byrn 2:e479b0296757 176 _send_command(0xD5);
Byrn 2:e479b0296757 177 _send_command((ratio & 0x0F) | ((frequency & 0x0F) << 4));
Byrn 2:e479b0296757 178 }
Byrn 2:e479b0296757 179
Byrn 2:e479b0296757 180 void SSD1306::set_precharge_period(unsigned char phase1, unsigned char phase2)
Byrn 2:e479b0296757 181 {
Byrn 2:e479b0296757 182 _send_command(0xD9);
Byrn 2:e479b0296757 183 _send_command((phase1 & 0x0F) | ((phase2 & 0x0F ) << 4));
Byrn 2:e479b0296757 184 }
Byrn 2:e479b0296757 185
Byrn 2:e479b0296757 186 void SSD1306::set_vcomh_deselect_level(unsigned char level)
Byrn 2:e479b0296757 187 {
Byrn 2:e479b0296757 188 _send_command(0xDB);
Byrn 2:e479b0296757 189 _send_command((level & 0x03) << 4);
Byrn 2:e479b0296757 190 }
Byrn 2:e479b0296757 191
Byrn 2:e479b0296757 192 void SSD1306::nop()
Byrn 2:e479b0296757 193 {
Byrn 2:e479b0296757 194 _send_command(0xE3);
Byrn 2:e479b0296757 195 }
Byrn 2:e479b0296757 196
Byrn 2:e479b0296757 197 void SSD1306::set_charge_pump_enable(unsigned char enable)
Byrn 2:e479b0296757 198 {
Byrn 2:e479b0296757 199 _send_command(0x8D);
Byrn 2:e479b0296757 200 _send_command(enable ? 0x14 : 0x10);
Byrn 0:21cb91208386 201 }
Byrn 0:21cb91208386 202
Byrn 0:21cb91208386 203 void SSD1306::initialise()
Byrn 0:21cb91208386 204 {
Byrn 1:1d58d378221c 205 // Init
Byrn 0:21cb91208386 206 _reset = 1;
Byrn 0:21cb91208386 207 wait(0.01);
Byrn 0:21cb91208386 208 _reset = 0;
Byrn 0:21cb91208386 209 wait(0.10);
Byrn 0:21cb91208386 210 _reset = 1;
Byrn 0:21cb91208386 211
Byrn 0:21cb91208386 212 off();
Byrn 2:e479b0296757 213
Byrn 2:e479b0296757 214 set_display_clock_ratio_and_frequency(0, 8);
Byrn 2:e479b0296757 215 set_multiplex_ratio(0x3F); // 1/64 duty
Byrn 2:e479b0296757 216 set_precharge_period(0xF, 0x01);
Byrn 2:e479b0296757 217 set_display_offset(0);
Byrn 2:e479b0296757 218 set_display_start_line(0);
Byrn 2:e479b0296757 219 set_charge_pump_enable(1);
Byrn 3:1d9df877c90a 220 set_memory_addressing_mode(0); // horizontal addressing mode; across then down
Byrn 2:e479b0296757 221 set_segment_remap(1);
Byrn 2:e479b0296757 222 set_com_output_scan_direction(1);
Byrn 2:e479b0296757 223 set_com_pins_hardware_configuration(1, 0);
Byrn 1:1d58d378221c 224 set_contrast(0xFF);
Byrn 2:e479b0296757 225 set_vcomh_deselect_level(1);
Byrn 1:1d58d378221c 226
Byrn 2:e479b0296757 227 wake();
Byrn 2:e479b0296757 228 set_inverse(0);
Byrn 0:21cb91208386 229
Byrn 2:e479b0296757 230 hv_set_column_address(0, 127);
Byrn 2:e479b0296757 231 hv_set_page_address(0, 7);
Byrn 0:21cb91208386 232
Byrn 2:e479b0296757 233 pam_set_start_address(0);
Byrn 2:e479b0296757 234 pam_set_page_start(0);
Byrn 2:e479b0296757 235
Byrn 2:e479b0296757 236 // set_precharge_period(2, 2);
Byrn 0:21cb91208386 237 }
Byrn 0:21cb91208386 238
Byrn 0:21cb91208386 239 void SSD1306::update()
Byrn 0:21cb91208386 240 {
Byrn 2:e479b0296757 241 hv_set_column_address(0, 127);
Byrn 2:e479b0296757 242 hv_set_page_address(0, 7);
Byrn 0:21cb91208386 243
Byrn 0:21cb91208386 244 for (int i = 0; i < 1024; i++)
Byrn 0:21cb91208386 245 _send_data(_screen[i]);
Byrn 0:21cb91208386 246 }
Byrn 0:21cb91208386 247
masato 4:ec5add86f335 248 void SSD1306::drawBitmap(int x, int y,
masato 4:ec5add86f335 249 const unsigned char *bitmap, int w, int h, int color) {
masato 4:ec5add86f335 250 int16_t i, j, byteWidth = (w + 7) / 8;
masato 4:ec5add86f335 251
masato 4:ec5add86f335 252 for(j=0; j<h; j++) {
masato 4:ec5add86f335 253 for(i=0; i<w; i++ ) {
masato 4:ec5add86f335 254 if(pgm_read_byte(bitmap + j * byteWidth + i / 8) & (128 >> (i & 7))) {
masato 4:ec5add86f335 255 color? set_pixel(x+i, y+j): clear_pixel(x+i, y+j);
masato 4:ec5add86f335 256 }
masato 4:ec5add86f335 257 }
masato 4:ec5add86f335 258 }
masato 4:ec5add86f335 259 }
masato 4:ec5add86f335 260
Byrn 0:21cb91208386 261 void SSD1306::set_pixel(int x, int y)
Byrn 0:21cb91208386 262 {
Byrn 0:21cb91208386 263 if (x >= SSD1306_LCDWIDTH || y >= SSD1306_LCDHEIGHT) return;
Byrn 0:21cb91208386 264
Byrn 0:21cb91208386 265 _screen[x + (y / 8) * 128] |= 1 << (y % 8);
Byrn 0:21cb91208386 266 }
Byrn 0:21cb91208386 267
Byrn 0:21cb91208386 268 void SSD1306::clear_pixel(int x, int y)
Byrn 0:21cb91208386 269 {
Byrn 0:21cb91208386 270 if (x >= SSD1306_LCDWIDTH || y >= SSD1306_LCDHEIGHT) return;
Byrn 0:21cb91208386 271
Byrn 0:21cb91208386 272 _screen[x + (y / 8) * 128] &= ~(1 << (y % 8));
Byrn 0:21cb91208386 273 }
Byrn 0:21cb91208386 274
Byrn 0:21cb91208386 275 void SSD1306::line(int x0, int y0, int x1, int y1) {
Byrn 0:21cb91208386 276 int steep = abs(y1 - y0) > abs(x1 - x0);
Byrn 0:21cb91208386 277 int t;
Byrn 0:21cb91208386 278
Byrn 0:21cb91208386 279 if (steep) {
Byrn 0:21cb91208386 280 t = x0; x0 = y0; y0 = t;
Byrn 0:21cb91208386 281 t = x1; x1 = y1; y1 = t;
Byrn 0:21cb91208386 282 }
Byrn 0:21cb91208386 283
Byrn 0:21cb91208386 284 if (x0 > x1) {
Byrn 0:21cb91208386 285 t = x0; x0 = x1; x1 = t;
Byrn 0:21cb91208386 286 t = y0; y0 = y1; y1 = t;
Byrn 0:21cb91208386 287 }
Byrn 0:21cb91208386 288
Byrn 0:21cb91208386 289 int dx, dy;
Byrn 0:21cb91208386 290
Byrn 0:21cb91208386 291 dx = x1 - x0;
Byrn 0:21cb91208386 292 dy = abs(y1 - y0);
Byrn 0:21cb91208386 293
Byrn 0:21cb91208386 294 int err = dx / 2;
Byrn 0:21cb91208386 295 int ystep;
Byrn 0:21cb91208386 296
Byrn 0:21cb91208386 297 if (y0 < y1) {
Byrn 0:21cb91208386 298 ystep = 1;
Byrn 0:21cb91208386 299 } else {
Byrn 0:21cb91208386 300 ystep = -1;}
Byrn 0:21cb91208386 301
Byrn 0:21cb91208386 302 for (; x0<x1; x0++) {
Byrn 0:21cb91208386 303 if (steep) {
Byrn 0:21cb91208386 304 set_pixel(y0, x0);
Byrn 0:21cb91208386 305 } else {
Byrn 0:21cb91208386 306 set_pixel(x0, y0);
Byrn 0:21cb91208386 307 }
Byrn 0:21cb91208386 308 err -= dy;
Byrn 0:21cb91208386 309 if (err < 0) {
Byrn 0:21cb91208386 310 y0 += ystep;
Byrn 0:21cb91208386 311 err += dx;
Byrn 0:21cb91208386 312 }
Byrn 0:21cb91208386 313 }
Byrn 0:21cb91208386 314 }
Byrn 0:21cb91208386 315
Byrn 3:1d9df877c90a 316 void SSD1306::set_font(unsigned char *font, unsigned int width)
Byrn 0:21cb91208386 317 {
Byrn 3:1d9df877c90a 318 _console_font_data = font;
Byrn 3:1d9df877c90a 319 _console_font_width = width;
Byrn 3:1d9df877c90a 320 }
Byrn 3:1d9df877c90a 321
Byrn 3:1d9df877c90a 322 void SSD1306::set_double_height_text(unsigned int double_height)
Byrn 3:1d9df877c90a 323 {
Byrn 3:1d9df877c90a 324 _double_height_text = double_height;
Byrn 0:21cb91208386 325 }
Byrn 0:21cb91208386 326
Byrn 3:1d9df877c90a 327 void SSD1306::putc(unsigned char c)
Byrn 0:21cb91208386 328 {
Byrn 3:1d9df877c90a 329 while (_cursor_x >= (128 / _console_font_width))
Byrn 3:1d9df877c90a 330 {
Byrn 3:1d9df877c90a 331 _cursor_x -= (128 / _console_font_width);
Byrn 3:1d9df877c90a 332 _cursor_y++;
Byrn 3:1d9df877c90a 333 }
Byrn 3:1d9df877c90a 334
Byrn 3:1d9df877c90a 335 while (_cursor_y > 7)
Byrn 3:1d9df877c90a 336 {
Byrn 3:1d9df877c90a 337 scroll_up();
Byrn 3:1d9df877c90a 338 }
Byrn 3:1d9df877c90a 339
Byrn 3:1d9df877c90a 340 switch (c)
Byrn 3:1d9df877c90a 341 {
Byrn 3:1d9df877c90a 342 case '\n':
Byrn 3:1d9df877c90a 343 _cursor_y++;
Byrn 3:1d9df877c90a 344 break;
Byrn 3:1d9df877c90a 345
Byrn 3:1d9df877c90a 346 case '\r':
Byrn 3:1d9df877c90a 347 _cursor_x = 0;
Byrn 3:1d9df877c90a 348 break;
Byrn 3:1d9df877c90a 349
Byrn 3:1d9df877c90a 350 case '\t':
Byrn 3:1d9df877c90a 351 _cursor_x = (_cursor_x + 4) % 4;
Byrn 3:1d9df877c90a 352 break;
Byrn 3:1d9df877c90a 353
Byrn 3:1d9df877c90a 354 default:
Byrn 3:1d9df877c90a 355 for (int b = 0; b < _console_font_width; b++)
Byrn 3:1d9df877c90a 356 {
Byrn 3:1d9df877c90a 357 _screen[_cursor_x * _console_font_width + _cursor_y * 128 + b] = _console_font_data[(c - FONT_START) * _console_font_width + b];
Byrn 3:1d9df877c90a 358 }
Byrn 3:1d9df877c90a 359
Byrn 3:1d9df877c90a 360 _cursor_x++;
Byrn 3:1d9df877c90a 361 }
Byrn 3:1d9df877c90a 362 }
Byrn 3:1d9df877c90a 363
Byrn 3:1d9df877c90a 364 void SSD1306::scroll_up()
Byrn 3:1d9df877c90a 365 {
Byrn 3:1d9df877c90a 366 for (int y = 1; y <= 7; y++)
Byrn 3:1d9df877c90a 367 {
Byrn 3:1d9df877c90a 368 for (int x = 0; x < 128; x++)
Byrn 3:1d9df877c90a 369 {
Byrn 3:1d9df877c90a 370 _screen[x + 128 * (y - 1)] = _screen[x + 128 * y];
Byrn 3:1d9df877c90a 371 }
Byrn 3:1d9df877c90a 372 }
Byrn 0:21cb91208386 373
Byrn 3:1d9df877c90a 374 for (int x = 0; x < 128; x++)
Byrn 3:1d9df877c90a 375 {
Byrn 3:1d9df877c90a 376 _screen[x + 128 * 7] = 0;
Byrn 3:1d9df877c90a 377 }
Byrn 3:1d9df877c90a 378
Byrn 3:1d9df877c90a 379 _cursor_y--;
Byrn 3:1d9df877c90a 380 }
Byrn 3:1d9df877c90a 381
Byrn 3:1d9df877c90a 382 void SSD1306::printf(const char *format, ...)
Byrn 3:1d9df877c90a 383 {
Byrn 3:1d9df877c90a 384 static char buffer[128];
Byrn 3:1d9df877c90a 385
Byrn 3:1d9df877c90a 386 va_list args;
Byrn 3:1d9df877c90a 387 va_start(args, format);
Byrn 3:1d9df877c90a 388 vsprintf(buffer, format, args);
Byrn 3:1d9df877c90a 389 va_end(args);
Byrn 3:1d9df877c90a 390
Byrn 3:1d9df877c90a 391 char *c = (char *)&buffer;
Byrn 3:1d9df877c90a 392 while (*c != 0)
Byrn 3:1d9df877c90a 393 {
Byrn 3:1d9df877c90a 394 putc(*c++);
Byrn 3:1d9df877c90a 395 }
Byrn 0:21cb91208386 396 }
Byrn 0:21cb91208386 397
Byrn 0:21cb91208386 398 void SSD1306::clear()
Byrn 0:21cb91208386 399 {
Byrn 0:21cb91208386 400 for (int i = 0; i < 1024; i++)
Byrn 0:21cb91208386 401 _screen[i] = 0;
Byrn 3:1d9df877c90a 402
Byrn 3:1d9df877c90a 403 _cursor_x = 0;
Byrn 3:1d9df877c90a 404 _cursor_y = 0;
Byrn 0:21cb91208386 405 }
Byrn 0:21cb91208386 406
Byrn 1:1d58d378221c 407 void SSD1306::_send_command(unsigned char code)
Byrn 0:21cb91208386 408 {
Byrn 0:21cb91208386 409 _cs = 1;
Byrn 0:21cb91208386 410 _dc = 0;
Byrn 0:21cb91208386 411 _cs = 0;
Byrn 0:21cb91208386 412 _spi.write(code);
Byrn 0:21cb91208386 413 _cs = 1;
Byrn 0:21cb91208386 414 }
Byrn 0:21cb91208386 415
Byrn 1:1d58d378221c 416 void SSD1306::_send_data(unsigned char value)
Byrn 0:21cb91208386 417 {
Byrn 0:21cb91208386 418 _cs = 1;
Byrn 0:21cb91208386 419 _dc = 1;
Byrn 0:21cb91208386 420 _cs = 0;
Byrn 0:21cb91208386 421 _spi.write(value);
Byrn 0:21cb91208386 422 _cs = 1;
Byrn 0:21cb91208386 423 }