sadasd

Dependencies:   SSD1327

Committer:
NoFederation
Date:
Sun May 31 07:26:54 2020 +0000
Revision:
0:d4098155fec1
FFT

Who changed what in which revision?

UserRevisionLine numberNew 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