Char font '~' changed to block for making Big number font

Dependents:   Real-time_Bus_Arrival_Alarm WaterLogger

Fork of SeeedGrayOLED by Dan Cohen

Committer:
hkjung
Date:
Wed Aug 26 05:10:45 2015 +0000
Revision:
2:d9f6f04e3d54
Parent:
1:05a64dcb7603
Char font '~' changed to block for making the big number font

Who changed what in which revision?

UserRevisionLine numberNew contents of line
danielashercohen 0:c035afedef89 1 /*
danielashercohen 0:c035afedef89 2 * SeeedGrayOLED.cpp
danielashercohen 1:05a64dcb7603 3 * SSD1327 Gray OLED Driver Library for SSD1327
danielashercohen 0:c035afedef89 4 *
danielashercohen 0:c035afedef89 5 * Copyright (c) 2011 seeed technology inc.
danielashercohen 0:c035afedef89 6 * Author : Visweswara R
danielashercohen 0:c035afedef89 7 * Create Time : Dec 2011
danielashercohen 0:c035afedef89 8 * Change Log :
danielashercohen 0:c035afedef89 9 *
danielashercohen 0:c035afedef89 10 * This library is free software; you can redistribute it and/or
danielashercohen 0:c035afedef89 11 * modify it under the terms of the GNU Lesser General Public
danielashercohen 0:c035afedef89 12 * License as published by the Free Software Foundation; either
danielashercohen 0:c035afedef89 13 * version 2.1 of the License, or (at your option) any later version.
danielashercohen 0:c035afedef89 14 *
danielashercohen 0:c035afedef89 15 * This library is distributed in the hope that it will be useful,
danielashercohen 0:c035afedef89 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
danielashercohen 0:c035afedef89 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
danielashercohen 0:c035afedef89 18 * Lesser General Public License for more details.
danielashercohen 0:c035afedef89 19 *
danielashercohen 0:c035afedef89 20 * You should have received a copy of the GNU Lesser General Public
danielashercohen 0:c035afedef89 21 * License along with this library; if not, write to the Free Software
danielashercohen 0:c035afedef89 22 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
danielashercohen 0:c035afedef89 23 */
danielashercohen 0:c035afedef89 24
danielashercohen 0:c035afedef89 25 #include "mbed.h"
danielashercohen 0:c035afedef89 26 #include "SeeedGrayOLED.h"
danielashercohen 0:c035afedef89 27 #include <stdio.h>
danielashercohen 0:c035afedef89 28 #include <string.h>
danielashercohen 0:c035afedef89 29
danielashercohen 0:c035afedef89 30 // 8x8 Font ASCII 32 - 127 Implemented
danielashercohen 0:c035afedef89 31 // Users can modify this to support more characters(glyphs)
danielashercohen 0:c035afedef89 32 // BasicFont is placed in code memory.
danielashercohen 0:c035afedef89 33
danielashercohen 0:c035afedef89 34 // This font can be freely used without any restriction(It is placed in public domain)
danielashercohen 0:c035afedef89 35 // const unsigned char BasicFont[][8] PROGMEM=
danielashercohen 0:c035afedef89 36
danielashercohen 0:c035afedef89 37
danielashercohen 0:c035afedef89 38 const uint8_t BasicFont[][8] = {
danielashercohen 0:c035afedef89 39 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 40 {0x00,0x00,0x5F,0x00,0x00,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 41 {0x00,0x00,0x07,0x00,0x07,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 42 {0x00,0x14,0x7F,0x14,0x7F,0x14,0x00,0x00},
danielashercohen 0:c035afedef89 43 {0x00,0x24,0x2A,0x7F,0x2A,0x12,0x00,0x00},
danielashercohen 0:c035afedef89 44 {0x00,0x23,0x13,0x08,0x64,0x62,0x00,0x00},
danielashercohen 0:c035afedef89 45 {0x00,0x36,0x49,0x55,0x22,0x50,0x00,0x00},
danielashercohen 0:c035afedef89 46 {0x00,0x00,0x05,0x03,0x00,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 47 {0x00,0x1C,0x22,0x41,0x00,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 48 {0x00,0x41,0x22,0x1C,0x00,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 49 {0x00,0x08,0x2A,0x1C,0x2A,0x08,0x00,0x00},
danielashercohen 0:c035afedef89 50 {0x00,0x08,0x08,0x3E,0x08,0x08,0x00,0x00},
danielashercohen 0:c035afedef89 51 {0x00,0xA0,0x60,0x00,0x00,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 52 {0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x00},
danielashercohen 0:c035afedef89 53 {0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 54 {0x00,0x20,0x10,0x08,0x04,0x02,0x00,0x00},
danielashercohen 0:c035afedef89 55 {0x00,0x3E,0x51,0x49,0x45,0x3E,0x00,0x00},
danielashercohen 0:c035afedef89 56 {0x00,0x00,0x42,0x7F,0x40,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 57 {0x00,0x62,0x51,0x49,0x49,0x46,0x00,0x00},
danielashercohen 0:c035afedef89 58 {0x00,0x22,0x41,0x49,0x49,0x36,0x00,0x00},
danielashercohen 0:c035afedef89 59 {0x00,0x18,0x14,0x12,0x7F,0x10,0x00,0x00},
danielashercohen 0:c035afedef89 60 {0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00},
danielashercohen 0:c035afedef89 61 {0x00,0x3C,0x4A,0x49,0x49,0x30,0x00,0x00},
danielashercohen 0:c035afedef89 62 {0x00,0x01,0x71,0x09,0x05,0x03,0x00,0x00},
danielashercohen 0:c035afedef89 63 {0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00},
danielashercohen 0:c035afedef89 64 {0x00,0x06,0x49,0x49,0x29,0x1E,0x00,0x00},
danielashercohen 0:c035afedef89 65 {0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 66 {0x00,0x00,0xAC,0x6C,0x00,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 67 {0x00,0x08,0x14,0x22,0x41,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 68 {0x00,0x14,0x14,0x14,0x14,0x14,0x00,0x00},
danielashercohen 0:c035afedef89 69 {0x00,0x41,0x22,0x14,0x08,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 70 {0x00,0x02,0x01,0x51,0x09,0x06,0x00,0x00},
danielashercohen 0:c035afedef89 71 {0x00,0x32,0x49,0x79,0x41,0x3E,0x00,0x00},
danielashercohen 0:c035afedef89 72 {0x00,0x7E,0x09,0x09,0x09,0x7E,0x00,0x00},
danielashercohen 0:c035afedef89 73 {0x00,0x7F,0x49,0x49,0x49,0x36,0x00,0x00},
danielashercohen 0:c035afedef89 74 {0x00,0x3E,0x41,0x41,0x41,0x22,0x00,0x00},
danielashercohen 0:c035afedef89 75 {0x00,0x7F,0x41,0x41,0x22,0x1C,0x00,0x00},
danielashercohen 0:c035afedef89 76 {0x00,0x7F,0x49,0x49,0x49,0x41,0x00,0x00},
danielashercohen 0:c035afedef89 77 {0x00,0x7F,0x09,0x09,0x09,0x01,0x00,0x00},
danielashercohen 0:c035afedef89 78 {0x00,0x3E,0x41,0x41,0x51,0x72,0x00,0x00},
danielashercohen 0:c035afedef89 79 {0x00,0x7F,0x08,0x08,0x08,0x7F,0x00,0x00},
danielashercohen 0:c035afedef89 80 {0x00,0x41,0x7F,0x41,0x00,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 81 {0x00,0x20,0x40,0x41,0x3F,0x01,0x00,0x00},
danielashercohen 0:c035afedef89 82 {0x00,0x7F,0x08,0x14,0x22,0x41,0x00,0x00},
danielashercohen 0:c035afedef89 83 {0x00,0x7F,0x40,0x40,0x40,0x40,0x00,0x00},
danielashercohen 0:c035afedef89 84 {0x00,0x7F,0x02,0x0C,0x02,0x7F,0x00,0x00},
danielashercohen 0:c035afedef89 85 {0x00,0x7F,0x04,0x08,0x10,0x7F,0x00,0x00},
danielashercohen 0:c035afedef89 86 {0x00,0x3E,0x41,0x41,0x41,0x3E,0x00,0x00},
danielashercohen 0:c035afedef89 87 {0x00,0x7F,0x09,0x09,0x09,0x06,0x00,0x00},
danielashercohen 0:c035afedef89 88 {0x00,0x3E,0x41,0x51,0x21,0x5E,0x00,0x00},
danielashercohen 0:c035afedef89 89 {0x00,0x7F,0x09,0x19,0x29,0x46,0x00,0x00},
danielashercohen 0:c035afedef89 90 {0x00,0x26,0x49,0x49,0x49,0x32,0x00,0x00},
danielashercohen 0:c035afedef89 91 {0x00,0x01,0x01,0x7F,0x01,0x01,0x00,0x00},
danielashercohen 0:c035afedef89 92 {0x00,0x3F,0x40,0x40,0x40,0x3F,0x00,0x00},
danielashercohen 0:c035afedef89 93 {0x00,0x1F,0x20,0x40,0x20,0x1F,0x00,0x00},
danielashercohen 0:c035afedef89 94 {0x00,0x3F,0x40,0x38,0x40,0x3F,0x00,0x00},
danielashercohen 0:c035afedef89 95 {0x00,0x63,0x14,0x08,0x14,0x63,0x00,0x00},
danielashercohen 0:c035afedef89 96 {0x00,0x03,0x04,0x78,0x04,0x03,0x00,0x00},
danielashercohen 0:c035afedef89 97 {0x00,0x61,0x51,0x49,0x45,0x43,0x00,0x00},
danielashercohen 0:c035afedef89 98 {0x00,0x7F,0x41,0x41,0x00,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 99 {0x00,0x02,0x04,0x08,0x10,0x20,0x00,0x00},
danielashercohen 0:c035afedef89 100 {0x00,0x41,0x41,0x7F,0x00,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 101 {0x00,0x04,0x02,0x01,0x02,0x04,0x00,0x00},
danielashercohen 0:c035afedef89 102 {0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00},
danielashercohen 0:c035afedef89 103 {0x00,0x01,0x02,0x04,0x00,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 104 {0x00,0x20,0x54,0x54,0x54,0x78,0x00,0x00},
danielashercohen 0:c035afedef89 105 {0x00,0x7F,0x48,0x44,0x44,0x38,0x00,0x00},
danielashercohen 0:c035afedef89 106 {0x00,0x38,0x44,0x44,0x28,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 107 {0x00,0x38,0x44,0x44,0x48,0x7F,0x00,0x00},
danielashercohen 0:c035afedef89 108 {0x00,0x38,0x54,0x54,0x54,0x18,0x00,0x00},
danielashercohen 0:c035afedef89 109 {0x00,0x08,0x7E,0x09,0x02,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 110 {0x00,0x18,0xA4,0xA4,0xA4,0x7C,0x00,0x00},
danielashercohen 0:c035afedef89 111 {0x00,0x7F,0x08,0x04,0x04,0x78,0x00,0x00},
danielashercohen 0:c035afedef89 112 {0x00,0x00,0x7D,0x00,0x00,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 113 {0x00,0x80,0x84,0x7D,0x00,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 114 {0x00,0x7F,0x10,0x28,0x44,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 115 {0x00,0x41,0x7F,0x40,0x00,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 116 {0x00,0x7C,0x04,0x18,0x04,0x78,0x00,0x00},
danielashercohen 0:c035afedef89 117 {0x00,0x7C,0x08,0x04,0x7C,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 118 {0x00,0x38,0x44,0x44,0x38,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 119 {0x00,0xFC,0x24,0x24,0x18,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 120 {0x00,0x18,0x24,0x24,0xFC,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 121 {0x00,0x00,0x7C,0x08,0x04,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 122 {0x00,0x48,0x54,0x54,0x24,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 123 {0x00,0x04,0x7F,0x44,0x00,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 124 {0x00,0x3C,0x40,0x40,0x7C,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 125 {0x00,0x1C,0x20,0x40,0x20,0x1C,0x00,0x00},
danielashercohen 0:c035afedef89 126 {0x00,0x3C,0x40,0x30,0x40,0x3C,0x00,0x00},
danielashercohen 0:c035afedef89 127 {0x00,0x44,0x28,0x10,0x28,0x44,0x00,0x00},
danielashercohen 0:c035afedef89 128 {0x00,0x1C,0xA0,0xA0,0x7C,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 129 {0x00,0x44,0x64,0x54,0x4C,0x44,0x00,0x00},
danielashercohen 0:c035afedef89 130 {0x00,0x08,0x36,0x41,0x00,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 131 {0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00},
danielashercohen 0:c035afedef89 132 {0x00,0x41,0x36,0x08,0x00,0x00,0x00,0x00},
hkjung 2:d9f6f04e3d54 133 {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff},//{0x00,0x02,0x01,0x01,0x02,0x01,0x00,0x00}, // '~' => block
danielashercohen 0:c035afedef89 134 {0x00,0x02,0x05,0x05,0x02,0x00,0x00,0x00}
danielashercohen 0:c035afedef89 135 };
danielashercohen 0:c035afedef89 136
danielashercohen 0:c035afedef89 137
danielashercohen 0:c035afedef89 138 SeeedGrayOLED::SeeedGrayOLED(PinName sda, PinName scl):
danielashercohen 0:c035afedef89 139 _device(sda, scl)
danielashercohen 0:c035afedef89 140 {
danielashercohen 0:c035afedef89 141 }
danielashercohen 0:c035afedef89 142
danielashercohen 0:c035afedef89 143
danielashercohen 0:c035afedef89 144 void SeeedGrayOLED::init(void)
danielashercohen 0:c035afedef89 145 {
danielashercohen 0:c035afedef89 146 sendCommand(0xFD); // Unlock OLED driver IC MCU interface from entering command. i.e: Accept commands
danielashercohen 0:c035afedef89 147 sendCommand(0x12);
danielashercohen 0:c035afedef89 148 sendCommand(0xAE); // Set display off
danielashercohen 0:c035afedef89 149 sendCommand(0xA8); // set multiplex ratio
danielashercohen 0:c035afedef89 150 sendCommand(0x5F); // 96
danielashercohen 0:c035afedef89 151 sendCommand(0xA1); // set display start line
danielashercohen 0:c035afedef89 152 sendCommand(0x00);
danielashercohen 0:c035afedef89 153 sendCommand(0xA2); // set display offset
danielashercohen 0:c035afedef89 154 sendCommand(0x60);
danielashercohen 0:c035afedef89 155 sendCommand(0xA0); // set remap
danielashercohen 0:c035afedef89 156 sendCommand(0x46);
danielashercohen 0:c035afedef89 157 sendCommand(0xAB); // set vdd internal
danielashercohen 0:c035afedef89 158 sendCommand(0x01); //
danielashercohen 0:c035afedef89 159 sendCommand(0x81); // set contrasr
danielashercohen 0:c035afedef89 160 sendCommand(0x53); // 100 nit
danielashercohen 0:c035afedef89 161 sendCommand(0xB1); // Set Phase Length
danielashercohen 0:c035afedef89 162 sendCommand(0X51); //
danielashercohen 0:c035afedef89 163 sendCommand(0xB3); // Set Display Clock Divide Ratio/Oscillator Frequency
danielashercohen 0:c035afedef89 164 sendCommand(0x01);
danielashercohen 0:c035afedef89 165 sendCommand(0xB9); //
danielashercohen 0:c035afedef89 166 sendCommand(0xBC); // set pre_charge voltage/VCOMH
danielashercohen 0:c035afedef89 167 sendCommand(0x08); // (0x08);
danielashercohen 0:c035afedef89 168 sendCommand(0xBE); // set VCOMH
danielashercohen 0:c035afedef89 169 sendCommand(0X07); // (0x07);
danielashercohen 0:c035afedef89 170 sendCommand(0xB6); // Set second pre-charge period
danielashercohen 0:c035afedef89 171 sendCommand(0x01); //
danielashercohen 0:c035afedef89 172 sendCommand(0xD5); // enable second precharge and enternal vsl
danielashercohen 0:c035afedef89 173 sendCommand(0X62); // (0x62);
danielashercohen 0:c035afedef89 174 sendCommand(0xA4); // Set Normal Display Mode
danielashercohen 0:c035afedef89 175 sendCommand(0x2E); // Deactivate Scroll
danielashercohen 0:c035afedef89 176 sendCommand(0xAF); // Switch on display
danielashercohen 0:c035afedef89 177 wait_ms(100);
danielashercohen 0:c035afedef89 178
danielashercohen 0:c035afedef89 179 // Row Address
danielashercohen 0:c035afedef89 180 sendCommand(0x75); // Set Row Address
danielashercohen 0:c035afedef89 181 sendCommand(0x00); // Start 0
danielashercohen 0:c035afedef89 182 sendCommand(0x5f); // End 95
danielashercohen 0:c035afedef89 183
danielashercohen 0:c035afedef89 184
danielashercohen 0:c035afedef89 185 // Column Address
danielashercohen 0:c035afedef89 186 sendCommand(0x15); // Set Column Address
danielashercohen 0:c035afedef89 187 sendCommand(0x08); // Start from 8th Column of driver IC. This is 0th Column for OLED
danielashercohen 0:c035afedef89 188 sendCommand(0x37); // End at (8 + 47)th column. Each Column has 2 pixels(segments)
danielashercohen 0:c035afedef89 189
danielashercohen 0:c035afedef89 190 // Init gray level for text. Default:Brightest White
danielashercohen 0:c035afedef89 191 grayH= 0xF0;
danielashercohen 0:c035afedef89 192 grayL= 0x0F;
danielashercohen 0:c035afedef89 193 }
danielashercohen 0:c035afedef89 194
danielashercohen 0:c035afedef89 195 void SeeedGrayOLED::sendCommand(unsigned char command)
danielashercohen 0:c035afedef89 196 {
danielashercohen 0:c035afedef89 197 int transmissionSuccessful;
danielashercohen 0:c035afedef89 198 _device.start();
danielashercohen 0:c035afedef89 199 transmissionSuccessful = _device.write(SeeedGrayOLED_Address << 1);
danielashercohen 0:c035afedef89 200 transmissionSuccessful |= _device.write(SeeedGrayOLED_Command_Mode);
danielashercohen 0:c035afedef89 201 transmissionSuccessful |= _device.write(command);
danielashercohen 0:c035afedef89 202 _device.stop();
danielashercohen 0:c035afedef89 203 // return (transmissionSuccessful);
danielashercohen 0:c035afedef89 204 }
danielashercohen 0:c035afedef89 205
danielashercohen 0:c035afedef89 206 void SeeedGrayOLED::setContrastLevel(unsigned char ContrastLevel)
danielashercohen 0:c035afedef89 207 {
danielashercohen 0:c035afedef89 208 sendCommand(SeeedGrayOLED_Set_ContrastLevel_Cmd);
danielashercohen 0:c035afedef89 209 sendCommand(ContrastLevel);
danielashercohen 0:c035afedef89 210 }
danielashercohen 0:c035afedef89 211
danielashercohen 0:c035afedef89 212 void SeeedGrayOLED::setHorizontalMode()
danielashercohen 0:c035afedef89 213 {
danielashercohen 0:c035afedef89 214 sendCommand(0xA0); // remap to
danielashercohen 0:c035afedef89 215 sendCommand(0x42); // horizontal mode
danielashercohen 0:c035afedef89 216
danielashercohen 0:c035afedef89 217 // Row Address
danielashercohen 0:c035afedef89 218 sendCommand(0x75); // Set Row Address
danielashercohen 0:c035afedef89 219 sendCommand(0x00); // Start 0
danielashercohen 0:c035afedef89 220 sendCommand(0x5f); // End 95
danielashercohen 0:c035afedef89 221
danielashercohen 0:c035afedef89 222 // Column Address
danielashercohen 0:c035afedef89 223 sendCommand(0x15); // Set Column Address
danielashercohen 0:c035afedef89 224 sendCommand(0x08); // Start from 8th Column of driver IC. This is 0th Column for OLED
danielashercohen 0:c035afedef89 225 sendCommand(0x37); // End at (8 + 47)th column. Each Column has 2 pixels(or segments)
danielashercohen 0:c035afedef89 226 }
danielashercohen 0:c035afedef89 227
danielashercohen 0:c035afedef89 228 void SeeedGrayOLED::setVerticalMode()
danielashercohen 0:c035afedef89 229 {
danielashercohen 0:c035afedef89 230 sendCommand(0xA0); // remap to
danielashercohen 0:c035afedef89 231 sendCommand(0x46); // Vertical mode
danielashercohen 0:c035afedef89 232 }
danielashercohen 0:c035afedef89 233
danielashercohen 0:c035afedef89 234 void SeeedGrayOLED::setTextXY(unsigned char Row, unsigned char Column)
danielashercohen 0:c035afedef89 235 {
danielashercohen 0:c035afedef89 236 //Column Address
danielashercohen 0:c035afedef89 237 sendCommand(0x15); /* Set Column Address */
danielashercohen 0:c035afedef89 238 sendCommand(0x08+(Column*4)); /* Start Column: Start from 8 */
danielashercohen 0:c035afedef89 239 sendCommand(0x37); /* End Column */
danielashercohen 0:c035afedef89 240 // Row Address
danielashercohen 0:c035afedef89 241 sendCommand(0x75); /* Set Row Address */
danielashercohen 0:c035afedef89 242 sendCommand(0x00+(Row*8)); /* Start Row*/
danielashercohen 0:c035afedef89 243 sendCommand(0x07+(Row*8)); /* End Row*/
danielashercohen 0:c035afedef89 244 }
danielashercohen 0:c035afedef89 245
danielashercohen 0:c035afedef89 246 void SeeedGrayOLED::clearDisplay()
danielashercohen 0:c035afedef89 247 {
danielashercohen 0:c035afedef89 248 unsigned char i,j;
danielashercohen 0:c035afedef89 249 for(j=0;j<48;j++)
danielashercohen 0:c035afedef89 250 {
danielashercohen 0:c035afedef89 251 for(i=0;i<96;i++) //clear all columns
danielashercohen 0:c035afedef89 252 {
danielashercohen 0:c035afedef89 253 sendData(0x00);
danielashercohen 0:c035afedef89 254 }
danielashercohen 0:c035afedef89 255 }
danielashercohen 0:c035afedef89 256
danielashercohen 0:c035afedef89 257 }
danielashercohen 0:c035afedef89 258
danielashercohen 0:c035afedef89 259 void SeeedGrayOLED::sendData(unsigned char Data)
danielashercohen 0:c035afedef89 260 {
danielashercohen 0:c035afedef89 261 int transmissionSuccessful;
danielashercohen 0:c035afedef89 262 _device.start();
danielashercohen 0:c035afedef89 263 transmissionSuccessful = _device.write(SeeedGrayOLED_Address << 1);
danielashercohen 0:c035afedef89 264 transmissionSuccessful |= _device.write(SeeedGrayOLED_Data_Mode);
danielashercohen 0:c035afedef89 265 transmissionSuccessful |= _device.write(Data);
danielashercohen 0:c035afedef89 266 _device.stop();
danielashercohen 0:c035afedef89 267 // return (transmissionSuccessful);
danielashercohen 0:c035afedef89 268 }
danielashercohen 0:c035afedef89 269
danielashercohen 0:c035afedef89 270 void SeeedGrayOLED::setGrayLevel(unsigned char grayLevel)
danielashercohen 0:c035afedef89 271 {
danielashercohen 0:c035afedef89 272 grayH = (grayLevel << 4) & 0xF0;
danielashercohen 0:c035afedef89 273 grayL = grayLevel & 0x0F;
danielashercohen 0:c035afedef89 274 }
danielashercohen 0:c035afedef89 275
danielashercohen 0:c035afedef89 276 void SeeedGrayOLED::putChar(unsigned char C)
danielashercohen 0:c035afedef89 277 {
danielashercohen 0:c035afedef89 278 if(C < 32 || C > 127) //Ignore non-printable ASCII characters. This can be modified for multilingual font.
danielashercohen 0:c035afedef89 279 {
danielashercohen 0:c035afedef89 280 C=' '; //Space
danielashercohen 0:c035afedef89 281 }
danielashercohen 0:c035afedef89 282
danielashercohen 0:c035afedef89 283
danielashercohen 0:c035afedef89 284 for(char i=0;i<8;i=i+2)
danielashercohen 0:c035afedef89 285 {
danielashercohen 0:c035afedef89 286 for(char j=0;j<8;j++)
danielashercohen 0:c035afedef89 287 {
danielashercohen 0:c035afedef89 288 // Character is constructed two pixel at a time using vertical mode from the default 8x8 font
danielashercohen 0:c035afedef89 289 char c=0x00;
danielashercohen 0:c035afedef89 290 char bit1=(BasicFont[C-32][i] >> j) & 0x01;
danielashercohen 0:c035afedef89 291 char bit2=(BasicFont[C-32][i+1] >> j) & 0x01;
danielashercohen 0:c035afedef89 292 // Each bit is changed to a nibble
danielashercohen 0:c035afedef89 293 c|=(bit1)?grayH:0x00;
danielashercohen 0:c035afedef89 294 c|=(bit2)?grayL:0x00;
danielashercohen 0:c035afedef89 295 sendData(c);
danielashercohen 0:c035afedef89 296 }
danielashercohen 0:c035afedef89 297 }
danielashercohen 0:c035afedef89 298 }
danielashercohen 0:c035afedef89 299
danielashercohen 0:c035afedef89 300 void SeeedGrayOLED::putString(const char *String)
danielashercohen 0:c035afedef89 301 {
danielashercohen 0:c035afedef89 302 unsigned char i=0;
danielashercohen 0:c035afedef89 303 while(String[i])
danielashercohen 0:c035afedef89 304 {
danielashercohen 0:c035afedef89 305 putChar(String[i]);
danielashercohen 0:c035afedef89 306 i++;
danielashercohen 0:c035afedef89 307 }
danielashercohen 0:c035afedef89 308 }
danielashercohen 0:c035afedef89 309
danielashercohen 0:c035afedef89 310 unsigned char SeeedGrayOLED::putNumber(long long_num)
danielashercohen 0:c035afedef89 311 {
danielashercohen 0:c035afedef89 312 unsigned char char_buffer[10]="";
danielashercohen 0:c035afedef89 313 unsigned char i = 0;
danielashercohen 0:c035afedef89 314 unsigned char f = 0;
danielashercohen 0:c035afedef89 315
danielashercohen 0:c035afedef89 316 if (long_num < 0)
danielashercohen 0:c035afedef89 317 {
danielashercohen 0:c035afedef89 318 f=1;
danielashercohen 0:c035afedef89 319 putChar('-');
danielashercohen 0:c035afedef89 320 long_num = -long_num;
danielashercohen 0:c035afedef89 321 }
danielashercohen 0:c035afedef89 322 else if (long_num == 0)
danielashercohen 0:c035afedef89 323 {
danielashercohen 0:c035afedef89 324 f=1;
danielashercohen 0:c035afedef89 325 putChar('0');
danielashercohen 0:c035afedef89 326 return f;
danielashercohen 0:c035afedef89 327 }
danielashercohen 0:c035afedef89 328
danielashercohen 0:c035afedef89 329 while (long_num > 0)
danielashercohen 0:c035afedef89 330 {
danielashercohen 0:c035afedef89 331 char_buffer[i++] = long_num % 10;
danielashercohen 0:c035afedef89 332 long_num /= 10;
danielashercohen 0:c035afedef89 333 }
danielashercohen 0:c035afedef89 334
danielashercohen 0:c035afedef89 335 f=f+i;
danielashercohen 0:c035afedef89 336 for(; i > 0; i--)
danielashercohen 0:c035afedef89 337 {
danielashercohen 0:c035afedef89 338 putChar('0'+ char_buffer[i - 1]);
danielashercohen 0:c035afedef89 339 }
danielashercohen 0:c035afedef89 340 return f;
danielashercohen 0:c035afedef89 341
danielashercohen 0:c035afedef89 342 }
danielashercohen 0:c035afedef89 343
danielashercohen 0:c035afedef89 344
danielashercohen 0:c035afedef89 345
danielashercohen 0:c035afedef89 346 void SeeedGrayOLED::drawBitmap(unsigned char *bitmaparray,int bytes)
danielashercohen 0:c035afedef89 347 {
danielashercohen 0:c035afedef89 348 char localAddressMode = addressingMode;
danielashercohen 0:c035afedef89 349 if(addressingMode != HORIZONTAL_MODE)
danielashercohen 0:c035afedef89 350 {
danielashercohen 0:c035afedef89 351 //Bitmap is drawn in horizontal mode
danielashercohen 0:c035afedef89 352 setHorizontalMode();
danielashercohen 0:c035afedef89 353 }
danielashercohen 0:c035afedef89 354
hkjung 2:d9f6f04e3d54 355 for(int i=0;i<bytes;i++)
danielashercohen 0:c035afedef89 356 {
danielashercohen 0:c035afedef89 357
hkjung 2:d9f6f04e3d54 358 for(int j=0;j<8;j=j+2)
danielashercohen 0:c035afedef89 359 {
danielashercohen 0:c035afedef89 360 char c=0x00;
danielashercohen 0:c035afedef89 361 char bit1=bitmaparray[i] << j & 0x80;
danielashercohen 0:c035afedef89 362 char bit2=bitmaparray[i] << (j+1) & 0x80;
danielashercohen 0:c035afedef89 363
danielashercohen 0:c035afedef89 364 // Each bit is changed to a nibble
danielashercohen 0:c035afedef89 365 c|=(bit1)?grayH:0x00;
danielashercohen 0:c035afedef89 366 // Each bit is changed to a nibble
danielashercohen 0:c035afedef89 367 c|=(bit2)?grayL:0x00;
danielashercohen 0:c035afedef89 368 sendData(c);
danielashercohen 0:c035afedef89 369 }
danielashercohen 0:c035afedef89 370 }
danielashercohen 0:c035afedef89 371 if(localAddressMode == VERTICAL_MODE)
danielashercohen 0:c035afedef89 372 {
danielashercohen 0:c035afedef89 373 //If Vertical Mode was used earlier, restore it.
danielashercohen 0:c035afedef89 374 setVerticalMode();
danielashercohen 0:c035afedef89 375 }
danielashercohen 0:c035afedef89 376
danielashercohen 0:c035afedef89 377 }
danielashercohen 0:c035afedef89 378
danielashercohen 0:c035afedef89 379 void SeeedGrayOLED::setHorizontalScrollProperties(bool direction,unsigned char startRow, unsigned char endRow,unsigned char startColumn, unsigned char endColumn, unsigned char scrollSpeed)
danielashercohen 0:c035afedef89 380 {
danielashercohen 0:c035afedef89 381 /*
danielashercohen 0:c035afedef89 382 Use the following defines for 'direction' :
danielashercohen 0:c035afedef89 383
danielashercohen 0:c035afedef89 384 Scroll_Left
danielashercohen 0:c035afedef89 385 Scroll_Right
danielashercohen 0:c035afedef89 386
danielashercohen 0:c035afedef89 387 Use the following defines for 'scrollSpeed' :
danielashercohen 0:c035afedef89 388
danielashercohen 0:c035afedef89 389 Scroll_2Frames
danielashercohen 0:c035afedef89 390 Scroll_3Frames
danielashercohen 0:c035afedef89 391 Scroll_4Frames
danielashercohen 0:c035afedef89 392 Scroll_5Frames
danielashercohen 0:c035afedef89 393 Scroll_25Frames
danielashercohen 0:c035afedef89 394 Scroll_64Frames
danielashercohen 0:c035afedef89 395 Scroll_128Frames
danielashercohen 0:c035afedef89 396 Scroll_256Frames
danielashercohen 0:c035afedef89 397
danielashercohen 0:c035afedef89 398 */
danielashercohen 0:c035afedef89 399
danielashercohen 0:c035afedef89 400 if(Scroll_Right == direction)
danielashercohen 0:c035afedef89 401 {
danielashercohen 0:c035afedef89 402 //Scroll Right
danielashercohen 0:c035afedef89 403 sendCommand(0x27);
danielashercohen 0:c035afedef89 404 }
danielashercohen 0:c035afedef89 405 else
danielashercohen 0:c035afedef89 406 {
danielashercohen 0:c035afedef89 407 //Scroll Left
danielashercohen 0:c035afedef89 408 sendCommand(0x26);
danielashercohen 0:c035afedef89 409 }
danielashercohen 0:c035afedef89 410 sendCommand(0x00); //Dummmy byte
danielashercohen 0:c035afedef89 411 sendCommand(startRow);
danielashercohen 0:c035afedef89 412 sendCommand(scrollSpeed);
danielashercohen 0:c035afedef89 413 sendCommand(endRow);
danielashercohen 0:c035afedef89 414 sendCommand(startColumn+8);
danielashercohen 0:c035afedef89 415 sendCommand(endColumn+8);
danielashercohen 0:c035afedef89 416 sendCommand(0x00); //Dummmy byte
danielashercohen 0:c035afedef89 417
danielashercohen 0:c035afedef89 418 }
danielashercohen 0:c035afedef89 419
danielashercohen 0:c035afedef89 420 void SeeedGrayOLED::activateScroll()
danielashercohen 0:c035afedef89 421 {
danielashercohen 0:c035afedef89 422 sendCommand(SeeedGrayOLED_Activate_Scroll_Cmd);
danielashercohen 0:c035afedef89 423 }
danielashercohen 0:c035afedef89 424
danielashercohen 0:c035afedef89 425 void SeeedGrayOLED::deactivateScroll()
danielashercohen 0:c035afedef89 426 {
danielashercohen 0:c035afedef89 427 sendCommand(SeeedGrayOLED_Dectivate_Scroll_Cmd);
danielashercohen 0:c035afedef89 428 }
danielashercohen 0:c035afedef89 429
danielashercohen 0:c035afedef89 430 void SeeedGrayOLED::setNormalDisplay()
danielashercohen 0:c035afedef89 431 {
danielashercohen 0:c035afedef89 432 sendCommand(SeeedGrayOLED_Normal_Display_Cmd);
danielashercohen 0:c035afedef89 433 }
danielashercohen 0:c035afedef89 434
danielashercohen 0:c035afedef89 435 void SeeedGrayOLED::setInverseDisplay()
danielashercohen 0:c035afedef89 436 {
danielashercohen 0:c035afedef89 437 sendCommand(SeeedGrayOLED_Inverse_Display_Cmd);
danielashercohen 0:c035afedef89 438 }
danielashercohen 0:c035afedef89 439
danielashercohen 0:c035afedef89 440