-
-
Notifications
You must be signed in to change notification settings - Fork 345
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Re-applied support for SH1106_128_64 - 1.3" OLED display version.
- Loading branch information
1 parent
008759f
commit d2024fa
Showing
1 changed file
with
96 additions
and
0 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
diff --git a/Adafruit_SSD1306.cpp b/Adafruit_SSD1306.cpp | ||
index 570a335..40f4784 100644 | ||
--- a/Adafruit_SSD1306.cpp | ||
+++ b/Adafruit_SSD1306.cpp | ||
@@ -252,7 +252,7 @@ void Adafruit_SSD1306::begin(uint8_t vccstate, uint8_t i2caddr, bool reset) { | ||
ssd1306_command(SSD1306_SETCONTRAST); // 0x81 | ||
ssd1306_command(0x8F); | ||
|
||
-#elif defined SSD1306_128_64 | ||
+#elif defined SSD1306_128_64 || defined SH1106_128_64 | ||
ssd1306_command(SSD1306_SETCOMPINS); // 0xDA | ||
ssd1306_command(0x12); | ||
ssd1306_command(SSD1306_SETCONTRAST); // 0x81 | ||
@@ -417,6 +417,28 @@ void Adafruit_SSD1306::dim(boolean dim) { | ||
} | ||
|
||
void Adafruit_SSD1306::display(void) { | ||
+#if defined SH1106_128_64 | ||
+ for (int index = 0; index < 8; index++) { | ||
+ ssd1306_command(SH1106_SETSTARTPAGE + index); | ||
+ /* for some reason display is shifted by 2 columns | ||
+ * on 1.3" displays from ebay | ||
+ */ | ||
+ ssd1306_command(SSD1306_SETLOWCOLUMN + 2); // low column start address | ||
+ ssd1306_command(SSD1306_SETHIGHCOLUMN); // high column start address | ||
+ | ||
+ for (int pixel = 0; pixel < SSD1306_LCDWIDTH; pixel++) { | ||
+ Wire.beginTransmission(_i2caddr); | ||
+ WIRE_WRITE(0x40); | ||
+ // input buffer doesn't accept all bytes at once | ||
+ for (uint8_t x=0; x<16; x++) { | ||
+ WIRE_WRITE(buffer[index * SSD1306_LCDWIDTH + pixel]); | ||
+ ++pixel; | ||
+ } | ||
+ --pixel; | ||
+ Wire.endTransmission(); | ||
+ } | ||
+ } | ||
+#else | ||
ssd1306_command(SSD1306_COLUMNADDR); | ||
ssd1306_command(0); // Column start address (0 = reset) | ||
ssd1306_command(SSD1306_LCDWIDTH-1); // Column end address (127 = reset) | ||
@@ -482,6 +504,7 @@ void Adafruit_SSD1306::display(void) { | ||
TWBR = twbrbackup; | ||
#endif | ||
} | ||
+#endif /* defined SH1106_128_64 */ | ||
} | ||
|
||
// clear everything | ||
diff --git a/Adafruit_SSD1306.h b/Adafruit_SSD1306.h | ||
index 1162f87..4226f3e 100644 | ||
--- a/Adafruit_SSD1306.h | ||
+++ b/Adafruit_SSD1306.h | ||
@@ -69,20 +69,28 @@ All text above, and the splash screen must be included in any redistribution | ||
|
||
SSD1306_96_16 | ||
|
||
+ SH1106_128_64 - 1.3" OLED display version | ||
+ | ||
-----------------------------------------------------------------------*/ | ||
-// #define SSD1306_128_64 | ||
- #define SSD1306_128_32 | ||
+// #define SH1106_128_64 | ||
+ #define SSD1306_128_64 | ||
+// #define SSD1306_128_32 | ||
// #define SSD1306_96_16 | ||
/*=========================================================================*/ | ||
|
||
+#if defined SSD1306_128_64 && defined SH1106_128_64 | ||
+ #error "Select either SH1106 or SSD1306 display type in SSD1306.h" | ||
+#endif | ||
+ | ||
+ | ||
#if defined SSD1306_128_64 && defined SSD1306_128_32 | ||
#error "Only one SSD1306 display can be specified at once in SSD1306.h" | ||
#endif | ||
-#if !defined SSD1306_128_64 && !defined SSD1306_128_32 && !defined SSD1306_96_16 | ||
+#if !defined SSD1306_128_64 && !defined SSD1306_128_32 && !defined SSD1306_96_16 && !defined SH1106_128_64 | ||
#error "At least one SSD1306 display must be specified in SSD1306.h" | ||
#endif | ||
|
||
-#if defined SSD1306_128_64 | ||
+#if defined SSD1306_128_64 || defined SH1106_128_64 | ||
#define SSD1306_LCDWIDTH 128 | ||
#define SSD1306_LCDHEIGHT 64 | ||
#endif | ||
@@ -132,6 +140,8 @@ All text above, and the splash screen must be included in any redistribution | ||
#define SSD1306_EXTERNALVCC 0x1 | ||
#define SSD1306_SWITCHCAPVCC 0x2 | ||
|
||
+#define SH1106_SETSTARTPAGE 0xB0 | ||
+ | ||
// Scrolling #defines | ||
#define SSD1306_ACTIVATE_SCROLL 0x2F | ||
#define SSD1306_DEACTIVATE_SCROLL 0x2E |