驱动2.42吋的ssd1309的OLED屏幕

代码:官方例程

  1 /*
  2 
  3   HelloWorld.pde
  4   
  5   "Hello World!" example code.
  6   
  7   >>> Before compiling: Please remove comment from the constructor of the 
  8   >>> connected graphics display (see below).
  9   
 10   Universal 8bit Graphics Library, https://github.com/olikraus/u8glib/
 11   
 12   Copyright (c) 2012, olikraus@gmail.com
 13   All rights reserved.
 14 
 15   Redistribution and use in source and binary forms, with or without modification, 
 16   are permitted provided that the following conditions are met:
 17 
 18   * Redistributions of source code must retain the above copyright notice, this list 
 19     of conditions and the following disclaimer.
 20     
 21   * Redistributions in binary form must reproduce the above copyright notice, this 
 22     list of conditions and the following disclaimer in the documentation and/or other 
 23     materials provided with the distribution.
 24 
 25   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
 26   CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
 27   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
 28   MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
 29   DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
 30   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
 31   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
 32   NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
 33   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
 34   CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 
 35   STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
 36   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
 37   ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
 38   
 39 */
 40 
 41 
 42 #include "U8glib.h"
 43 
 44 // setup u8g object, please remove comment from one of the following constructor calls
 45 // IMPORTANT NOTE: The following list is incomplete. The complete list of supported 
 46 // devices with all constructor calls is here: https://github.com/olikraus/u8glib/wiki/device
 47 //U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9);    // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
 48 //U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9);    // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
 49 //U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9);    // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
 50 //U8GLIB_NHD27OLED_2X_GR u8g(13, 11, 10, 9);    // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
 51 //U8GLIB_NHD31OLED_BW u8g(13, 11, 10, 9);    // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
 52 //U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9);    // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
 53 //U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9);    // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
 54 //U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9);    // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
 55 //U8GLIB_DOGS102 u8g(13, 11, 10, 9, 8);        // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
 56 //U8GLIB_DOGM132 u8g(13, 11, 10, 9);        // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
 57 //U8GLIB_DOGM128 u8g(13, 11, 10, 9);        // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
 58 //U8GLIB_DOGM128_2X u8g(13, 11, 10, 9);        // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
 59 //U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
 60 //U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
 61 //U8GLIB_ST7920_128X64_1X u8g(18, 16, 17);    // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
 62 //U8GLIB_ST7920_128X64_4X u8g(18, 16, 17);    // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
 63 //U8GLIB_ST7920_192X32_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
 64 //U8GLIB_ST7920_192X32_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
 65 //U8GLIB_ST7920_192X32_1X u8g(18, 16, 17);    // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
 66 //U8GLIB_ST7920_192X32_4X u8g(18, 16, 17);    // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
 67 //U8GLIB_ST7920_192X32_1X u8g(13, 11, 10);    // SPI Com: SCK = en = 13, MOSI = rw = 11, CS = di = 10
 68 //U8GLIB_ST7920_192X32_4X u8g(10);        // SPI Com: SCK = en = 13, MOSI = rw = 11, CS = di = 10, HW SPI
 69 //U8GLIB_ST7920_202X32_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
 70 //U8GLIB_ST7920_202X32_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
 71 //U8GLIB_ST7920_202X32_1X u8g(18, 16, 17);    // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
 72 //U8GLIB_ST7920_202X32_4X u8g(18, 16, 17);    // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
 73 //U8GLIB_LM6059 u8g(13, 11, 10, 9);        // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
 74 //U8GLIB_LM6063 u8g(13, 11, 10, 9);        // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
 75 //U8GLIB_DOGXL160_BW u8g(10, 9);        // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
 76 //U8GLIB_DOGXL160_GR u8g(13, 11, 10, 9);    // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
 77 //U8GLIB_DOGXL160_2X_BW u8g(13, 11, 10, 9);    // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
 78 //U8GLIB_DOGXL160_2X_GR u8g(13, 11, 10, 9);    // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
 79 //U8GLIB_PCD8544 u8g(13, 11, 10, 9, 8);        // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, Reset = 8
 80 //U8GLIB_PCF8812 u8g(13, 11, 10, 9, 8);        // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, Reset = 8
 81 //U8GLIB_KS0108_128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16);         // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs1=14, cs2=15,di=17,rw=16
 82 //U8GLIB_LC7981_160X80 u8g(8, 9, 10, 11, 4, 5, 6, 7,  18, 14, 15, 17, 16);     // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=14 ,di=15,rw=17, reset = 16
 83 //U8GLIB_LC7981_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7,  18, 14, 15, 17, 16);     // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=14 ,di=15,rw=17, reset = 16
 84 //U8GLIB_LC7981_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7,  18, 14, 15, 17, 16);     // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=14 ,di=15,rw=17, reset = 16
 85 //U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 );              // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
 86 //U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16);     // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
 87 //U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9);    // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
 88 //U8GLIB_SSD1306_128X64 u8g(4, 5, 6, 7);    // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new white HalTec OLED)
 89 //U8GLIB_SSD1306_128X64 u8g(10, 9);        // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11)
 90 //U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);    // I2C / TWI 
 91 //U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST);    // Fast I2C / TWI 
 92 //U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK);    // Display which does not send AC
 93 //U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(13, 11, 10, 9);    // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
 94 //U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(10, 9);        // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11)
 95 //U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9);    // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
 96 //U8GLIB_SSD1306_128X32 u8g(10, 9);             // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11)
 97 //U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE);    // I2C / TWI 
 98 //U8GLIB_SSD1306_64X48 u8g(13, 11, 10, 9);    // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
 99 //U8GLIB_SSD1306_64X48 u8g(10, 9);             // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11)
