sadasd
SeeedGrayOLED.cpp@0:d4098155fec1, 2020-05-31 (annotated)
- Committer:
- NoFederation
- Date:
- Sun May 31 07:26:54 2020 +0000
- Revision:
- 0:d4098155fec1
FFT
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
NoFederation | 0:d4098155fec1 | 1 | /* |
NoFederation | 0:d4098155fec1 | 2 | * SeeedGrayOLED.cpp |
NoFederation | 0:d4098155fec1 | 3 | * SSD1327 Gray OLED Driver Library |
NoFederation | 0:d4098155fec1 | 4 | * |
NoFederation | 0:d4098155fec1 | 5 | * Copyright (c) 2011 seeed technology inc. |
NoFederation | 0:d4098155fec1 | 6 | * Author : Visweswara R |
NoFederation | 0:d4098155fec1 | 7 | * Create Time : Dec 2011 |
NoFederation | 0:d4098155fec1 | 8 | * Change Log : |
NoFederation | 0:d4098155fec1 | 9 | * |
NoFederation | 0:d4098155fec1 | 10 | * This library is free software; you can redistribute it and/or |
NoFederation | 0:d4098155fec1 | 11 | * modify it under the terms of the GNU Lesser General Public |
NoFederation | 0:d4098155fec1 | 12 | * License as published by the Free Software Foundation; either |
NoFederation | 0:d4098155fec1 | 13 | * version 2.1 of the License, or (at your option) any later version. |
NoFederation | 0:d4098155fec1 | 14 | * |
NoFederation | 0:d4098155fec1 | 15 | * This library is distributed in the hope that it will be useful, |
NoFederation | 0:d4098155fec1 | 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
NoFederation | 0:d4098155fec1 | 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
NoFederation | 0:d4098155fec1 | 18 | * Lesser General Public License for more details. |
NoFederation | 0:d4098155fec1 | 19 | * |
NoFederation | 0:d4098155fec1 | 20 | * You should have received a copy of the GNU Lesser General Public |
NoFederation | 0:d4098155fec1 | 21 | * License along with this library; if not, write to the Free Software |
NoFederation | 0:d4098155fec1 | 22 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
NoFederation | 0:d4098155fec1 | 23 | */ |
NoFederation | 0:d4098155fec1 | 24 | |
NoFederation | 0:d4098155fec1 | 25 | // #include "Arduino.h" |
NoFederation | 0:d4098155fec1 | 26 | //#include "Wire.h" |
NoFederation | 0:d4098155fec1 | 27 | #include "SeeedGrayOLED.h" |
NoFederation | 0:d4098155fec1 | 28 | //#include <pgmspace.h> |
NoFederation | 0:d4098155fec1 | 29 | |
NoFederation | 0:d4098155fec1 | 30 | #if defined(__arm__) && !defined(PROGMEM) |
NoFederation | 0:d4098155fec1 | 31 | #define PROGMEM |
NoFederation | 0:d4098155fec1 | 32 | #define pgm_read_byte(STR) STR |
NoFederation | 0:d4098155fec1 | 33 | #endif |
NoFederation | 0:d4098155fec1 | 34 | |
NoFederation | 0:d4098155fec1 | 35 | I2C i2c_oled(PB_9, PB_8); |
NoFederation | 0:d4098155fec1 | 36 | //(sda,scl) |
NoFederation | 0:d4098155fec1 | 37 | |
NoFederation | 0:d4098155fec1 | 38 | // 8x8 Font ASCII 32 - 127 Implemented |
NoFederation | 0:d4098155fec1 | 39 | // Users can modify this to support more characters(glyphs) |
NoFederation | 0:d4098155fec1 | 40 | // BasicFont is placed in code memory. |
NoFederation | 0:d4098155fec1 | 41 | |
NoFederation | 0:d4098155fec1 | 42 | // This font can be freely used without any restriction(It is placed in public domain) |
NoFederation | 0:d4098155fec1 | 43 | const unsigned char zifu[][16]PROGMEM= |
NoFederation | 0:d4098155fec1 | 44 | { |
NoFederation | 0:d4098155fec1 | 45 | |
NoFederation | 0:d4098155fec1 | 46 | {0x01,0x00,0x00,0xFF,0x00,0x00,0x00,0xF9,0x49,0x49,0x49,0x49,0x49,0xF9,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 47 | {0x00,0x80,0x60,0xF8,0x07,0x00,0x04,0x24,0x24,0x25,0x26,0x24,0x24,0x24,0x04,0x00},/*"信",0*/ |
NoFederation | 0:d4098155fec1 | 48 | |
NoFederation | 0:d4098155fec1 | 49 | }; |
NoFederation | 0:d4098155fec1 | 50 | |
NoFederation | 0:d4098155fec1 | 51 | const unsigned char BasicFont[][8]PROGMEM= |
NoFederation | 0:d4098155fec1 | 52 | { |
NoFederation | 0:d4098155fec1 | 53 | {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 54 | {0x00,0x00,0x5F,0x00,0x00,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 55 | {0x00,0x00,0x07,0x00,0x07,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 56 | {0x00,0x14,0x7F,0x14,0x7F,0x14,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 57 | {0x00,0x24,0x2A,0x7F,0x2A,0x12,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 58 | {0x00,0x23,0x13,0x08,0x64,0x62,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 59 | {0x00,0x36,0x49,0x55,0x22,0x50,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 60 | {0x00,0x00,0x05,0x03,0x00,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 61 | {0x00,0x1C,0x22,0x41,0x00,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 62 | {0x00,0x41,0x22,0x1C,0x00,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 63 | {0x00,0x08,0x2A,0x1C,0x2A,0x08,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 64 | {0x00,0x08,0x08,0x3E,0x08,0x08,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 65 | {0x00,0xA0,0x60,0x00,0x00,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 66 | {0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 67 | {0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 68 | {0x00,0x20,0x10,0x08,0x04,0x02,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 69 | {0x00,0x3E,0x51,0x49,0x45,0x3E,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 70 | {0x00,0x00,0x42,0x7F,0x40,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 71 | {0x00,0x62,0x51,0x49,0x49,0x46,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 72 | {0x00,0x22,0x41,0x49,0x49,0x36,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 73 | {0x00,0x18,0x14,0x12,0x7F,0x10,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 74 | {0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 75 | {0x00,0x3C,0x4A,0x49,0x49,0x30,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 76 | {0x00,0x01,0x71,0x09,0x05,0x03,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 77 | {0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 78 | {0x00,0x06,0x49,0x49,0x29,0x1E,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 79 | {0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 80 | {0x00,0x00,0xAC,0x6C,0x00,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 81 | {0x00,0x08,0x14,0x22,0x41,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 82 | {0x00,0x14,0x14,0x14,0x14,0x14,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 83 | {0x00,0x41,0x22,0x14,0x08,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 84 | {0x00,0x02,0x01,0x51,0x09,0x06,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 85 | {0x00,0x32,0x49,0x79,0x41,0x3E,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 86 | {0x00,0x7E,0x09,0x09,0x09,0x7E,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 87 | {0x00,0x7F,0x49,0x49,0x49,0x36,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 88 | {0x00,0x3E,0x41,0x41,0x41,0x22,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 89 | {0x00,0x7F,0x41,0x41,0x22,0x1C,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 90 | {0x00,0x7F,0x49,0x49,0x49,0x41,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 91 | {0x00,0x7F,0x09,0x09,0x09,0x01,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 92 | {0x00,0x3E,0x41,0x41,0x51,0x72,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 93 | {0x00,0x7F,0x08,0x08,0x08,0x7F,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 94 | {0x00,0x41,0x7F,0x41,0x00,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 95 | {0x00,0x20,0x40,0x41,0x3F,0x01,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 96 | {0x00,0x7F,0x08,0x14,0x22,0x41,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 97 | {0x00,0x7F,0x40,0x40,0x40,0x40,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 98 | {0x00,0x7F,0x02,0x0C,0x02,0x7F,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 99 | {0x00,0x7F,0x04,0x08,0x10,0x7F,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 100 | {0x00,0x3E,0x41,0x41,0x41,0x3E,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 101 | {0x00,0x7F,0x09,0x09,0x09,0x06,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 102 | {0x00,0x3E,0x41,0x51,0x21,0x5E,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 103 | {0x00,0x7F,0x09,0x19,0x29,0x46,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 104 | {0x00,0x26,0x49,0x49,0x49,0x32,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 105 | {0x00,0x01,0x01,0x7F,0x01,0x01,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 106 | {0x00,0x3F,0x40,0x40,0x40,0x3F,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 107 | {0x00,0x1F,0x20,0x40,0x20,0x1F,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 108 | {0x00,0x3F,0x40,0x38,0x40,0x3F,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 109 | {0x00,0x63,0x14,0x08,0x14,0x63,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 110 | {0x00,0x03,0x04,0x78,0x04,0x03,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 111 | {0x00,0x61,0x51,0x49,0x45,0x43,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 112 | {0x00,0x7F,0x41,0x41,0x00,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 113 | {0x00,0x02,0x04,0x08,0x10,0x20,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 114 | {0x00,0x41,0x41,0x7F,0x00,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 115 | {0x00,0x04,0x02,0x01,0x02,0x04,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 116 | {0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 117 | {0x00,0x01,0x02,0x04,0x00,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 118 | {0x00,0x20,0x54,0x54,0x54,0x78,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 119 | {0x00,0x7F,0x48,0x44,0x44,0x38,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 120 | {0x00,0x38,0x44,0x44,0x28,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 121 | {0x00,0x38,0x44,0x44,0x48,0x7F,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 122 | {0x00,0x38,0x54,0x54,0x54,0x18,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 123 | {0x00,0x08,0x7E,0x09,0x02,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 124 | {0x00,0x18,0xA4,0xA4,0xA4,0x7C,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 125 | {0x00,0x7F,0x08,0x04,0x04,0x78,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 126 | {0x00,0x00,0x7D,0x00,0x00,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 127 | {0x00,0x80,0x84,0x7D,0x00,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 128 | {0x00,0x7F,0x10,0x28,0x44,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 129 | {0x00,0x41,0x7F,0x40,0x00,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 130 | {0x00,0x7C,0x04,0x18,0x04,0x78,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 131 | {0x00,0x7C,0x08,0x04,0x7C,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 132 | {0x00,0x38,0x44,0x44,0x38,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 133 | {0x00,0xFC,0x24,0x24,0x18,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 134 | {0x00,0x18,0x24,0x24,0xFC,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 135 | {0x00,0x00,0x7C,0x08,0x04,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 136 | {0x00,0x48,0x54,0x54,0x24,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 137 | {0x00,0x04,0x7F,0x44,0x00,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 138 | {0x00,0x3C,0x40,0x40,0x7C,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 139 | {0x00,0x1C,0x20,0x40,0x20,0x1C,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 140 | {0x00,0x3C,0x40,0x30,0x40,0x3C,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 141 | {0x00,0x44,0x28,0x10,0x28,0x44,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 142 | {0x00,0x1C,0xA0,0xA0,0x7C,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 143 | {0x00,0x44,0x64,0x54,0x4C,0x44,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 144 | {0x00,0x08,0x36,0x41,0x00,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 145 | {0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 146 | {0x00,0x41,0x36,0x08,0x00,0x00,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 147 | {0x00,0x02,0x01,0x01,0x02,0x01,0x00,0x00}, |
NoFederation | 0:d4098155fec1 | 148 | {0x00,0x02,0x05,0x05,0x02,0x00,0x00,0x00} |
NoFederation | 0:d4098155fec1 | 149 | }; |
NoFederation | 0:d4098155fec1 | 150 | |
NoFederation | 0:d4098155fec1 | 151 | |
NoFederation | 0:d4098155fec1 | 152 | void SeeedGrayOLED::drawzifu(unsigned char Row1, unsigned char Column,const unsigned char *bitmaparray,int bytes) |
NoFederation | 0:d4098155fec1 | 153 | { |
NoFederation | 0:d4098155fec1 | 154 | if(Drive_IC == SSD1327) |
NoFederation | 0:d4098155fec1 | 155 | { |
NoFederation | 0:d4098155fec1 | 156 | char localAddressMode = addressingMode; |
NoFederation | 0:d4098155fec1 | 157 | if(addressingMode != HORIZONTAL_MODE) |
NoFederation | 0:d4098155fec1 | 158 | { |
NoFederation | 0:d4098155fec1 | 159 | //Bitmap is drawn in horizontal mode |
NoFederation | 0:d4098155fec1 | 160 | setHorizontalMode(); |
NoFederation | 0:d4098155fec1 | 161 | } |
NoFederation | 0:d4098155fec1 | 162 | |
NoFederation | 0:d4098155fec1 | 163 | for(int i=0;i<bytes;i++) |
NoFederation | 0:d4098155fec1 | 164 | { |
NoFederation | 0:d4098155fec1 | 165 | |
NoFederation | 0:d4098155fec1 | 166 | for(int j=0;j<8;j=j+2) |
NoFederation | 0:d4098155fec1 | 167 | { |
NoFederation | 0:d4098155fec1 | 168 | char c=0x00; |
NoFederation | 0:d4098155fec1 | 169 | char bit1 = bitmaparray[i] << j & 0x80; |
NoFederation | 0:d4098155fec1 | 170 | char bit2 = bitmaparray[i] << (j+1) & 0x80; |
NoFederation | 0:d4098155fec1 | 171 | |
NoFederation | 0:d4098155fec1 | 172 | // Each bit is changed to a nibble |
NoFederation | 0:d4098155fec1 | 173 | c|=(bit1)?grayH:0x00; |
NoFederation | 0:d4098155fec1 | 174 | // Each bit is changed to a nibble |
NoFederation | 0:d4098155fec1 | 175 | c|=(bit2)?grayL:0x00; |
NoFederation | 0:d4098155fec1 | 176 | sendData(c); |
NoFederation | 0:d4098155fec1 | 177 | } |
NoFederation | 0:d4098155fec1 | 178 | } |
NoFederation | 0:d4098155fec1 | 179 | if(localAddressMode == VERTICAL_MODE) |
NoFederation | 0:d4098155fec1 | 180 | { |
NoFederation | 0:d4098155fec1 | 181 | //If Vertical Mode was used earlier, restore it. |
NoFederation | 0:d4098155fec1 | 182 | setVerticalMode(); |
NoFederation | 0:d4098155fec1 | 183 | } |
NoFederation | 0:d4098155fec1 | 184 | } |
NoFederation | 0:d4098155fec1 | 185 | else if(Drive_IC == SH1107G) |
NoFederation | 0:d4098155fec1 | 186 | { |
NoFederation | 0:d4098155fec1 | 187 | int Row = 0,column_l = 0x00, column_h = 0x11; |
NoFederation | 0:d4098155fec1 | 188 | setHorizontalMode(); |
NoFederation | 0:d4098155fec1 | 189 | for(int i=0;i<bytes;i++) |
NoFederation | 0:d4098155fec1 | 190 | { |
NoFederation | 0:d4098155fec1 | 191 | sendCommand(0xb0 + Row1*2 +Row); |
NoFederation | 0:d4098155fec1 | 192 | sendCommand(column_l); |
NoFederation | 0:d4098155fec1 | 193 | sendCommand(column_h + Column); |
NoFederation | 0:d4098155fec1 | 194 | //sendCommand(0xA7); |
NoFederation | 0:d4098155fec1 | 195 | |
NoFederation | 0:d4098155fec1 | 196 | // byte bits = (byte)pgm_read_byte(&bitmaparray[i]); |
NoFederation | 0:d4098155fec1 | 197 | // byte tmp = 0x00; |
NoFederation | 0:d4098155fec1 | 198 | |
NoFederation | 0:d4098155fec1 | 199 | char bits = bitmaparray[i]; |
NoFederation | 0:d4098155fec1 | 200 | char tmp = 0x00; |
NoFederation | 0:d4098155fec1 | 201 | |
NoFederation | 0:d4098155fec1 | 202 | for(int b = 0; b < 8; b++) |
NoFederation | 0:d4098155fec1 | 203 | { |
NoFederation | 0:d4098155fec1 | 204 | // tmp |= ((bits>>(7-b))&0x01)<<b; |
NoFederation | 0:d4098155fec1 | 205 | tmp |= ((bits>>(7-b))&0x01)<<b; |
NoFederation | 0:d4098155fec1 | 206 | } |
NoFederation | 0:d4098155fec1 | 207 | // sendData(tmp); |
NoFederation | 0:d4098155fec1 | 208 | sendData(tmp); |
NoFederation | 0:d4098155fec1 | 209 | |
NoFederation | 0:d4098155fec1 | 210 | Row++; |
NoFederation | 0:d4098155fec1 | 211 | if(Row >= 2){ |
NoFederation | 0:d4098155fec1 | 212 | Row = 0; |
NoFederation | 0:d4098155fec1 | 213 | column_l++; |
NoFederation | 0:d4098155fec1 | 214 | if(column_l >= 16){ |
NoFederation | 0:d4098155fec1 | 215 | column_l = 0x00; |
NoFederation | 0:d4098155fec1 | 216 | column_h += 0x01; |
NoFederation | 0:d4098155fec1 | 217 | } |
NoFederation | 0:d4098155fec1 | 218 | } |
NoFederation | 0:d4098155fec1 | 219 | } |
NoFederation | 0:d4098155fec1 | 220 | } |
NoFederation | 0:d4098155fec1 | 221 | |
NoFederation | 0:d4098155fec1 | 222 | } |
NoFederation | 0:d4098155fec1 | 223 | |
NoFederation | 0:d4098155fec1 | 224 | void SeeedGrayOLED::putzifu(unsigned char C) |
NoFederation | 0:d4098155fec1 | 225 | { |
NoFederation | 0:d4098155fec1 | 226 | if(C < 32 || C > 127) //Ignore non-printable ASCII characters. This can be modified for multilingual font. |
NoFederation | 0:d4098155fec1 | 227 | { |
NoFederation | 0:d4098155fec1 | 228 | C=' '; //Space |
NoFederation | 0:d4098155fec1 | 229 | } |
NoFederation | 0:d4098155fec1 | 230 | |
NoFederation | 0:d4098155fec1 | 231 | if(Drive_IC == SSD1327) |
NoFederation | 0:d4098155fec1 | 232 | { |
NoFederation | 0:d4098155fec1 | 233 | for(char i=0;i<8;i=i+2) |
NoFederation | 0:d4098155fec1 | 234 | { |
NoFederation | 0:d4098155fec1 | 235 | for(char j=0;j<8;j++) |
NoFederation | 0:d4098155fec1 | 236 | { |
NoFederation | 0:d4098155fec1 | 237 | // Character is constructed two pixel at a time using vertical mode from the default 8x8 font |
NoFederation | 0:d4098155fec1 | 238 | char c=0x00; |
NoFederation | 0:d4098155fec1 | 239 | char bit1= (BasicFont[C-32][i] >> j) & 0x01; |
NoFederation | 0:d4098155fec1 | 240 | char bit2= (BasicFont[C-32][i+1] >> j) & 0x01; |
NoFederation | 0:d4098155fec1 | 241 | // Each bit is changed to a nibble |
NoFederation | 0:d4098155fec1 | 242 | c|=(bit1)?grayH:0x00; |
NoFederation | 0:d4098155fec1 | 243 | c|=(bit2)?grayL:0x00; |
NoFederation | 0:d4098155fec1 | 244 | |
NoFederation | 0:d4098155fec1 | 245 | sendData(c); |
NoFederation | 0:d4098155fec1 | 246 | } |
NoFederation | 0:d4098155fec1 | 247 | } |
NoFederation | 0:d4098155fec1 | 248 | } |
NoFederation | 0:d4098155fec1 | 249 | else if(Drive_IC == SH1107G) |
NoFederation | 0:d4098155fec1 | 250 | { |
NoFederation | 0:d4098155fec1 | 251 | for(int i=0;i<16;i++) |
NoFederation | 0:d4098155fec1 | 252 | { |
NoFederation | 0:d4098155fec1 | 253 | |
NoFederation | 0:d4098155fec1 | 254 | sendData(zifu[C-48][i]); //font array starts at 0, ASCII starts at 32. Hence the translation |
NoFederation | 0:d4098155fec1 | 255 | |
NoFederation | 0:d4098155fec1 | 256 | //read bytes from code memory |
NoFederation | 0:d4098155fec1 | 257 | } |
NoFederation | 0:d4098155fec1 | 258 | } |
NoFederation | 0:d4098155fec1 | 259 | } |
NoFederation | 0:d4098155fec1 | 260 | |
NoFederation | 0:d4098155fec1 | 261 | void SeeedGrayOLED::setzifuXY(unsigned char Row, unsigned char Column) |
NoFederation | 0:d4098155fec1 | 262 | { |
NoFederation | 0:d4098155fec1 | 263 | if(Drive_IC == SSD1327) |
NoFederation | 0:d4098155fec1 | 264 | { |
NoFederation | 0:d4098155fec1 | 265 | //Column Address |
NoFederation | 0:d4098155fec1 | 266 | sendCommand(0x15); /* Set Column Address */ |
NoFederation | 0:d4098155fec1 | 267 | sendCommand(0x08+(Column*4)); /* Start Column: Start from 8 */ |
NoFederation | 0:d4098155fec1 | 268 | sendCommand(0x37); /* End Column */ |
NoFederation | 0:d4098155fec1 | 269 | // Row Address |
NoFederation | 0:d4098155fec1 | 270 | sendCommand(0x75); /* Set Row Address */ |
NoFederation | 0:d4098155fec1 | 271 | sendCommand(0x00+(Row*8)); /* Start Row*/ |
NoFederation | 0:d4098155fec1 | 272 | sendCommand(0x07+(Row*8)); /* End Row*/ |
NoFederation | 0:d4098155fec1 | 273 | } |
NoFederation | 0:d4098155fec1 | 274 | else if(Drive_IC == SH1107G) |
NoFederation | 0:d4098155fec1 | 275 | { |
NoFederation | 0:d4098155fec1 | 276 | uint8_t col_l; |
NoFederation | 0:d4098155fec1 | 277 | |
NoFederation | 0:d4098155fec1 | 278 | Column%2 ? col_l = 0x10 : col_l = 0x00; |
NoFederation | 0:d4098155fec1 | 279 | sendCommand(0xb0+Row); |
NoFederation | 0:d4098155fec1 | 280 | sendCommand(col_l); |
NoFederation | 0:d4098155fec1 | 281 | sendCommand(0x11+(Column/2)); |
NoFederation | 0:d4098155fec1 | 282 | } |
NoFederation | 0:d4098155fec1 | 283 | } |
NoFederation | 0:d4098155fec1 | 284 | |
NoFederation | 0:d4098155fec1 | 285 | void SeeedGrayOLED::init(int IC) |
NoFederation | 0:d4098155fec1 | 286 | { |
NoFederation | 0:d4098155fec1 | 287 | Drive_IC = IC; |
NoFederation | 0:d4098155fec1 | 288 | if(Drive_IC == SSD1327) |
NoFederation | 0:d4098155fec1 | 289 | { |
NoFederation | 0:d4098155fec1 | 290 | sendCommand(0xFD); // Unlock OLED driver IC MCU interface from entering command. i.e: Accept commands |
NoFederation | 0:d4098155fec1 | 291 | sendCommand(0x12); |
NoFederation | 0:d4098155fec1 | 292 | sendCommand(0xAE); // Set display off |
NoFederation | 0:d4098155fec1 | 293 | sendCommand(0xA8); // set multiplex ratio |
NoFederation | 0:d4098155fec1 | 294 | sendCommand(0x5F); // 96 |
NoFederation | 0:d4098155fec1 | 295 | sendCommand(0xA1); // set display start line |
NoFederation | 0:d4098155fec1 | 296 | sendCommand(0x00); |
NoFederation | 0:d4098155fec1 | 297 | sendCommand(0xA2); // set display offset |
NoFederation | 0:d4098155fec1 | 298 | sendCommand(0x60); |
NoFederation | 0:d4098155fec1 | 299 | sendCommand(0xA0); // set remap |
NoFederation | 0:d4098155fec1 | 300 | sendCommand(0x46); |
NoFederation | 0:d4098155fec1 | 301 | sendCommand(0xAB); // set vdd internal |
NoFederation | 0:d4098155fec1 | 302 | sendCommand(0x01); // |
NoFederation | 0:d4098155fec1 | 303 | sendCommand(0x81); // set contrasr |
NoFederation | 0:d4098155fec1 | 304 | sendCommand(0x53); // 100 nit |
NoFederation | 0:d4098155fec1 | 305 | sendCommand(0xB1); // Set Phase Length |
NoFederation | 0:d4098155fec1 | 306 | sendCommand(0X51); // |
NoFederation | 0:d4098155fec1 | 307 | sendCommand(0xB3); // Set Display Clock Divide Ratio/Oscillator Frequency |
NoFederation | 0:d4098155fec1 | 308 | sendCommand(0x01); |
NoFederation | 0:d4098155fec1 | 309 | sendCommand(0xB9); // |
NoFederation | 0:d4098155fec1 | 310 | sendCommand(0xBC); // set pre_charge voltage/VCOMH |
NoFederation | 0:d4098155fec1 | 311 | sendCommand(0x08); // (0x08); |
NoFederation | 0:d4098155fec1 | 312 | sendCommand(0xBE); // set VCOMH |
NoFederation | 0:d4098155fec1 | 313 | sendCommand(0X07); // (0x07); |
NoFederation | 0:d4098155fec1 | 314 | sendCommand(0xB6); // Set second pre-charge period |
NoFederation | 0:d4098155fec1 | 315 | sendCommand(0x01); // |
NoFederation | 0:d4098155fec1 | 316 | sendCommand(0xD5); // enable second precharge and enternal vsl |
NoFederation | 0:d4098155fec1 | 317 | sendCommand(0X62); // (0x62); |
NoFederation | 0:d4098155fec1 | 318 | sendCommand(0xA4); // Set Normal Display Mode |
NoFederation | 0:d4098155fec1 | 319 | sendCommand(0x2E); // Deactivate Scroll |
NoFederation | 0:d4098155fec1 | 320 | sendCommand(0xAF); // Switch on display |
NoFederation | 0:d4098155fec1 | 321 | wait(0.1); |
NoFederation | 0:d4098155fec1 | 322 | |
NoFederation | 0:d4098155fec1 | 323 | // Row Address |
NoFederation | 0:d4098155fec1 | 324 | sendCommand(0x75); // Set Row Address |
NoFederation | 0:d4098155fec1 | 325 | sendCommand(0x00); // Start 0 |
NoFederation | 0:d4098155fec1 | 326 | sendCommand(0x5f); // End 95 |
NoFederation | 0:d4098155fec1 | 327 | |
NoFederation | 0:d4098155fec1 | 328 | |
NoFederation | 0:d4098155fec1 | 329 | // Column Address |
NoFederation | 0:d4098155fec1 | 330 | sendCommand(0x15); // Set Column Address |
NoFederation | 0:d4098155fec1 | 331 | sendCommand(0x08); // Start from 8th Column of driver IC. This is 0th Column for OLED |
NoFederation | 0:d4098155fec1 | 332 | sendCommand(0x37); // End at (8 + 47)th column. Each Column has 2 pixels(segments) |
NoFederation | 0:d4098155fec1 | 333 | |
NoFederation | 0:d4098155fec1 | 334 | // Init gray level for text. Default:Brightest White |
NoFederation | 0:d4098155fec1 | 335 | grayH= 0xF0; |
NoFederation | 0:d4098155fec1 | 336 | grayL= 0x0F; |
NoFederation | 0:d4098155fec1 | 337 | } |
NoFederation | 0:d4098155fec1 | 338 | else if (Drive_IC ==SH1107G) |
NoFederation | 0:d4098155fec1 | 339 | { |
NoFederation | 0:d4098155fec1 | 340 | sendCommand(0xae); //Display OFF |
NoFederation | 0:d4098155fec1 | 341 | sendCommand(0xd5); // Set Dclk |
NoFederation | 0:d4098155fec1 | 342 | sendCommand(0x50); // 100Hz |
NoFederation | 0:d4098155fec1 | 343 | sendCommand(0x20); // Set row address |
NoFederation | 0:d4098155fec1 | 344 | sendCommand(0x81); // Set contrast control |
NoFederation | 0:d4098155fec1 | 345 | sendCommand(0x80); |
NoFederation | 0:d4098155fec1 | 346 | sendCommand(0xa0); // Segment remap |
NoFederation | 0:d4098155fec1 | 347 | sendCommand(0xa4); // Set Entire Display ON |
NoFederation | 0:d4098155fec1 | 348 | sendCommand(0xa6); // Normal display |
NoFederation | 0:d4098155fec1 | 349 | sendCommand(0xad); // Set external VCC |
NoFederation | 0:d4098155fec1 | 350 | sendCommand(0x80); |
NoFederation | 0:d4098155fec1 | 351 | sendCommand(0xc0); // Set Common scan direction |
NoFederation | 0:d4098155fec1 | 352 | sendCommand(0xd9); // Set phase leghth |
NoFederation | 0:d4098155fec1 | 353 | sendCommand(0x1f); |
NoFederation | 0:d4098155fec1 | 354 | sendCommand(0xdb); // Set Vcomh voltage |
NoFederation | 0:d4098155fec1 | 355 | sendCommand(0x27); |
NoFederation | 0:d4098155fec1 | 356 | sendCommand(0xaf); //Display ON |
NoFederation | 0:d4098155fec1 | 357 | sendCommand(0xb0); |
NoFederation | 0:d4098155fec1 | 358 | sendCommand(0x00); |
NoFederation | 0:d4098155fec1 | 359 | sendCommand(0x11); |
NoFederation | 0:d4098155fec1 | 360 | } |
NoFederation | 0:d4098155fec1 | 361 | } |
NoFederation | 0:d4098155fec1 | 362 | |
NoFederation | 0:d4098155fec1 | 363 | |
NoFederation | 0:d4098155fec1 | 364 | void SeeedGrayOLED::sendCommand(unsigned char command) |
NoFederation | 0:d4098155fec1 | 365 | { |
NoFederation | 0:d4098155fec1 | 366 | // Wire.beginTransmission(SeeedGrayOLED_Address); // begin I2C communication |
NoFederation | 0:d4098155fec1 | 367 | // Wire.write(SeeedGrayOLED_Command_Mode); // Set OLED Command mode |
NoFederation | 0:d4098155fec1 | 368 | // Wire.write(command); |
NoFederation | 0:d4098155fec1 | 369 | // Wire.endTransmission(); // End I2C communication |
NoFederation | 0:d4098155fec1 | 370 | char cmd[2]; |
NoFederation | 0:d4098155fec1 | 371 | cmd[0] = SeeedGrayOLED_Command_Mode; |
NoFederation | 0:d4098155fec1 | 372 | cmd[1] = command; |
NoFederation | 0:d4098155fec1 | 373 | |
NoFederation | 0:d4098155fec1 | 374 | i2c_oled.write(SeeedGrayOLED_Address, cmd, 2); |
NoFederation | 0:d4098155fec1 | 375 | |
NoFederation | 0:d4098155fec1 | 376 | } |
NoFederation | 0:d4098155fec1 | 377 | |
NoFederation | 0:d4098155fec1 | 378 | void SeeedGrayOLED::setContrastLevel(unsigned char ContrastLevel) |
NoFederation | 0:d4098155fec1 | 379 | { |
NoFederation | 0:d4098155fec1 | 380 | sendCommand(SeeedGrayOLED_Set_ContrastLevel_Cmd); |
NoFederation | 0:d4098155fec1 | 381 | sendCommand(ContrastLevel); |
NoFederation | 0:d4098155fec1 | 382 | } |
NoFederation | 0:d4098155fec1 | 383 | |
NoFederation | 0:d4098155fec1 | 384 | void SeeedGrayOLED::setHorizontalMode() |
NoFederation | 0:d4098155fec1 | 385 | { |
NoFederation | 0:d4098155fec1 | 386 | if(Drive_IC == SSD1327) |
NoFederation | 0:d4098155fec1 | 387 | { |
NoFederation | 0:d4098155fec1 | 388 | sendCommand(0xA0); // remap to |
NoFederation | 0:d4098155fec1 | 389 | sendCommand(0x42); // horizontal mode |
NoFederation | 0:d4098155fec1 | 390 | |
NoFederation | 0:d4098155fec1 | 391 | // Row Address |
NoFederation | 0:d4098155fec1 | 392 | sendCommand(0x75); // Set Row Address |
NoFederation | 0:d4098155fec1 | 393 | sendCommand(0x00); // Start 0 |
NoFederation | 0:d4098155fec1 | 394 | sendCommand(0x5f); // End 95 |
NoFederation | 0:d4098155fec1 | 395 | |
NoFederation | 0:d4098155fec1 | 396 | // Column Address |
NoFederation | 0:d4098155fec1 | 397 | sendCommand(0x15); // Set Column Address |
NoFederation | 0:d4098155fec1 | 398 | sendCommand(0x08); // Start from 8th Column of driver IC. This is 0th Column for OLED |
NoFederation | 0:d4098155fec1 | 399 | sendCommand(0x37); // End at (8 + 47)th column. Each Column has 2 pixels(or segments) |
NoFederation | 0:d4098155fec1 | 400 | } |
NoFederation | 0:d4098155fec1 | 401 | else if(Drive_IC == SH1107G) |
NoFederation | 0:d4098155fec1 | 402 | { |
NoFederation | 0:d4098155fec1 | 403 | sendCommand(0xA0); |
NoFederation | 0:d4098155fec1 | 404 | sendCommand(0xC8); |
NoFederation | 0:d4098155fec1 | 405 | } |
NoFederation | 0:d4098155fec1 | 406 | } |
NoFederation | 0:d4098155fec1 | 407 | |
NoFederation | 0:d4098155fec1 | 408 | void SeeedGrayOLED::setVerticalMode() |
NoFederation | 0:d4098155fec1 | 409 | { |
NoFederation | 0:d4098155fec1 | 410 | if(Drive_IC == SSD1327) |
NoFederation | 0:d4098155fec1 | 411 | { |
NoFederation | 0:d4098155fec1 | 412 | sendCommand(0xA0); // remap to |
NoFederation | 0:d4098155fec1 | 413 | sendCommand(0x46); // Vertical mode |
NoFederation | 0:d4098155fec1 | 414 | } |
NoFederation | 0:d4098155fec1 | 415 | else if(Drive_IC == SH1107G) |
NoFederation | 0:d4098155fec1 | 416 | { |
NoFederation | 0:d4098155fec1 | 417 | sendCommand(0xA0); |
NoFederation | 0:d4098155fec1 | 418 | sendCommand(0xC0); |
NoFederation | 0:d4098155fec1 | 419 | } |
NoFederation | 0:d4098155fec1 | 420 | } |
NoFederation | 0:d4098155fec1 | 421 | |
NoFederation | 0:d4098155fec1 | 422 | void SeeedGrayOLED::setTextXY(unsigned char Row, unsigned char Column) |
NoFederation | 0:d4098155fec1 | 423 | { |
NoFederation | 0:d4098155fec1 | 424 | if(Drive_IC == SSD1327) |
NoFederation | 0:d4098155fec1 | 425 | { |
NoFederation | 0:d4098155fec1 | 426 | //Column Address |
NoFederation | 0:d4098155fec1 | 427 | sendCommand(0x15); /* Set Column Address */ |
NoFederation | 0:d4098155fec1 | 428 | sendCommand(0x08+(Column*4)); /* Start Column: Start from 8 */ |
NoFederation | 0:d4098155fec1 | 429 | sendCommand(0x37); /* End Column */ |
NoFederation | 0:d4098155fec1 | 430 | // Row Address |
NoFederation | 0:d4098155fec1 | 431 | sendCommand(0x75); /* Set Row Address */ |
NoFederation | 0:d4098155fec1 | 432 | sendCommand(0x00+(Row*8)); /* Start Row*/ |
NoFederation | 0:d4098155fec1 | 433 | sendCommand(0x07+(Row*8)); /* End Row*/ |
NoFederation | 0:d4098155fec1 | 434 | } |
NoFederation | 0:d4098155fec1 | 435 | else if(Drive_IC == SH1107G) |
NoFederation | 0:d4098155fec1 | 436 | { |
NoFederation | 0:d4098155fec1 | 437 | uint8_t col_l; |
NoFederation | 0:d4098155fec1 | 438 | |
NoFederation | 0:d4098155fec1 | 439 | Column%2 ? col_l = 0x08 : col_l = 0x00; |
NoFederation | 0:d4098155fec1 | 440 | sendCommand(0xb0+Row); |
NoFederation | 0:d4098155fec1 | 441 | sendCommand(col_l); |
NoFederation | 0:d4098155fec1 | 442 | sendCommand(0x11+(Column/2)); |
NoFederation | 0:d4098155fec1 | 443 | } |
NoFederation | 0:d4098155fec1 | 444 | } |
NoFederation | 0:d4098155fec1 | 445 | |
NoFederation | 0:d4098155fec1 | 446 | void SeeedGrayOLED::clearDisplay() |
NoFederation | 0:d4098155fec1 | 447 | { |
NoFederation | 0:d4098155fec1 | 448 | unsigned char i,j; |
NoFederation | 0:d4098155fec1 | 449 | |
NoFederation | 0:d4098155fec1 | 450 | if(Drive_IC == SSD1327) |
NoFederation | 0:d4098155fec1 | 451 | { |
NoFederation | 0:d4098155fec1 | 452 | for(j=0;j<48;j++) |
NoFederation | 0:d4098155fec1 | 453 | { |
NoFederation | 0:d4098155fec1 | 454 | for(i=0;i<96;i++) //clear all columns |
NoFederation | 0:d4098155fec1 | 455 | { |
NoFederation | 0:d4098155fec1 | 456 | sendData(0x00); |
NoFederation | 0:d4098155fec1 | 457 | } |
NoFederation | 0:d4098155fec1 | 458 | } |
NoFederation | 0:d4098155fec1 | 459 | } |
NoFederation | 0:d4098155fec1 | 460 | else if(Drive_IC == SH1107G) |
NoFederation | 0:d4098155fec1 | 461 | { |
NoFederation | 0:d4098155fec1 | 462 | for(i=0; i<16;i++){ |
NoFederation | 0:d4098155fec1 | 463 | sendCommand(0xb0+i); |
NoFederation | 0:d4098155fec1 | 464 | sendCommand(0x0); |
NoFederation | 0:d4098155fec1 | 465 | sendCommand(0x10); |
NoFederation | 0:d4098155fec1 | 466 | for(j=0; j<128;j++){ |
NoFederation | 0:d4098155fec1 | 467 | sendData(0x00); |
NoFederation | 0:d4098155fec1 | 468 | } |
NoFederation | 0:d4098155fec1 | 469 | } |
NoFederation | 0:d4098155fec1 | 470 | } |
NoFederation | 0:d4098155fec1 | 471 | |
NoFederation | 0:d4098155fec1 | 472 | } |
NoFederation | 0:d4098155fec1 | 473 | |
NoFederation | 0:d4098155fec1 | 474 | void SeeedGrayOLED::sendData(unsigned char Data) |
NoFederation | 0:d4098155fec1 | 475 | { |
NoFederation | 0:d4098155fec1 | 476 | // Wire.beginTransmission(SeeedGrayOLED_Address); // begin I2C transmission |
NoFederation | 0:d4098155fec1 | 477 | // Wire.write(SeeedGrayOLED_Data_Mode); // data mode |
NoFederation | 0:d4098155fec1 | 478 | // Wire.write(Data); |
NoFederation | 0:d4098155fec1 | 479 | // Wire.endTransmission(); // stop I2C transmission |
NoFederation | 0:d4098155fec1 | 480 | char cmd[2]; |
NoFederation | 0:d4098155fec1 | 481 | cmd[0] = SeeedGrayOLED_Data_Mode; |
NoFederation | 0:d4098155fec1 | 482 | cmd[1] = Data; |
NoFederation | 0:d4098155fec1 | 483 | |
NoFederation | 0:d4098155fec1 | 484 | i2c_oled.write(SeeedGrayOLED_Address, cmd, 2); |
NoFederation | 0:d4098155fec1 | 485 | } |
NoFederation | 0:d4098155fec1 | 486 | |
NoFederation | 0:d4098155fec1 | 487 | void SeeedGrayOLED::setGrayLevel(unsigned char grayLevel) |
NoFederation | 0:d4098155fec1 | 488 | { |
NoFederation | 0:d4098155fec1 | 489 | grayH = (grayLevel << 4) & 0xF0; |
NoFederation | 0:d4098155fec1 | 490 | grayL = grayLevel & 0x0F; |
NoFederation | 0:d4098155fec1 | 491 | } |
NoFederation | 0:d4098155fec1 | 492 | |
NoFederation | 0:d4098155fec1 | 493 | void SeeedGrayOLED::putChar(unsigned char C) |
NoFederation | 0:d4098155fec1 | 494 | { |
NoFederation | 0:d4098155fec1 | 495 | if(C < 32 || C > 127) //Ignore non-printable ASCII characters. This can be modified for multilingual font. |
NoFederation | 0:d4098155fec1 | 496 | { |
NoFederation | 0:d4098155fec1 | 497 | C=' '; //Space |
NoFederation | 0:d4098155fec1 | 498 | } |
NoFederation | 0:d4098155fec1 | 499 | |
NoFederation | 0:d4098155fec1 | 500 | if(Drive_IC == SSD1327) |
NoFederation | 0:d4098155fec1 | 501 | { |
NoFederation | 0:d4098155fec1 | 502 | for(char i=0;i<8;i=i+2) |
NoFederation | 0:d4098155fec1 | 503 | { |
NoFederation | 0:d4098155fec1 | 504 | for(char j=0;j<8;j++) |
NoFederation | 0:d4098155fec1 | 505 | { |
NoFederation | 0:d4098155fec1 | 506 | // Character is constructed two pixel at a time using vertical mode from the default 8x8 font |
NoFederation | 0:d4098155fec1 | 507 | char c=0x00; |
NoFederation | 0:d4098155fec1 | 508 | char bit1= (BasicFont[C-32][i] >> j) & 0x01; |
NoFederation | 0:d4098155fec1 | 509 | char bit2= (BasicFont[C-32][i+1] >> j) & 0x01; |
NoFederation | 0:d4098155fec1 | 510 | // Each bit is changed to a nibble |
NoFederation | 0:d4098155fec1 | 511 | c|=(bit1)?grayH:0x00; |
NoFederation | 0:d4098155fec1 | 512 | c|=(bit2)?grayL:0x00; |
NoFederation | 0:d4098155fec1 | 513 | |
NoFederation | 0:d4098155fec1 | 514 | sendData(c); |
NoFederation | 0:d4098155fec1 | 515 | } |
NoFederation | 0:d4098155fec1 | 516 | } |
NoFederation | 0:d4098155fec1 | 517 | } |
NoFederation | 0:d4098155fec1 | 518 | else if(Drive_IC == SH1107G) |
NoFederation | 0:d4098155fec1 | 519 | { |
NoFederation | 0:d4098155fec1 | 520 | for(int i=0;i<8;i++) |
NoFederation | 0:d4098155fec1 | 521 | { |
NoFederation | 0:d4098155fec1 | 522 | //read bytes from code memory |
NoFederation | 0:d4098155fec1 | 523 | sendData(BasicFont[C-32][i]); //font array starts at 0, ASCII starts at 32. Hence the translation |
NoFederation | 0:d4098155fec1 | 524 | } |
NoFederation | 0:d4098155fec1 | 525 | } |
NoFederation | 0:d4098155fec1 | 526 | } |
NoFederation | 0:d4098155fec1 | 527 | |
NoFederation | 0:d4098155fec1 | 528 | |
NoFederation | 0:d4098155fec1 | 529 | |
NoFederation | 0:d4098155fec1 | 530 | void SeeedGrayOLED::putString(const char *String) |
NoFederation | 0:d4098155fec1 | 531 | { |
NoFederation | 0:d4098155fec1 | 532 | unsigned char i=0; |
NoFederation | 0:d4098155fec1 | 533 | while(String[i]) |
NoFederation | 0:d4098155fec1 | 534 | { |
NoFederation | 0:d4098155fec1 | 535 | putChar(String[i]); |
NoFederation | 0:d4098155fec1 | 536 | i++; |
NoFederation | 0:d4098155fec1 | 537 | } |
NoFederation | 0:d4098155fec1 | 538 | } |
NoFederation | 0:d4098155fec1 | 539 | |
NoFederation | 0:d4098155fec1 | 540 | unsigned char SeeedGrayOLED::putNumber(long long_num) |
NoFederation | 0:d4098155fec1 | 541 | { |
NoFederation | 0:d4098155fec1 | 542 | unsigned char char_buffer[10]=""; |
NoFederation | 0:d4098155fec1 | 543 | unsigned char i = 0; |
NoFederation | 0:d4098155fec1 | 544 | unsigned char f = 0; |
NoFederation | 0:d4098155fec1 | 545 | |
NoFederation | 0:d4098155fec1 | 546 | if (long_num < 0) |
NoFederation | 0:d4098155fec1 | 547 | { |
NoFederation | 0:d4098155fec1 | 548 | f=1; |
NoFederation | 0:d4098155fec1 | 549 | putChar('-'); |
NoFederation | 0:d4098155fec1 | 550 | long_num = -long_num; |
NoFederation | 0:d4098155fec1 | 551 | } |
NoFederation | 0:d4098155fec1 | 552 | else if (long_num == 0) |
NoFederation | 0:d4098155fec1 | 553 | { |
NoFederation | 0:d4098155fec1 | 554 | f=1; |
NoFederation | 0:d4098155fec1 | 555 | putChar('0'); |
NoFederation | 0:d4098155fec1 | 556 | return f; |
NoFederation | 0:d4098155fec1 | 557 | } |
NoFederation | 0:d4098155fec1 | 558 | |
NoFederation | 0:d4098155fec1 | 559 | while (long_num > 0) |
NoFederation | 0:d4098155fec1 | 560 | { |
NoFederation | 0:d4098155fec1 | 561 | char_buffer[i++] = long_num % 10; |
NoFederation | 0:d4098155fec1 | 562 | long_num /= 10; |
NoFederation | 0:d4098155fec1 | 563 | } |
NoFederation | 0:d4098155fec1 | 564 | |
NoFederation | 0:d4098155fec1 | 565 | f=f+i; |
NoFederation | 0:d4098155fec1 | 566 | for(; i > 0; i--) |
NoFederation | 0:d4098155fec1 | 567 | { |
NoFederation | 0:d4098155fec1 | 568 | putChar('0'+ char_buffer[i - 1]); |
NoFederation | 0:d4098155fec1 | 569 | } |
NoFederation | 0:d4098155fec1 | 570 | return f; |
NoFederation | 0:d4098155fec1 | 571 | |
NoFederation | 0:d4098155fec1 | 572 | } |
NoFederation | 0:d4098155fec1 | 573 | |
NoFederation | 0:d4098155fec1 | 574 | |
NoFederation | 0:d4098155fec1 | 575 | |
NoFederation | 0:d4098155fec1 | 576 | void SeeedGrayOLED::drawBitmap(const unsigned char *bitmaparray,int bytes) |
NoFederation | 0:d4098155fec1 | 577 | { |
NoFederation | 0:d4098155fec1 | 578 | if(Drive_IC == SSD1327) |
NoFederation | 0:d4098155fec1 | 579 | { |
NoFederation | 0:d4098155fec1 | 580 | char localAddressMode = addressingMode; |
NoFederation | 0:d4098155fec1 | 581 | if(addressingMode != HORIZONTAL_MODE) |
NoFederation | 0:d4098155fec1 | 582 | { |
NoFederation | 0:d4098155fec1 | 583 | //Bitmap is drawn in horizontal mode |
NoFederation | 0:d4098155fec1 | 584 | setHorizontalMode(); |
NoFederation | 0:d4098155fec1 | 585 | } |
NoFederation | 0:d4098155fec1 | 586 | |
NoFederation | 0:d4098155fec1 | 587 | for(int i=0;i<bytes;i++) |
NoFederation | 0:d4098155fec1 | 588 | { |
NoFederation | 0:d4098155fec1 | 589 | |
NoFederation | 0:d4098155fec1 | 590 | for(int j=0;j<8;j=j+2) |
NoFederation | 0:d4098155fec1 | 591 | { |
NoFederation | 0:d4098155fec1 | 592 | char c=0x00; |
NoFederation | 0:d4098155fec1 | 593 | char bit1 = bitmaparray[i] << j & 0x80; |
NoFederation | 0:d4098155fec1 | 594 | char bit2 = bitmaparray[i] << (j+1) & 0x80; |
NoFederation | 0:d4098155fec1 | 595 | |
NoFederation | 0:d4098155fec1 | 596 | // Each bit is changed to a nibble |
NoFederation | 0:d4098155fec1 | 597 | c|=(bit1)?grayH:0x00; |
NoFederation | 0:d4098155fec1 | 598 | // Each bit is changed to a nibble |
NoFederation | 0:d4098155fec1 | 599 | c|=(bit2)?grayL:0x00; |
NoFederation | 0:d4098155fec1 | 600 | sendData(c); |
NoFederation | 0:d4098155fec1 | 601 | } |
NoFederation | 0:d4098155fec1 | 602 | } |
NoFederation | 0:d4098155fec1 | 603 | if(localAddressMode == VERTICAL_MODE) |
NoFederation | 0:d4098155fec1 | 604 | { |
NoFederation | 0:d4098155fec1 | 605 | //If Vertical Mode was used earlier, restore it. |
NoFederation | 0:d4098155fec1 | 606 | setVerticalMode(); |
NoFederation | 0:d4098155fec1 | 607 | } |
NoFederation | 0:d4098155fec1 | 608 | } |
NoFederation | 0:d4098155fec1 | 609 | else if(Drive_IC == SH1107G) |
NoFederation | 0:d4098155fec1 | 610 | { |
NoFederation | 0:d4098155fec1 | 611 | int Row = 0, column_l = 0x00, column_h = 0x11; |
NoFederation | 0:d4098155fec1 | 612 | setHorizontalMode(); |
NoFederation | 0:d4098155fec1 | 613 | for(int i=0;i<bytes;i++) |
NoFederation | 0:d4098155fec1 | 614 | { |
NoFederation | 0:d4098155fec1 | 615 | sendCommand(0xb0 + Row); |
NoFederation | 0:d4098155fec1 | 616 | sendCommand(column_l); |
NoFederation | 0:d4098155fec1 | 617 | sendCommand(column_h); |
NoFederation | 0:d4098155fec1 | 618 | // byte bits = (byte)pgm_read_byte(&bitmaparray[i]); |
NoFederation | 0:d4098155fec1 | 619 | // byte tmp = 0x00; |
NoFederation | 0:d4098155fec1 | 620 | char bits = bitmaparray[i]; |
NoFederation | 0:d4098155fec1 | 621 | char tmp = 0x00; |
NoFederation | 0:d4098155fec1 | 622 | for(int b = 0; b < 8; b++) |
NoFederation | 0:d4098155fec1 | 623 | { |
NoFederation | 0:d4098155fec1 | 624 | // tmp |= ((bits>>(7-b))&0x01)<<b; |
NoFederation | 0:d4098155fec1 | 625 | tmp |= ((bits>>(7-b))&0x01)<<b; |
NoFederation | 0:d4098155fec1 | 626 | } |
NoFederation | 0:d4098155fec1 | 627 | // sendData(tmp); |
NoFederation | 0:d4098155fec1 | 628 | sendData(tmp); |
NoFederation | 0:d4098155fec1 | 629 | Row++; |
NoFederation | 0:d4098155fec1 | 630 | if(Row >= 12) |
NoFederation | 0:d4098155fec1 | 631 | { |
NoFederation | 0:d4098155fec1 | 632 | Row = 0; |
NoFederation | 0:d4098155fec1 | 633 | column_l++; |
NoFederation | 0:d4098155fec1 | 634 | if(column_l >= 16) |
NoFederation | 0:d4098155fec1 | 635 | { |
NoFederation | 0:d4098155fec1 | 636 | column_l = 0x00; |
NoFederation | 0:d4098155fec1 | 637 | column_h += 0x01; |
NoFederation | 0:d4098155fec1 | 638 | } |
NoFederation | 0:d4098155fec1 | 639 | } |
NoFederation | 0:d4098155fec1 | 640 | } |
NoFederation | 0:d4098155fec1 | 641 | } |
NoFederation | 0:d4098155fec1 | 642 | |
NoFederation | 0:d4098155fec1 | 643 | } |
NoFederation | 0:d4098155fec1 | 644 | |
NoFederation | 0:d4098155fec1 | 645 | void SeeedGrayOLED::setHorizontalScrollProperties(bool direction,unsigned char startRow, unsigned char endRow,unsigned char startColumn, unsigned char endColumn, unsigned char scrollSpeed) |
NoFederation | 0:d4098155fec1 | 646 | { |
NoFederation | 0:d4098155fec1 | 647 | /* |
NoFederation | 0:d4098155fec1 | 648 | Use the following defines for 'direction' : |
NoFederation | 0:d4098155fec1 | 649 | |
NoFederation | 0:d4098155fec1 | 650 | Scroll_Left |
NoFederation | 0:d4098155fec1 | 651 | Scroll_Right |
NoFederation | 0:d4098155fec1 | 652 | |
NoFederation | 0:d4098155fec1 | 653 | Use the following defines for 'scrollSpeed' : |
NoFederation | 0:d4098155fec1 | 654 | |
NoFederation | 0:d4098155fec1 | 655 | Scroll_2Frames |
NoFederation | 0:d4098155fec1 | 656 | Scroll_3Frames |
NoFederation | 0:d4098155fec1 | 657 | Scroll_4Frames |
NoFederation | 0:d4098155fec1 | 658 | Scroll_5Frames |
NoFederation | 0:d4098155fec1 | 659 | Scroll_25Frames |
NoFederation | 0:d4098155fec1 | 660 | Scroll_64Frames |
NoFederation | 0:d4098155fec1 | 661 | Scroll_128Frames |
NoFederation | 0:d4098155fec1 | 662 | Scroll_256Frames |
NoFederation | 0:d4098155fec1 | 663 | |
NoFederation | 0:d4098155fec1 | 664 | */ |
NoFederation | 0:d4098155fec1 | 665 | |
NoFederation | 0:d4098155fec1 | 666 | if(Scroll_Right == direction) |
NoFederation | 0:d4098155fec1 | 667 | { |
NoFederation | 0:d4098155fec1 | 668 | //Scroll Right |
NoFederation | 0:d4098155fec1 | 669 | sendCommand(0x27); |
NoFederation | 0:d4098155fec1 | 670 | } |
NoFederation | 0:d4098155fec1 | 671 | else |
NoFederation | 0:d4098155fec1 | 672 | { |
NoFederation | 0:d4098155fec1 | 673 | //Scroll Left |
NoFederation | 0:d4098155fec1 | 674 | sendCommand(0x26); |
NoFederation | 0:d4098155fec1 | 675 | } |
NoFederation | 0:d4098155fec1 | 676 | sendCommand(0x00); //Dummmy byte |
NoFederation | 0:d4098155fec1 | 677 | sendCommand(startRow); |
NoFederation | 0:d4098155fec1 | 678 | sendCommand(scrollSpeed); |
NoFederation | 0:d4098155fec1 | 679 | sendCommand(endRow); |
NoFederation | 0:d4098155fec1 | 680 | sendCommand(startColumn+8); |
NoFederation | 0:d4098155fec1 | 681 | sendCommand(endColumn+8); |
NoFederation | 0:d4098155fec1 | 682 | sendCommand(0x00); //Dummmy byte |
NoFederation | 0:d4098155fec1 | 683 | |
NoFederation | 0:d4098155fec1 | 684 | } |
NoFederation | 0:d4098155fec1 | 685 | |
NoFederation | 0:d4098155fec1 | 686 | void SeeedGrayOLED::activateScroll() |
NoFederation | 0:d4098155fec1 | 687 | { |
NoFederation | 0:d4098155fec1 | 688 | sendCommand(SeeedGrayOLED_Activate_Scroll_Cmd); |
NoFederation | 0:d4098155fec1 | 689 | } |
NoFederation | 0:d4098155fec1 | 690 | |
NoFederation | 0:d4098155fec1 | 691 | void SeeedGrayOLED::deactivateScroll() |
NoFederation | 0:d4098155fec1 | 692 | { |
NoFederation | 0:d4098155fec1 | 693 | sendCommand(SeeedGrayOLED_Dectivate_Scroll_Cmd); |
NoFederation | 0:d4098155fec1 | 694 | } |
NoFederation | 0:d4098155fec1 | 695 | |
NoFederation | 0:d4098155fec1 | 696 | void SeeedGrayOLED::setNormalDisplay() |
NoFederation | 0:d4098155fec1 | 697 | { |
NoFederation | 0:d4098155fec1 | 698 | sendCommand(SeeedGrayOLED_Normal_Display_Cmd); |
NoFederation | 0:d4098155fec1 | 699 | } |
NoFederation | 0:d4098155fec1 | 700 | |
NoFederation | 0:d4098155fec1 | 701 | void SeeedGrayOLED::setInverseDisplay() |
NoFederation | 0:d4098155fec1 | 702 | { |
NoFederation | 0:d4098155fec1 | 703 | sendCommand(SeeedGrayOLED_Inverse_Display_Cmd); |
NoFederation | 0:d4098155fec1 | 704 | } |
NoFederation | 0:d4098155fec1 | 705 | SeeedGrayOLED SeeedGrayOled; // Preinstantiate Objects |