yup

Committer:
peterswanson87
Date:
Tue Nov 18 18:48:49 2014 +0000
Revision:
0:c16f38158e0e
project is compiling with LIS3DH test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
peterswanson87 0:c16f38158e0e 1 /*********************************************************************
peterswanson87 0:c16f38158e0e 2 This is a library for our Monochrome OLEDs based on SSD1306 drivers
peterswanson87 0:c16f38158e0e 3
peterswanson87 0:c16f38158e0e 4 Pick one up today in the adafruit shop!
peterswanson87 0:c16f38158e0e 5 ------> http://www.adafruit.com/category/63_98
peterswanson87 0:c16f38158e0e 6
peterswanson87 0:c16f38158e0e 7 These displays use SPI to communicate, 4 or 5 pins are required to
peterswanson87 0:c16f38158e0e 8 interface
peterswanson87 0:c16f38158e0e 9
peterswanson87 0:c16f38158e0e 10 Adafruit invests time and resources providing this open source code,
peterswanson87 0:c16f38158e0e 11 please support Adafruit and open-source hardware by purchasing
peterswanson87 0:c16f38158e0e 12 products from Adafruit!
peterswanson87 0:c16f38158e0e 13
peterswanson87 0:c16f38158e0e 14 Written by Limor Fried/Ladyada for Adafruit Industries.
peterswanson87 0:c16f38158e0e 15 BSD license, check license.txt for more information
peterswanson87 0:c16f38158e0e 16 All text above, and the splash screen below must be included in any redistribution
peterswanson87 0:c16f38158e0e 17 *********************************************************************/
peterswanson87 0:c16f38158e0e 18
peterswanson87 0:c16f38158e0e 19 /*
peterswanson87 0:c16f38158e0e 20 * Modified by Neal Horman 7/14/2012 for use in LPC1768
peterswanson87 0:c16f38158e0e 21 */
peterswanson87 0:c16f38158e0e 22
peterswanson87 0:c16f38158e0e 23 #include "mbed.h"
peterswanson87 0:c16f38158e0e 24 #include "Adafruit_SSD1306.h"
peterswanson87 0:c16f38158e0e 25
peterswanson87 0:c16f38158e0e 26 uint8_t splashScreen[SSD1306_LCDHEIGHT * SSD1306_LCDWIDTH / 8] = {
peterswanson87 0:c16f38158e0e 27 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
peterswanson87 0:c16f38158e0e 28 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
peterswanson87 0:c16f38158e0e 29 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
peterswanson87 0:c16f38158e0e 30 0x70, 0xFC, 0xFE, 0xFC, 0xF1, 0x07, 0xFF, 0xFF, 0xFE, 0xFC, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00,
peterswanson87 0:c16f38158e0e 31 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0xF0,
peterswanson87 0:c16f38158e0e 32 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
peterswanson87 0:c16f38158e0e 33 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
peterswanson87 0:c16f38158e0e 34 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
peterswanson87 0:c16f38158e0e 35 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
peterswanson87 0:c16f38158e0e 36 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
peterswanson87 0:c16f38158e0e 37 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFE, 0xFF, 0xFE, 0xF8, 0xF0,
peterswanson87 0:c16f38158e0e 38 0xF0, 0xE1, 0xE3, 0x47, 0x47, 0x00, 0x07, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x7C, 0xFE, 0xFF,
peterswanson87 0:c16f38158e0e 39 0xFF, 0xFF, 0xE7, 0xC3, 0x83, 0x83, 0x83, 0x03, 0x03, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF,
peterswanson87 0:c16f38158e0e 40 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xE0, 0xE0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xE0, 0xC0, 0x00, 0x00,
peterswanson87 0:c16f38158e0e 41 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xE0, 0xE0, 0xE0, 0x70, 0x70, 0x70, 0xE0, 0xE0, 0xE0, 0xC0,
peterswanson87 0:c16f38158e0e 42 0xC0, 0x80, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0,
peterswanson87 0:c16f38158e0e 43 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
peterswanson87 0:c16f38158e0e 44 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
peterswanson87 0:c16f38158e0e 45 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0xFF, 0x7F, 0x7F, 0x3F, 0x1F, 0x1F, 0x0F, 0x87, 0x87, 0xC3,
peterswanson87 0:c16f38158e0e 46 0xC1, 0xE1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
peterswanson87 0:c16f38158e0e 47 0x03, 0x07, 0x07, 0x0F, 0x0F, 0x0F, 0x1F, 0xFF, 0xFF, 0xFE, 0xFC, 0xF0, 0x00, 0x00, 0x00, 0xFF,
peterswanson87 0:c16f38158e0e 48 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
peterswanson87 0:c16f38158e0e 49 0x00, 0x00, 0x7C, 0xFF, 0xFF, 0xFF, 0xFF, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xFF, 0xFF,
peterswanson87 0:c16f38158e0e 50 0xFF, 0xFF, 0x7C, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
peterswanson87 0:c16f38158e0e 51 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
peterswanson87 0:c16f38158e0e 52 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xE0, 0xF0, 0xF8, 0x78, 0x3C, 0x3E, 0x1F, 0x1F, 0x0F,
peterswanson87 0:c16f38158e0e 53 0x8F, 0x87, 0x03, 0x03, 0x01, 0x00, 0x00, 0xF8, 0xF8, 0xFC, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
peterswanson87 0:c16f38158e0e 54 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x0F, 0x1F,
peterswanson87 0:c16f38158e0e 55 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1F, 0x0F, 0x0F, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x1F,
peterswanson87 0:c16f38158e0e 56 0x1F, 0x1F, 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00,
peterswanson87 0:c16f38158e0e 57 0x00, 0x00, 0x00, 0x01, 0x07, 0x07, 0x0F, 0x0F, 0x1F, 0x1E, 0x1E, 0x1E, 0x1F, 0x0F, 0x0F, 0x07,
peterswanson87 0:c16f38158e0e 58 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0F, 0x0F, 0x1F, 0x1F, 0x1E, 0x1E, 0x1E, 0x1E,
peterswanson87 0:c16f38158e0e 59 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0, 0xC0, 0x60, 0x70, 0x30, 0x38, 0x18, 0x1C,
peterswanson87 0:c16f38158e0e 60 0x0E, 0x8E, 0x07, 0x07, 0x03, 0x03, 0x01, 0xF1, 0xF0, 0xF8, 0xF8, 0xFC, 0xFC, 0xFE, 0xFF, 0xFF,
peterswanson87 0:c16f38158e0e 61 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
peterswanson87 0:c16f38158e0e 62 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0,
peterswanson87 0:c16f38158e0e 63 0xE0, 0x60, 0x30, 0x30, 0x30, 0x30, 0x30, 0x70, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0,
peterswanson87 0:c16f38158e0e 64 0xC0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
peterswanson87 0:c16f38158e0e 65 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xE0, 0x00, 0x00, 0x00,
peterswanson87 0:c16f38158e0e 66 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
peterswanson87 0:c16f38158e0e 67 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0xF0, 0xF8, 0xF8, 0xF8, 0xFC, 0xFC, 0xFE, 0xFE, 0xFF,
peterswanson87 0:c16f38158e0e 68 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
peterswanson87 0:c16f38158e0e 69 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
peterswanson87 0:c16f38158e0e 70 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x3F, 0x7F,
peterswanson87 0:c16f38158e0e 71 0x78, 0xF0, 0xE0, 0xC0, 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0xFF,
peterswanson87 0:c16f38158e0e 72 0xFF, 0xFF, 0x0C, 0x0C, 0x0C, 0x0C, 0x00, 0x00, 0x00, 0x28, 0x18, 0x18, 0x0C, 0x0C, 0x0C, 0x0C,
peterswanson87 0:c16f38158e0e 73 0x18, 0x38, 0xF8, 0xF0, 0xC0, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0xFF, 0xFF, 0xFF, 0x0C, 0x0C, 0x0C,
peterswanson87 0:c16f38158e0e 74 0x0C, 0x00, 0x00, 0x00, 0xE0, 0xF0, 0xF8, 0x1C, 0x0C, 0x0C, 0x0C, 0x1C, 0x18, 0x00, 0x00, 0x00,
peterswanson87 0:c16f38158e0e 75 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x1F, 0x1F, 0x3F, 0x3F, 0x3F, 0x3F, 0x7F,
peterswanson87 0:c16f38158e0e 76 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
peterswanson87 0:c16f38158e0e 77 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
peterswanson87 0:c16f38158e0e 78 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
peterswanson87 0:c16f38158e0e 79 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x87, 0xFF, 0xFE, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
peterswanson87 0:c16f38158e0e 80 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xF0, 0xF8, 0x1C, 0x0C, 0x06, 0x06, 0x06,
peterswanson87 0:c16f38158e0e 81 0x06, 0x86, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
peterswanson87 0:c16f38158e0e 82 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x07, 0x0F, 0x0E, 0x1C, 0xFC, 0xF8, 0xF0, 0x00, 0x00,
peterswanson87 0:c16f38158e0e 83 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
peterswanson87 0:c16f38158e0e 84 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x07, 0x07,
peterswanson87 0:c16f38158e0e 85 0x07, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x3F, 0x3F, 0x3F, 0x3F, 0x7F, 0x7F, 0x7F,
peterswanson87 0:c16f38158e0e 86 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x07,
peterswanson87 0:c16f38158e0e 87 0x06, 0x06, 0x06, 0x06, 0x06, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
peterswanson87 0:c16f38158e0e 88 0x03, 0x07, 0x07, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x03, 0x03, 0x07, 0x06, 0x06, 0x06, 0x03,
peterswanson87 0:c16f38158e0e 89 0x03, 0x01, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x06, 0x06,
peterswanson87 0:c16f38158e0e 90 0x06, 0x00, 0x00, 0x00, 0x03, 0x03, 0x06, 0x06, 0x06, 0x07, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00
peterswanson87 0:c16f38158e0e 91 };
peterswanson87 0:c16f38158e0e 92
peterswanson87 0:c16f38158e0e 93 Adafruit_SSD1306::Adafruit_SSD1306(SPI &spi, PinName DC, PinName RST, PinName CS)
peterswanson87 0:c16f38158e0e 94 : Adafruit_GFX(SSD1306_LCDWIDTH, SSD1306_LCDHEIGHT)
peterswanson87 0:c16f38158e0e 95 , rst(RST,false), cs(CS,true), dc(DC,false), mspi(spi)
peterswanson87 0:c16f38158e0e 96 {
peterswanson87 0:c16f38158e0e 97 memcpy(buffer,splashScreen,sizeof(buffer));
peterswanson87 0:c16f38158e0e 98 begin();
peterswanson87 0:c16f38158e0e 99 };
peterswanson87 0:c16f38158e0e 100
peterswanson87 0:c16f38158e0e 101 void Adafruit_SSD1306::begin(uint8_t vccstate)
peterswanson87 0:c16f38158e0e 102 {
peterswanson87 0:c16f38158e0e 103 rst = 1;
peterswanson87 0:c16f38158e0e 104 // VDD (3.3V) goes high at start, lets just chill for a ms
peterswanson87 0:c16f38158e0e 105 wait_ms(1);
peterswanson87 0:c16f38158e0e 106 // bring reset low
peterswanson87 0:c16f38158e0e 107 rst = 0;
peterswanson87 0:c16f38158e0e 108 // wait 10ms
peterswanson87 0:c16f38158e0e 109 wait_ms(10);
peterswanson87 0:c16f38158e0e 110 // bring out of reset
peterswanson87 0:c16f38158e0e 111 rst = 1;
peterswanson87 0:c16f38158e0e 112 // turn on VCC (9V?)
peterswanson87 0:c16f38158e0e 113
peterswanson87 0:c16f38158e0e 114 #if defined SSD1306_128_32
peterswanson87 0:c16f38158e0e 115 // Init sequence for 128x32 OLED module
peterswanson87 0:c16f38158e0e 116 ssd1306_command(SSD1306_DISPLAYOFF); // 0xAE
peterswanson87 0:c16f38158e0e 117 ssd1306_command(SSD1306_SETDISPLAYCLOCKDIV); // 0xD5
peterswanson87 0:c16f38158e0e 118 ssd1306_command(0x80); // the suggested ratio 0x80
peterswanson87 0:c16f38158e0e 119 ssd1306_command(SSD1306_SETMULTIPLEX); // 0xA8
peterswanson87 0:c16f38158e0e 120 ssd1306_command(0x1F);
peterswanson87 0:c16f38158e0e 121 ssd1306_command(SSD1306_SETDISPLAYOFFSET); // 0xD3
peterswanson87 0:c16f38158e0e 122 ssd1306_command(0x0); // no offset
peterswanson87 0:c16f38158e0e 123 ssd1306_command(SSD1306_SETSTARTLINE | 0x0); // line #0
peterswanson87 0:c16f38158e0e 124 ssd1306_command(SSD1306_CHARGEPUMP); // 0x8D
peterswanson87 0:c16f38158e0e 125 if (vccstate == SSD1306_EXTERNALVCC)
peterswanson87 0:c16f38158e0e 126 { ssd1306_command(0x10); }
peterswanson87 0:c16f38158e0e 127 else
peterswanson87 0:c16f38158e0e 128 { ssd1306_command(0x14); }
peterswanson87 0:c16f38158e0e 129 ssd1306_command(SSD1306_MEMORYMODE); // 0x20
peterswanson87 0:c16f38158e0e 130 ssd1306_command(0x00); // 0x0 act like ks0108
peterswanson87 0:c16f38158e0e 131 ssd1306_command(SSD1306_SEGREMAP | 0x1);
peterswanson87 0:c16f38158e0e 132 ssd1306_command(SSD1306_COMSCANDEC);
peterswanson87 0:c16f38158e0e 133 ssd1306_command(SSD1306_SETCOMPINS); // 0xDA
peterswanson87 0:c16f38158e0e 134 ssd1306_command(0x02);
peterswanson87 0:c16f38158e0e 135 ssd1306_command(SSD1306_SETCONTRAST); // 0x81
peterswanson87 0:c16f38158e0e 136 ssd1306_command(0x8F);
peterswanson87 0:c16f38158e0e 137 ssd1306_command(SSD1306_SETPRECHARGE); // 0xd9
peterswanson87 0:c16f38158e0e 138 if (vccstate == SSD1306_EXTERNALVCC)
peterswanson87 0:c16f38158e0e 139 { ssd1306_command(0x22); }
peterswanson87 0:c16f38158e0e 140 else
peterswanson87 0:c16f38158e0e 141 { ssd1306_command(0xF1); }
peterswanson87 0:c16f38158e0e 142 ssd1306_command(SSD1306_SETVCOMDETECT); // 0xDB
peterswanson87 0:c16f38158e0e 143 ssd1306_command(0x40);
peterswanson87 0:c16f38158e0e 144 ssd1306_command(SSD1306_DISPLAYALLON_RESUME); // 0xA4
peterswanson87 0:c16f38158e0e 145 ssd1306_command(SSD1306_NORMALDISPLAY); // 0xA6
peterswanson87 0:c16f38158e0e 146 #endif
peterswanson87 0:c16f38158e0e 147
peterswanson87 0:c16f38158e0e 148 #if defined SSD1306_128_64
peterswanson87 0:c16f38158e0e 149 // Init sequence for 128x64 OLED module
peterswanson87 0:c16f38158e0e 150 ssd1306_command(SSD1306_DISPLAYOFF); // 0xAE
peterswanson87 0:c16f38158e0e 151 ssd1306_command(SSD1306_SETDISPLAYCLOCKDIV); // 0xD5
peterswanson87 0:c16f38158e0e 152 ssd1306_command(0x80); // the suggested ratio 0x80
peterswanson87 0:c16f38158e0e 153 ssd1306_command(SSD1306_SETMULTIPLEX); // 0xA8
peterswanson87 0:c16f38158e0e 154 ssd1306_command(0x3F);
peterswanson87 0:c16f38158e0e 155 ssd1306_command(SSD1306_SETDISPLAYOFFSET); // 0xD3
peterswanson87 0:c16f38158e0e 156 ssd1306_command(0x0); // no offset
peterswanson87 0:c16f38158e0e 157 ssd1306_command(SSD1306_SETSTARTLINE | 0x0); // line #0
peterswanson87 0:c16f38158e0e 158 ssd1306_command(SSD1306_CHARGEPUMP); // 0x8D
peterswanson87 0:c16f38158e0e 159 if (vccstate == SSD1306_EXTERNALVCC)
peterswanson87 0:c16f38158e0e 160 { ssd1306_command(0x10); }
peterswanson87 0:c16f38158e0e 161 else
peterswanson87 0:c16f38158e0e 162 { ssd1306_command(0x14); }
peterswanson87 0:c16f38158e0e 163 ssd1306_command(SSD1306_MEMORYMODE); // 0x20
peterswanson87 0:c16f38158e0e 164 ssd1306_command(0x00); // 0x0 act like ks0108
peterswanson87 0:c16f38158e0e 165 ssd1306_command(SSD1306_SEGREMAP | 0x1);
peterswanson87 0:c16f38158e0e 166 ssd1306_command(SSD1306_COMSCANDEC);
peterswanson87 0:c16f38158e0e 167 ssd1306_command(SSD1306_SETCOMPINS); // 0xDA
peterswanson87 0:c16f38158e0e 168 ssd1306_command(0x12);
peterswanson87 0:c16f38158e0e 169 ssd1306_command(SSD1306_SETCONTRAST); // 0x81
peterswanson87 0:c16f38158e0e 170 if (vccstate == SSD1306_EXTERNALVCC)
peterswanson87 0:c16f38158e0e 171 { ssd1306_command(0x9F); } // Originally 0x9F
peterswanson87 0:c16f38158e0e 172 else
peterswanson87 0:c16f38158e0e 173 { ssd1306_command(0xCF); } // Originally 0xCF
peterswanson87 0:c16f38158e0e 174 ssd1306_command(SSD1306_SETPRECHARGE); // 0xd9
peterswanson87 0:c16f38158e0e 175 if (vccstate == SSD1306_EXTERNALVCC)
peterswanson87 0:c16f38158e0e 176 { ssd1306_command(0x22); }
peterswanson87 0:c16f38158e0e 177 else
peterswanson87 0:c16f38158e0e 178 { ssd1306_command(0xF1); }
peterswanson87 0:c16f38158e0e 179 ssd1306_command(SSD1306_SETVCOMDETECT); // 0xDB
peterswanson87 0:c16f38158e0e 180 ssd1306_command(0x40);
peterswanson87 0:c16f38158e0e 181 ssd1306_command(SSD1306_DISPLAYALLON_RESUME); // 0xA4
peterswanson87 0:c16f38158e0e 182 ssd1306_command(SSD1306_NORMALDISPLAY); // 0xA6
peterswanson87 0:c16f38158e0e 183 #endif
peterswanson87 0:c16f38158e0e 184
peterswanson87 0:c16f38158e0e 185 ssd1306_command(SSD1306_DISPLAYON);//--turn on oled panel
peterswanson87 0:c16f38158e0e 186 }
peterswanson87 0:c16f38158e0e 187
peterswanson87 0:c16f38158e0e 188 // the most basic function, set a single pixel
peterswanson87 0:c16f38158e0e 189 void Adafruit_SSD1306::drawPixel(int16_t x, int16_t y, uint16_t color)
peterswanson87 0:c16f38158e0e 190 {
peterswanson87 0:c16f38158e0e 191 if ((x < 0) || (x >= width()) || (y < 0) || (y >= height()))
peterswanson87 0:c16f38158e0e 192 return;
peterswanson87 0:c16f38158e0e 193
peterswanson87 0:c16f38158e0e 194 // check rotation, move pixel around if necessary
peterswanson87 0:c16f38158e0e 195 switch (getRotation())
peterswanson87 0:c16f38158e0e 196 {
peterswanson87 0:c16f38158e0e 197 case 1:
peterswanson87 0:c16f38158e0e 198 swap(x, y);
peterswanson87 0:c16f38158e0e 199 x = _rawWidth - x - 1;
peterswanson87 0:c16f38158e0e 200 break;
peterswanson87 0:c16f38158e0e 201 case 2:
peterswanson87 0:c16f38158e0e 202 x = _rawWidth - x - 1;
peterswanson87 0:c16f38158e0e 203 y = _rawHeight - y - 1;
peterswanson87 0:c16f38158e0e 204 break;
peterswanson87 0:c16f38158e0e 205 case 3:
peterswanson87 0:c16f38158e0e 206 swap(x, y);
peterswanson87 0:c16f38158e0e 207 y = _rawHeight - y - 1;
peterswanson87 0:c16f38158e0e 208 break;
peterswanson87 0:c16f38158e0e 209 }
peterswanson87 0:c16f38158e0e 210
peterswanson87 0:c16f38158e0e 211 // x is which column
peterswanson87 0:c16f38158e0e 212 if (color == WHITE)
peterswanson87 0:c16f38158e0e 213 buffer[x+ (y/8)*SSD1306_LCDWIDTH] |= _BV((y%8));
peterswanson87 0:c16f38158e0e 214 else
peterswanson87 0:c16f38158e0e 215 buffer[x+ (y/8)*SSD1306_LCDWIDTH] &= ~_BV((y%8));
peterswanson87 0:c16f38158e0e 216 }
peterswanson87 0:c16f38158e0e 217
peterswanson87 0:c16f38158e0e 218 void Adafruit_SSD1306::invertDisplay(bool i)
peterswanson87 0:c16f38158e0e 219 {
peterswanson87 0:c16f38158e0e 220 if (i)
peterswanson87 0:c16f38158e0e 221 ssd1306_command(SSD1306_INVERTDISPLAY);
peterswanson87 0:c16f38158e0e 222 else
peterswanson87 0:c16f38158e0e 223 ssd1306_command(SSD1306_NORMALDISPLAY);
peterswanson87 0:c16f38158e0e 224 }
peterswanson87 0:c16f38158e0e 225
peterswanson87 0:c16f38158e0e 226 void Adafruit_SSD1306::ssd1306_command(uint8_t c)
peterswanson87 0:c16f38158e0e 227 {
peterswanson87 0:c16f38158e0e 228 cs = 1;
peterswanson87 0:c16f38158e0e 229 dc = 0;
peterswanson87 0:c16f38158e0e 230 cs = 0;
peterswanson87 0:c16f38158e0e 231 mspi.write(c);
peterswanson87 0:c16f38158e0e 232 cs = 1;
peterswanson87 0:c16f38158e0e 233 }
peterswanson87 0:c16f38158e0e 234
peterswanson87 0:c16f38158e0e 235 void Adafruit_SSD1306::ssd1306_data(uint8_t c)
peterswanson87 0:c16f38158e0e 236 {
peterswanson87 0:c16f38158e0e 237 cs = 1;
peterswanson87 0:c16f38158e0e 238 dc = 1;
peterswanson87 0:c16f38158e0e 239 cs = 0;
peterswanson87 0:c16f38158e0e 240 mspi.write(c);
peterswanson87 0:c16f38158e0e 241 cs = 1;
peterswanson87 0:c16f38158e0e 242 }
peterswanson87 0:c16f38158e0e 243
peterswanson87 0:c16f38158e0e 244 void Adafruit_SSD1306::display(void)
peterswanson87 0:c16f38158e0e 245 {
peterswanson87 0:c16f38158e0e 246 ssd1306_command(SSD1306_SETLOWCOLUMN | 0x0); // low col = 0
peterswanson87 0:c16f38158e0e 247 ssd1306_command(SSD1306_SETHIGHCOLUMN | 0x0); // hi col = 0
peterswanson87 0:c16f38158e0e 248 ssd1306_command(SSD1306_SETSTARTLINE | 0x0); // line #0
peterswanson87 0:c16f38158e0e 249
peterswanson87 0:c16f38158e0e 250 cs = 1;
peterswanson87 0:c16f38158e0e 251 dc = 1;
peterswanson87 0:c16f38158e0e 252 cs = 0;
peterswanson87 0:c16f38158e0e 253
peterswanson87 0:c16f38158e0e 254 for (uint16_t i=0; i<(SSD1306_LCDWIDTH*SSD1306_LCDHEIGHT/8); i++)
peterswanson87 0:c16f38158e0e 255 mspi.write(buffer[i]);
peterswanson87 0:c16f38158e0e 256
peterswanson87 0:c16f38158e0e 257 // i wonder why we have to do this (check datasheet)
peterswanson87 0:c16f38158e0e 258 if (SSD1306_LCDHEIGHT == 32)
peterswanson87 0:c16f38158e0e 259 {
peterswanson87 0:c16f38158e0e 260 for (uint16_t i=0; i<(SSD1306_LCDWIDTH*SSD1306_LCDHEIGHT/8); i++)
peterswanson87 0:c16f38158e0e 261 mspi.write(0);
peterswanson87 0:c16f38158e0e 262 }
peterswanson87 0:c16f38158e0e 263
peterswanson87 0:c16f38158e0e 264 cs = 1;
peterswanson87 0:c16f38158e0e 265 }
peterswanson87 0:c16f38158e0e 266
peterswanson87 0:c16f38158e0e 267 // clear everything
peterswanson87 0:c16f38158e0e 268 void Adafruit_SSD1306::clearDisplay(void)
peterswanson87 0:c16f38158e0e 269 {
peterswanson87 0:c16f38158e0e 270 memset(buffer,0,sizeof(buffer));
peterswanson87 0:c16f38158e0e 271 }