100 //U8GLIB_SSD1306_64X48 u8g(U8G_I2C_OPT_NONE);    // I2C / TWI 
101 //U8GLIB_SH1106_128X64 u8g(13, 11, 10, 9);    // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
102 //U8GLIB_SH1106_128X64 u8g(4, 5, 6, 7);    // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new blue HalTec OLED)
103 //U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);    // I2C / TWI 
104 //U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST);    // Dev 0, Fast I2C / TWI
105 //U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK);    // Display which does not send ACK
106 U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9, 2);    // SPI Com: SCK/SCL = 13, MOSI/SDA = 11, CS = 10, A0/D\C = 9, RST=2
107 //U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE);    // I2C
108 //U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE);    // I2C
109 //U8GLIB_UC1611_DOGM240 u8g(U8G_I2C_OPT_NONE);    // I2C
110 //U8GLIB_UC1611_DOGM240 u8g(13, 11, 10, 9, 8);    // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
111 //U8GLIB_UC1611_DOGM240 u8g(10, 9);        // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11)
112 //U8GLIB_UC1611_DOGM240 u8g(10, 9);        // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11)
113 //U8GLIB_UC1611_DOGM240 u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 3, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=3, di/a0=17,rw=16
114 //U8GLIB_UC1611_DOGXL240 u8g(U8G_I2C_OPT_NONE);    // I2C
115 //U8GLIB_UC1611_DOGXL240 u8g(13, 11, 10, 9, 8);    // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
116 //U8GLIB_UC1611_DOGXL240 u8g(10, 9);        // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11)
117 //U8GLIB_UC1611_DOGXL240 u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 3, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=3, di/a0=17,rw=16
118 //U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8);    // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
119 //U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8);    // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
120 //U8GLIB_LD7032_60x32 u8g(13, 11, 10, 9, 8);    // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
121 //U8GLIB_LD7032_60x32 u8g(11, 12, 9, 10, 8);    // SPI Com: SCK = 11, MOSI = 12, CS = 9, A0 = 10, RST = 8  (SW SPI Nano Board)
122 //U8GLIB_UC1608_240X64 u8g(13, 11, 10, 9, 8);    // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
123 //U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8);    // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
124 //U8GLIB_UC1608_240X64 u8g(10, 9, 8);    // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
125 //U8GLIB_UC1608_240X64_2X u8g(10, 9, 8);    // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
126 //U8GLIB_UC1608_240X u8g(13, 11, 10, 9, 8);    // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
127 //U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8);    // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
128 //U8GLIB_UC1608_240X64 u8g(10, 9, 8);    // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
129 //U8GLIB_UC1608_240X64_2X u8g(10, 9, 8);    // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
130 //U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
131 //U8GLIB_T6963_128X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
132 //U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
133 //U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
134 //U8GLIB_HT1632_24X16 u8g(3, 2, 4);        // WR = 3, DATA = 2, CS = 4
135 //U8GLIB_SSD1351_128X128_332 u8g(13, 11, 8, 9, 7); // Arduino UNO: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
136 //U8GLIB_SSD1351_128X128_332 u8g(76, 75, 8, 9, 7); // Arduino DUE: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
137 //U8GLIB_SSD1351_128X128_332 u8g(8, 9, 7); // Arduino: HW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
138 //U8GLIB_SSD1351_128X128_HICOLOR u8g(76, 75, 8, 9, 7); // Arduino DUE, SW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
139 //U8GLIB_SSD1351_128X128_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
140 //U8GLIB_SSD1351_128X128GH_332 u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
141 //U8GLIB_SSD1351_128X128GH_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
142 
143 
144 void draw(void) {
145   // graphic commands to redraw the complete screen should be placed here  
146   u8g.setFont(u8g_font_unifont);
147   //u8g.setFont(u8g_font_osb21);
148   u8g.drawStr( 0, 22, "Hello World!");
149 }
150 
151 void setup(void) {
152   // flip screen, if required
153   // u8g.setRot180();
154   
155   // set SPI backup if required
156   //u8g.setHardwareBackup(u8g_backup_avr_spi);
157 
158   // assign default color value
159   if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
160     u8g.setColorIndex(255);     // white
161   }
162   else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
163     u8g.setColorIndex(3);         // max intensity
164   }
165   else if ( u8g.getMode() == U8G_MODE_BW ) {
166     u8g.setColorIndex(1);         // pixel on
167   }
168   else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
169     u8g.setHiColorByRGB(255,255,255);
170   }
171   
172   pinMode(8, OUTPUT);
173 }
174 
175 void loop(void) {
176   // picture loop
177   u8g.firstPage();  
178   do {
179     draw();
180   } while( u8g.nextPage() );
181   
182   // rebuild the picture after some delay
183   //delay(50);
184 }

几点说明:

管脚和库里的不尽相同

库里名称 ---------------- 实际管脚 ----------------- arduino

SCK         SCL         13

MOSI          SDA         11

CS         CS            10

A0          D/C           9

RST          RES             RESET

U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9, 2); // SPI Com:这里有个坑,就是库里原来只有4个参数,添加第5个参数时,接对应的管脚

U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com:这里有个坑,就是库里原来只有4个参数,必须接RST引脚和reset

posted @ 2020-12-05 18:58  叕叒双又  阅读(2506)  评论(0编辑  收藏  举报