SPKDisplay - A mbed display class and processing imaging tools for 128x64 OLEDs using the SSD1305 driver, connected via SPI. This variant drives a Unigraphics oled on the same driver but in page mode. Includes a simple 5x7 ascii font

Dependents:   univision_oled

Fork of spk_oled_ssd1305 by Toby Harris

OLED driver and demo for Univision oled display 128x64.

/media/uploads/pegcjs/_scaled_20130128_133126.jpg

Modified Toby Harris' code to run page mode addressing in 4 wire SPI on the Univision UG-2864HSWEG01 128X64 unit - often found for sale on ebay. That's where I got mine anyhow.

Wiring this was fairly straightforward but you really do have to ground all the unused pins EXCEPT for number 8 to get it to work.

Here's the layout - I made a little carrier using a 2x8 connector and a couple of headers mounted on a small piece of stripboard. You can see all the wire links that are used to ground the unused pins. It was pretty awkward setting the display to run in 4 wire spi - had to desolder and resolder three smd o ohm links on the back o fhte pcb - ended up using a microscope to see them.

/media/uploads/pegcjs/_scaled_layout.jpg

Here is the output of the demo code.

/media/uploads/pegcjs/_scaled_itworks.jpg.jpg

In page mode the display is effectively divided up into 8 horizontal strips, each 8 pixels high so lends itself nicley to displaying text in a 5x7 font. I've included the 5x7 lcd font in the code below.

Code

Import programunivision_oled

driver demo for univision oled dispaly

#include "mbed.h"
#include "4spi_oled_ssd1305.h"

/* re writtten to cope with teh ssd1306 driven oled UG-2864HSWEG01 from univision
wiring for test circuit
OLED pins -FUNCTION-------MBED PINns
1 ----3.3V--- Vout (p40)
2 ----0.0V--- GND (p1)
3 ----------- GND (p1)
4 ----------- GND (p1)
5 ----------- GND (p1)
6 ----------- GND (p1)
7 ----------- GND (p1)
8 ----------- N/C
9 ----D1---- mosi (p5)
10 ---D0------sck(p7)
11 ----------- GND (p1)
12 ----------- GND (p1)
13 ---DC------ p10
14 ---RES----- p9
15 ---CS------ p8
*/



DigitalOut myled(LED1);

// Create object and load font
//SPKDisplay( mosiPin, clkPin,  csPin,  dcPin, resPin, Serial *debugSerial)
SPKDisplay screen(p5, p7, p8, p10, p9);
int main()
{
    char msg[22];
    sprintf(msg,"                      ");
//           01234567890abcdefghij

    int i=0;
    while(1==1) {
        myled=1;
        // nice logo output
        screen.welcome();
        wait(3);

        wait(2);
        for(i=0; i<5; i++) {
            myled=0;
            screen.inverse();
            wait(1);
            screen.normal();
            myled=1;
            wait(1);
        }

        screen.fontdemo();
        myled=0;
        wait(5);
        screen.clearBuffer();
        screen.sendBuffer();
        myled=1;
        wait(0.5);
        myled=0;
        wait(0.5);

        for(i=0; i<8; i++) {
            sprintf(msg,"HELLO WORLD %d",i);
            screen.textToBuffer(msg, i);
            screen.sendBuffer();
            screen.clearBuffer();
            myled=1;
            wait(1);
        }
    }


}
Committer:
pegcjs
Date:
Tue Jan 29 09:56:25 2013 +0000
Revision:
5:6d2aded0cf41
Library updated to allow page mode driving on a unigraphics OLED

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pegcjs 5:6d2aded0cf41 1 // OLED display using SSD1305 driver
pegcjs 5:6d2aded0cf41 2 // A library by *spark audio-visual
pegcjs 5:6d2aded0cf41 3
pegcjs 5:6d2aded0cf41 4 /* Copyright (c) 2011 Toby Harris, MIT License
pegcjs 5:6d2aded0cf41 5 *
pegcjs 5:6d2aded0cf41 6 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
pegcjs 5:6d2aded0cf41 7 * and associated documentation files (the "Software"), to deal in the Software without restriction,
pegcjs 5:6d2aded0cf41 8 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
pegcjs 5:6d2aded0cf41 9 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
pegcjs 5:6d2aded0cf41 10 * furnished to do so, subject to the following conditions:
pegcjs 5:6d2aded0cf41 11 *
pegcjs 5:6d2aded0cf41 12 * The above copyright notice and this permission notice shall be included in all copies or
pegcjs 5:6d2aded0cf41 13 * substantial portions of the Software.
pegcjs 5:6d2aded0cf41 14 *
pegcjs 5:6d2aded0cf41 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
pegcjs 5:6d2aded0cf41 16 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
pegcjs 5:6d2aded0cf41 17 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
pegcjs 5:6d2aded0cf41 18 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
pegcjs 5:6d2aded0cf41 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
pegcjs 5:6d2aded0cf41 20 */
pegcjs 5:6d2aded0cf41 21
pegcjs 5:6d2aded0cf41 22 #include "4spi_oled_ssd1305.h"
pegcjs 5:6d2aded0cf41 23 #include "mbed.h"
pegcjs 5:6d2aded0cf41 24
pegcjs 5:6d2aded0cf41 25 // re written to handle page mode on ssd1305 128x64 unit CJS 2013
pegcjs 5:6d2aded0cf41 26
pegcjs 5:6d2aded0cf41 27 // nice logo - note the typo....
pegcjs 5:6d2aded0cf41 28 static unsigned char logo_bits[] = {
pegcjs 5:6d2aded0cf41 29 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 30 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 31 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 32 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 33 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 34 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 35 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 36 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 37 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 38 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0x00,
pegcjs 5:6d2aded0cf41 39 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 40 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 41 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 42 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 43 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 44 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 45 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x04, 0x06,
pegcjs 5:6d2aded0cf41 46 0x06, 0xFC, 0xF8, 0x00, 0x04, 0x06, 0x06, 0xFC, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00,
pegcjs 5:6d2aded0cf41 47 0x04, 0x06, 0x06, 0x04, 0xFC, 0x60, 0x00, 0x60, 0xF8, 0x6C, 0x64, 0x66, 0x66, 0x64, 0x64, 0x78,
pegcjs 5:6d2aded0cf41 48 0x60, 0x00, 0x60, 0xFC, 0x04, 0x06, 0x06, 0x04, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 49 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 50 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 51 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 52 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 53 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 54 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00,
pegcjs 5:6d2aded0cf41 55 0x02, 0x06, 0x06, 0x02, 0x03, 0x00, 0x00, 0x00, 0x01, 0x03, 0x02, 0x06, 0x06, 0x06, 0x02, 0x02,
pegcjs 5:6d2aded0cf41 56 0x02, 0x00, 0x00, 0x03, 0x02, 0x06, 0x06, 0x02, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 57 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 58 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 59 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 60 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 61 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0xF0, 0xF0,
pegcjs 5:6d2aded0cf41 62 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0x30, 0x20, 0x20, 0xE0, 0x80, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 63 0x80, 0xE0, 0x20, 0x30, 0x30, 0x20, 0x20, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 64 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xC0, 0x60, 0x20, 0x30, 0x30, 0x20, 0x20, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 65 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 66 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
pegcjs 5:6d2aded0cf41 67 0x40, 0x60, 0x20, 0x30, 0x30, 0x30, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 68 0x80, 0xE0, 0x20, 0x20, 0x30, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 69 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0xFF, 0xFF,
pegcjs 5:6d2aded0cf41 70 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xB0, 0x98, 0x8C, 0x87, 0x81, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 71 0x01, 0x87, 0x84, 0x8C, 0x8C, 0x84, 0xC0, 0x7F, 0x0E, 0x00, 0x00, 0x00, 0x81, 0xC3, 0x34, 0x00,
pegcjs 5:6d2aded0cf41 72 0x10, 0x34, 0xC3, 0x80, 0x00, 0x00, 0x0E, 0x7F, 0x80, 0x84, 0x86, 0x86, 0x84, 0xFC, 0x30, 0x00,
pegcjs 5:6d2aded0cf41 73 0x00, 0x30, 0x38, 0x32, 0x31, 0x30, 0x30, 0xFF, 0xFF, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 74 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x3F,
pegcjs 5:6d2aded0cf41 75 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 76 0x80, 0x83, 0x82, 0x86, 0x84, 0x84, 0x84, 0xF8, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 77 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01,
pegcjs 5:6d2aded0cf41 78 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 79 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 80 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 81 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 82 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 83 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x18, 0x18, 0x08, 0x0F, 0x01, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 84 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 85 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 86 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 87 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 88 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 89 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 90 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 91 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 92 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
pegcjs 5:6d2aded0cf41 93 };
pegcjs 5:6d2aded0cf41 94
pegcjs 5:6d2aded0cf41 95
pegcjs 5:6d2aded0cf41 96 static unsigned char font[]= {
pegcjs 5:6d2aded0cf41 97 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 98 0x3E, 0x5B, 0x4F, 0x5B, 0x3E,
pegcjs 5:6d2aded0cf41 99 0x3E, 0x6B, 0x4F, 0x6B, 0x3E,
pegcjs 5:6d2aded0cf41 100 0x1C, 0x3E, 0x7C, 0x3E, 0x1C,
pegcjs 5:6d2aded0cf41 101 0x18, 0x3C, 0x7E, 0x3C, 0x18,
pegcjs 5:6d2aded0cf41 102 0x1C, 0x57, 0x7D, 0x57, 0x1C,
pegcjs 5:6d2aded0cf41 103 0x1C, 0x5E, 0x7F, 0x5E, 0x1C,
pegcjs 5:6d2aded0cf41 104 0x00, 0x18, 0x3C, 0x18, 0x00,
pegcjs 5:6d2aded0cf41 105 0xFF, 0xE7, 0xC3, 0xE7, 0xFF,
pegcjs 5:6d2aded0cf41 106 0x00, 0x18, 0x24, 0x18, 0x00,
pegcjs 5:6d2aded0cf41 107 0xFF, 0xE7, 0xDB, 0xE7, 0xFF,
pegcjs 5:6d2aded0cf41 108 0x30, 0x48, 0x3A, 0x06, 0x0E,
pegcjs 5:6d2aded0cf41 109 0x26, 0x29, 0x79, 0x29, 0x26,
pegcjs 5:6d2aded0cf41 110 0x40, 0x7F, 0x05, 0x05, 0x07,
pegcjs 5:6d2aded0cf41 111 0x40, 0x7F, 0x05, 0x25, 0x3F,
pegcjs 5:6d2aded0cf41 112 0x5A, 0x3C, 0xE7, 0x3C, 0x5A,
pegcjs 5:6d2aded0cf41 113 0x7F, 0x3E, 0x1C, 0x1C, 0x08,
pegcjs 5:6d2aded0cf41 114 0x08, 0x1C, 0x1C, 0x3E, 0x7F,
pegcjs 5:6d2aded0cf41 115 0x14, 0x22, 0x7F, 0x22, 0x14,
pegcjs 5:6d2aded0cf41 116 0x5F, 0x5F, 0x00, 0x5F, 0x5F,
pegcjs 5:6d2aded0cf41 117 0x06, 0x09, 0x7F, 0x01, 0x7F,
pegcjs 5:6d2aded0cf41 118 0x00, 0x66, 0x89, 0x95, 0x6A,
pegcjs 5:6d2aded0cf41 119 0x60, 0x60, 0x60, 0x60, 0x60,
pegcjs 5:6d2aded0cf41 120 0x94, 0xA2, 0xFF, 0xA2, 0x94,
pegcjs 5:6d2aded0cf41 121 0x08, 0x04, 0x7E, 0x04, 0x08,
pegcjs 5:6d2aded0cf41 122 0x10, 0x20, 0x7E, 0x20, 0x10,
pegcjs 5:6d2aded0cf41 123 0x08, 0x08, 0x2A, 0x1C, 0x08,
pegcjs 5:6d2aded0cf41 124 0x08, 0x1C, 0x2A, 0x08, 0x08,
pegcjs 5:6d2aded0cf41 125 0x1E, 0x10, 0x10, 0x10, 0x10,
pegcjs 5:6d2aded0cf41 126 0x0C, 0x1E, 0x0C, 0x1E, 0x0C,
pegcjs 5:6d2aded0cf41 127 0x30, 0x38, 0x3E, 0x38, 0x30,
pegcjs 5:6d2aded0cf41 128 0x06, 0x0E, 0x3E, 0x0E, 0x06,
pegcjs 5:6d2aded0cf41 129 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 130 0x00, 0x00, 0x5F, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 131 0x00, 0x07, 0x00, 0x07, 0x00,
pegcjs 5:6d2aded0cf41 132 0x14, 0x7F, 0x14, 0x7F, 0x14,
pegcjs 5:6d2aded0cf41 133 0x24, 0x2A, 0x7F, 0x2A, 0x12,
pegcjs 5:6d2aded0cf41 134 0x23, 0x13, 0x08, 0x64, 0x62,
pegcjs 5:6d2aded0cf41 135 0x36, 0x49, 0x56, 0x20, 0x50,
pegcjs 5:6d2aded0cf41 136 0x00, 0x08, 0x07, 0x03, 0x00,
pegcjs 5:6d2aded0cf41 137 0x00, 0x1C, 0x22, 0x41, 0x00,
pegcjs 5:6d2aded0cf41 138 0x00, 0x41, 0x22, 0x1C, 0x00,
pegcjs 5:6d2aded0cf41 139 0x2A, 0x1C, 0x7F, 0x1C, 0x2A,
pegcjs 5:6d2aded0cf41 140 0x08, 0x08, 0x3E, 0x08, 0x08,
pegcjs 5:6d2aded0cf41 141 0x00, 0x80, 0x70, 0x30, 0x00,
pegcjs 5:6d2aded0cf41 142 0x08, 0x08, 0x08, 0x08, 0x08,
pegcjs 5:6d2aded0cf41 143 0x00, 0x00, 0x60, 0x60, 0x00,
pegcjs 5:6d2aded0cf41 144 0x20, 0x10, 0x08, 0x04, 0x02,
pegcjs 5:6d2aded0cf41 145 0x3E, 0x51, 0x49, 0x45, 0x3E,
pegcjs 5:6d2aded0cf41 146 0x00, 0x42, 0x7F, 0x40, 0x00,
pegcjs 5:6d2aded0cf41 147 0x72, 0x49, 0x49, 0x49, 0x46,
pegcjs 5:6d2aded0cf41 148 0x21, 0x41, 0x49, 0x4D, 0x33,
pegcjs 5:6d2aded0cf41 149 0x18, 0x14, 0x12, 0x7F, 0x10,
pegcjs 5:6d2aded0cf41 150 0x27, 0x45, 0x45, 0x45, 0x39,
pegcjs 5:6d2aded0cf41 151 0x3C, 0x4A, 0x49, 0x49, 0x31,
pegcjs 5:6d2aded0cf41 152 0x41, 0x21, 0x11, 0x09, 0x07,
pegcjs 5:6d2aded0cf41 153 0x36, 0x49, 0x49, 0x49, 0x36,
pegcjs 5:6d2aded0cf41 154 0x46, 0x49, 0x49, 0x29, 0x1E,
pegcjs 5:6d2aded0cf41 155 0x00, 0x00, 0x14, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 156 0x00, 0x40, 0x34, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 157 0x00, 0x08, 0x14, 0x22, 0x41,
pegcjs 5:6d2aded0cf41 158 0x14, 0x14, 0x14, 0x14, 0x14,
pegcjs 5:6d2aded0cf41 159 0x00, 0x41, 0x22, 0x14, 0x08,
pegcjs 5:6d2aded0cf41 160 0x02, 0x01, 0x59, 0x09, 0x06,
pegcjs 5:6d2aded0cf41 161 0x3E, 0x41, 0x5D, 0x59, 0x4E,
pegcjs 5:6d2aded0cf41 162 0x7C, 0x12, 0x11, 0x12, 0x7C,
pegcjs 5:6d2aded0cf41 163 0x7F, 0x49, 0x49, 0x49, 0x36,
pegcjs 5:6d2aded0cf41 164 0x3E, 0x41, 0x41, 0x41, 0x22,
pegcjs 5:6d2aded0cf41 165 0x7F, 0x41, 0x41, 0x41, 0x3E,
pegcjs 5:6d2aded0cf41 166 0x7F, 0x49, 0x49, 0x49, 0x41,
pegcjs 5:6d2aded0cf41 167 0x7F, 0x09, 0x09, 0x09, 0x01,
pegcjs 5:6d2aded0cf41 168 0x3E, 0x41, 0x41, 0x51, 0x73,
pegcjs 5:6d2aded0cf41 169 0x7F, 0x08, 0x08, 0x08, 0x7F,
pegcjs 5:6d2aded0cf41 170 0x00, 0x41, 0x7F, 0x41, 0x00,
pegcjs 5:6d2aded0cf41 171 0x20, 0x40, 0x41, 0x3F, 0x01,
pegcjs 5:6d2aded0cf41 172 0x7F, 0x08, 0x14, 0x22, 0x41,
pegcjs 5:6d2aded0cf41 173 0x7F, 0x40, 0x40, 0x40, 0x40,
pegcjs 5:6d2aded0cf41 174 0x7F, 0x02, 0x1C, 0x02, 0x7F,
pegcjs 5:6d2aded0cf41 175 0x7F, 0x04, 0x08, 0x10, 0x7F,
pegcjs 5:6d2aded0cf41 176 0x3E, 0x41, 0x41, 0x41, 0x3E,
pegcjs 5:6d2aded0cf41 177 0x7F, 0x09, 0x09, 0x09, 0x06,
pegcjs 5:6d2aded0cf41 178 0x3E, 0x41, 0x51, 0x21, 0x5E,
pegcjs 5:6d2aded0cf41 179 0x7F, 0x09, 0x19, 0x29, 0x46,
pegcjs 5:6d2aded0cf41 180 0x26, 0x49, 0x49, 0x49, 0x32,
pegcjs 5:6d2aded0cf41 181 0x03, 0x01, 0x7F, 0x01, 0x03,
pegcjs 5:6d2aded0cf41 182 0x3F, 0x40, 0x40, 0x40, 0x3F,
pegcjs 5:6d2aded0cf41 183 0x1F, 0x20, 0x40, 0x20, 0x1F,
pegcjs 5:6d2aded0cf41 184 0x3F, 0x40, 0x38, 0x40, 0x3F,
pegcjs 5:6d2aded0cf41 185 0x63, 0x14, 0x08, 0x14, 0x63,
pegcjs 5:6d2aded0cf41 186 0x03, 0x04, 0x78, 0x04, 0x03,
pegcjs 5:6d2aded0cf41 187 0x61, 0x59, 0x49, 0x4D, 0x43,
pegcjs 5:6d2aded0cf41 188 0x00, 0x7F, 0x41, 0x41, 0x41,
pegcjs 5:6d2aded0cf41 189 0x02, 0x04, 0x08, 0x10, 0x20,
pegcjs 5:6d2aded0cf41 190 0x00, 0x41, 0x41, 0x41, 0x7F,
pegcjs 5:6d2aded0cf41 191 0x04, 0x02, 0x01, 0x02, 0x04,
pegcjs 5:6d2aded0cf41 192 0x40, 0x40, 0x40, 0x40, 0x40,
pegcjs 5:6d2aded0cf41 193 0x00, 0x03, 0x07, 0x08, 0x00,
pegcjs 5:6d2aded0cf41 194 0x20, 0x54, 0x54, 0x78, 0x40,
pegcjs 5:6d2aded0cf41 195 0x7F, 0x28, 0x44, 0x44, 0x38,
pegcjs 5:6d2aded0cf41 196 0x38, 0x44, 0x44, 0x44, 0x28,
pegcjs 5:6d2aded0cf41 197 0x38, 0x44, 0x44, 0x28, 0x7F,
pegcjs 5:6d2aded0cf41 198 0x38, 0x54, 0x54, 0x54, 0x18,
pegcjs 5:6d2aded0cf41 199 0x00, 0x08, 0x7E, 0x09, 0x02,
pegcjs 5:6d2aded0cf41 200 0x18, 0xA4, 0xA4, 0x9C, 0x78,
pegcjs 5:6d2aded0cf41 201 0x7F, 0x08, 0x04, 0x04, 0x78,
pegcjs 5:6d2aded0cf41 202 0x00, 0x44, 0x7D, 0x40, 0x00,
pegcjs 5:6d2aded0cf41 203 0x20, 0x40, 0x40, 0x3D, 0x00,
pegcjs 5:6d2aded0cf41 204 0x7F, 0x10, 0x28, 0x44, 0x00,
pegcjs 5:6d2aded0cf41 205 0x00, 0x41, 0x7F, 0x40, 0x00,
pegcjs 5:6d2aded0cf41 206 0x7C, 0x04, 0x78, 0x04, 0x78,
pegcjs 5:6d2aded0cf41 207 0x7C, 0x08, 0x04, 0x04, 0x78,
pegcjs 5:6d2aded0cf41 208 0x38, 0x44, 0x44, 0x44, 0x38,
pegcjs 5:6d2aded0cf41 209 0xFC, 0x18, 0x24, 0x24, 0x18,
pegcjs 5:6d2aded0cf41 210 0x18, 0x24, 0x24, 0x18, 0xFC,
pegcjs 5:6d2aded0cf41 211 0x7C, 0x08, 0x04, 0x04, 0x08,
pegcjs 5:6d2aded0cf41 212 0x48, 0x54, 0x54, 0x54, 0x24,
pegcjs 5:6d2aded0cf41 213 0x04, 0x04, 0x3F, 0x44, 0x24,
pegcjs 5:6d2aded0cf41 214 0x3C, 0x40, 0x40, 0x20, 0x7C,
pegcjs 5:6d2aded0cf41 215 0x1C, 0x20, 0x40, 0x20, 0x1C,
pegcjs 5:6d2aded0cf41 216 0x3C, 0x40, 0x30, 0x40, 0x3C,
pegcjs 5:6d2aded0cf41 217 0x44, 0x28, 0x10, 0x28, 0x44,
pegcjs 5:6d2aded0cf41 218 0x4C, 0x90, 0x90, 0x90, 0x7C,
pegcjs 5:6d2aded0cf41 219 0x44, 0x64, 0x54, 0x4C, 0x44,
pegcjs 5:6d2aded0cf41 220 0x00, 0x08, 0x36, 0x41, 0x00,
pegcjs 5:6d2aded0cf41 221 0x00, 0x00, 0x77, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 222 0x00, 0x41, 0x36, 0x08, 0x00,
pegcjs 5:6d2aded0cf41 223 0x02, 0x01, 0x02, 0x04, 0x02,
pegcjs 5:6d2aded0cf41 224 0x3C, 0x26, 0x23, 0x26, 0x3C,
pegcjs 5:6d2aded0cf41 225 0x1E, 0xA1, 0xA1, 0x61, 0x12,
pegcjs 5:6d2aded0cf41 226 0x3A, 0x40, 0x40, 0x20, 0x7A,
pegcjs 5:6d2aded0cf41 227 0x38, 0x54, 0x54, 0x55, 0x59,
pegcjs 5:6d2aded0cf41 228 0x21, 0x55, 0x55, 0x79, 0x41,
pegcjs 5:6d2aded0cf41 229 0x21, 0x54, 0x54, 0x78, 0x41,
pegcjs 5:6d2aded0cf41 230 0x21, 0x55, 0x54, 0x78, 0x40,
pegcjs 5:6d2aded0cf41 231 0x20, 0x54, 0x55, 0x79, 0x40,
pegcjs 5:6d2aded0cf41 232 0x0C, 0x1E, 0x52, 0x72, 0x12,
pegcjs 5:6d2aded0cf41 233 0x39, 0x55, 0x55, 0x55, 0x59,
pegcjs 5:6d2aded0cf41 234 0x39, 0x54, 0x54, 0x54, 0x59,
pegcjs 5:6d2aded0cf41 235 0x39, 0x55, 0x54, 0x54, 0x58,
pegcjs 5:6d2aded0cf41 236 0x00, 0x00, 0x45, 0x7C, 0x41,
pegcjs 5:6d2aded0cf41 237 0x00, 0x02, 0x45, 0x7D, 0x42,
pegcjs 5:6d2aded0cf41 238 0x00, 0x01, 0x45, 0x7C, 0x40,
pegcjs 5:6d2aded0cf41 239 0xF0, 0x29, 0x24, 0x29, 0xF0,
pegcjs 5:6d2aded0cf41 240 0xF0, 0x28, 0x25, 0x28, 0xF0,
pegcjs 5:6d2aded0cf41 241 0x7C, 0x54, 0x55, 0x45, 0x00,
pegcjs 5:6d2aded0cf41 242 0x20, 0x54, 0x54, 0x7C, 0x54,
pegcjs 5:6d2aded0cf41 243 0x7C, 0x0A, 0x09, 0x7F, 0x49,
pegcjs 5:6d2aded0cf41 244 0x32, 0x49, 0x49, 0x49, 0x32,
pegcjs 5:6d2aded0cf41 245 0x32, 0x48, 0x48, 0x48, 0x32,
pegcjs 5:6d2aded0cf41 246 0x32, 0x4A, 0x48, 0x48, 0x30,
pegcjs 5:6d2aded0cf41 247 0x3A, 0x41, 0x41, 0x21, 0x7A,
pegcjs 5:6d2aded0cf41 248 0x3A, 0x42, 0x40, 0x20, 0x78,
pegcjs 5:6d2aded0cf41 249 0x00, 0x9D, 0xA0, 0xA0, 0x7D,
pegcjs 5:6d2aded0cf41 250 0x39, 0x44, 0x44, 0x44, 0x39,
pegcjs 5:6d2aded0cf41 251 0x3D, 0x40, 0x40, 0x40, 0x3D,
pegcjs 5:6d2aded0cf41 252 0x3C, 0x24, 0xFF, 0x24, 0x24,
pegcjs 5:6d2aded0cf41 253 0x48, 0x7E, 0x49, 0x43, 0x66,
pegcjs 5:6d2aded0cf41 254 0x2B, 0x2F, 0xFC, 0x2F, 0x2B,
pegcjs 5:6d2aded0cf41 255 0xFF, 0x09, 0x29, 0xF6, 0x20,
pegcjs 5:6d2aded0cf41 256 0xC0, 0x88, 0x7E, 0x09, 0x03,
pegcjs 5:6d2aded0cf41 257 0x20, 0x54, 0x54, 0x79, 0x41,
pegcjs 5:6d2aded0cf41 258 0x00, 0x00, 0x44, 0x7D, 0x41,
pegcjs 5:6d2aded0cf41 259 0x30, 0x48, 0x48, 0x4A, 0x32,
pegcjs 5:6d2aded0cf41 260 0x38, 0x40, 0x40, 0x22, 0x7A,
pegcjs 5:6d2aded0cf41 261 0x00, 0x7A, 0x0A, 0x0A, 0x72,
pegcjs 5:6d2aded0cf41 262 0x7D, 0x0D, 0x19, 0x31, 0x7D,
pegcjs 5:6d2aded0cf41 263 0x26, 0x29, 0x29, 0x2F, 0x28,
pegcjs 5:6d2aded0cf41 264 0x26, 0x29, 0x29, 0x29, 0x26,
pegcjs 5:6d2aded0cf41 265 0x30, 0x48, 0x4D, 0x40, 0x20,
pegcjs 5:6d2aded0cf41 266 0x38, 0x08, 0x08, 0x08, 0x08,
pegcjs 5:6d2aded0cf41 267 0x08, 0x08, 0x08, 0x08, 0x38,
pegcjs 5:6d2aded0cf41 268 0x2F, 0x10, 0xC8, 0xAC, 0xBA,
pegcjs 5:6d2aded0cf41 269 0x2F, 0x10, 0x28, 0x34, 0xFA,
pegcjs 5:6d2aded0cf41 270 0x00, 0x00, 0x7B, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 271 0x08, 0x14, 0x2A, 0x14, 0x22,
pegcjs 5:6d2aded0cf41 272 0x22, 0x14, 0x2A, 0x14, 0x08,
pegcjs 5:6d2aded0cf41 273 0xAA, 0x00, 0x55, 0x00, 0xAA,
pegcjs 5:6d2aded0cf41 274 0xAA, 0x55, 0xAA, 0x55, 0xAA,
pegcjs 5:6d2aded0cf41 275 0x00, 0x00, 0x00, 0xFF, 0x00,
pegcjs 5:6d2aded0cf41 276 0x10, 0x10, 0x10, 0xFF, 0x00,
pegcjs 5:6d2aded0cf41 277 0x14, 0x14, 0x14, 0xFF, 0x00,
pegcjs 5:6d2aded0cf41 278 0x10, 0x10, 0xFF, 0x00, 0xFF,
pegcjs 5:6d2aded0cf41 279 0x10, 0x10, 0xF0, 0x10, 0xF0,
pegcjs 5:6d2aded0cf41 280 0x14, 0x14, 0x14, 0xFC, 0x00,
pegcjs 5:6d2aded0cf41 281 0x14, 0x14, 0xF7, 0x00, 0xFF,
pegcjs 5:6d2aded0cf41 282 0x00, 0x00, 0xFF, 0x00, 0xFF,
pegcjs 5:6d2aded0cf41 283 0x14, 0x14, 0xF4, 0x04, 0xFC,
pegcjs 5:6d2aded0cf41 284 0x14, 0x14, 0x17, 0x10, 0x1F,
pegcjs 5:6d2aded0cf41 285 0x10, 0x10, 0x1F, 0x10, 0x1F,
pegcjs 5:6d2aded0cf41 286 0x14, 0x14, 0x14, 0x1F, 0x00,
pegcjs 5:6d2aded0cf41 287 0x10, 0x10, 0x10, 0xF0, 0x00,
pegcjs 5:6d2aded0cf41 288 0x00, 0x00, 0x00, 0x1F, 0x10,
pegcjs 5:6d2aded0cf41 289 0x10, 0x10, 0x10, 0x1F, 0x10,
pegcjs 5:6d2aded0cf41 290 0x10, 0x10, 0x10, 0xF0, 0x10,
pegcjs 5:6d2aded0cf41 291 0x00, 0x00, 0x00, 0xFF, 0x10,
pegcjs 5:6d2aded0cf41 292 0x10, 0x10, 0x10, 0x10, 0x10,
pegcjs 5:6d2aded0cf41 293 0x10, 0x10, 0x10, 0xFF, 0x10,
pegcjs 5:6d2aded0cf41 294 0x00, 0x00, 0x00, 0xFF, 0x14,
pegcjs 5:6d2aded0cf41 295 0x00, 0x00, 0xFF, 0x00, 0xFF,
pegcjs 5:6d2aded0cf41 296 0x00, 0x00, 0x1F, 0x10, 0x17,
pegcjs 5:6d2aded0cf41 297 0x00, 0x00, 0xFC, 0x04, 0xF4,
pegcjs 5:6d2aded0cf41 298 0x14, 0x14, 0x17, 0x10, 0x17,
pegcjs 5:6d2aded0cf41 299 0x14, 0x14, 0xF4, 0x04, 0xF4,
pegcjs 5:6d2aded0cf41 300 0x00, 0x00, 0xFF, 0x00, 0xF7,
pegcjs 5:6d2aded0cf41 301 0x14, 0x14, 0x14, 0x14, 0x14,
pegcjs 5:6d2aded0cf41 302 0x14, 0x14, 0xF7, 0x00, 0xF7,
pegcjs 5:6d2aded0cf41 303 0x14, 0x14, 0x14, 0x17, 0x14,
pegcjs 5:6d2aded0cf41 304 0x10, 0x10, 0x1F, 0x10, 0x1F,
pegcjs 5:6d2aded0cf41 305 0x14, 0x14, 0x14, 0xF4, 0x14,
pegcjs 5:6d2aded0cf41 306 0x10, 0x10, 0xF0, 0x10, 0xF0,
pegcjs 5:6d2aded0cf41 307 0x00, 0x00, 0x1F, 0x10, 0x1F,
pegcjs 5:6d2aded0cf41 308 0x00, 0x00, 0x00, 0x1F, 0x14,
pegcjs 5:6d2aded0cf41 309 0x00, 0x00, 0x00, 0xFC, 0x14,
pegcjs 5:6d2aded0cf41 310 0x00, 0x00, 0xF0, 0x10, 0xF0,
pegcjs 5:6d2aded0cf41 311 0x10, 0x10, 0xFF, 0x10, 0xFF,
pegcjs 5:6d2aded0cf41 312 0x14, 0x14, 0x14, 0xFF, 0x14,
pegcjs 5:6d2aded0cf41 313 0x10, 0x10, 0x10, 0x1F, 0x00,
pegcjs 5:6d2aded0cf41 314 0x00, 0x00, 0x00, 0xF0, 0x10,
pegcjs 5:6d2aded0cf41 315 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
pegcjs 5:6d2aded0cf41 316 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
pegcjs 5:6d2aded0cf41 317 0xFF, 0xFF, 0xFF, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 318 0x00, 0x00, 0x00, 0xFF, 0xFF,
pegcjs 5:6d2aded0cf41 319 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
pegcjs 5:6d2aded0cf41 320 0x38, 0x44, 0x44, 0x38, 0x44,
pegcjs 5:6d2aded0cf41 321 0x7C, 0x2A, 0x2A, 0x3E, 0x14,
pegcjs 5:6d2aded0cf41 322 0x7E, 0x02, 0x02, 0x06, 0x06,
pegcjs 5:6d2aded0cf41 323 0x02, 0x7E, 0x02, 0x7E, 0x02,
pegcjs 5:6d2aded0cf41 324 0x63, 0x55, 0x49, 0x41, 0x63,
pegcjs 5:6d2aded0cf41 325 0x38, 0x44, 0x44, 0x3C, 0x04,
pegcjs 5:6d2aded0cf41 326 0x40, 0x7E, 0x20, 0x1E, 0x20,
pegcjs 5:6d2aded0cf41 327 0x06, 0x02, 0x7E, 0x02, 0x02,
pegcjs 5:6d2aded0cf41 328 0x99, 0xA5, 0xE7, 0xA5, 0x99,
pegcjs 5:6d2aded0cf41 329 0x1C, 0x2A, 0x49, 0x2A, 0x1C,
pegcjs 5:6d2aded0cf41 330 0x4C, 0x72, 0x01, 0x72, 0x4C,
pegcjs 5:6d2aded0cf41 331 0x30, 0x4A, 0x4D, 0x4D, 0x30,
pegcjs 5:6d2aded0cf41 332 0x30, 0x48, 0x78, 0x48, 0x30,
pegcjs 5:6d2aded0cf41 333 0xBC, 0x62, 0x5A, 0x46, 0x3D,
pegcjs 5:6d2aded0cf41 334 0x3E, 0x49, 0x49, 0x49, 0x00,
pegcjs 5:6d2aded0cf41 335 0x7E, 0x01, 0x01, 0x01, 0x7E,
pegcjs 5:6d2aded0cf41 336 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
pegcjs 5:6d2aded0cf41 337 0x44, 0x44, 0x5F, 0x44, 0x44,
pegcjs 5:6d2aded0cf41 338 0x40, 0x51, 0x4A, 0x44, 0x40,
pegcjs 5:6d2aded0cf41 339 0x40, 0x44, 0x4A, 0x51, 0x40,
pegcjs 5:6d2aded0cf41 340 0x00, 0x00, 0xFF, 0x01, 0x03,
pegcjs 5:6d2aded0cf41 341 0xE0, 0x80, 0xFF, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 342 0x08, 0x08, 0x6B, 0x6B, 0x08,
pegcjs 5:6d2aded0cf41 343 0x36, 0x12, 0x36, 0x24, 0x36,
pegcjs 5:6d2aded0cf41 344 0x06, 0x0F, 0x09, 0x0F, 0x06,
pegcjs 5:6d2aded0cf41 345 0x00, 0x00, 0x18, 0x18, 0x00,
pegcjs 5:6d2aded0cf41 346 0x00, 0x00, 0x10, 0x10, 0x00,
pegcjs 5:6d2aded0cf41 347 0x30, 0x40, 0xFF, 0x01, 0x01,
pegcjs 5:6d2aded0cf41 348 0x00, 0x1F, 0x01, 0x01, 0x1E,
pegcjs 5:6d2aded0cf41 349 0x00, 0x19, 0x1D, 0x17, 0x12,
pegcjs 5:6d2aded0cf41 350 0x00, 0x3C, 0x3C, 0x3C, 0x3C,
pegcjs 5:6d2aded0cf41 351 0x00, 0x00, 0x00, 0x00, 0x00,
pegcjs 5:6d2aded0cf41 352 };
pegcjs 5:6d2aded0cf41 353
pegcjs 5:6d2aded0cf41 354
pegcjs 5:6d2aded0cf41 355 SPKDisplay::SPKDisplay(PinName mosiPin, PinName clkPin, PinName csPin, PinName dcPin, PinName resPin, Serial *debugSerial)
pegcjs 5:6d2aded0cf41 356 {
pegcjs 5:6d2aded0cf41 357 bufferHasChanged = false;
pegcjs 5:6d2aded0cf41 358
pegcjs 5:6d2aded0cf41 359 fontStartCharacter = NULL;
pegcjs 5:6d2aded0cf41 360 fontEndCharacter = NULL;
pegcjs 5:6d2aded0cf41 361 fontCharacters = NULL;
pegcjs 5:6d2aded0cf41 362
pegcjs 5:6d2aded0cf41 363 spi = new SPI(mosiPin, NC, clkPin);
pegcjs 5:6d2aded0cf41 364 spi->format(8,3);
pegcjs 5:6d2aded0cf41 365 // changed to 9600 to test
pegcjs 5:6d2aded0cf41 366 spi->frequency(1000000);
pegcjs 5:6d2aded0cf41 367
pegcjs 5:6d2aded0cf41 368 cs = new DigitalOut(csPin);
pegcjs 5:6d2aded0cf41 369 dc = new DigitalOut(dcPin);
pegcjs 5:6d2aded0cf41 370 res = new DigitalOut(resPin);
pegcjs 5:6d2aded0cf41 371
pegcjs 5:6d2aded0cf41 372 // Link up debug Serial object
pegcjs 5:6d2aded0cf41 373 // Passing in shared object as debugging is shared between all DVI mixer functions
pegcjs 5:6d2aded0cf41 374 debug = debugSerial;
pegcjs 5:6d2aded0cf41 375
pegcjs 5:6d2aded0cf41 376 setup();
pegcjs 5:6d2aded0cf41 377
pegcjs 5:6d2aded0cf41 378 clearBuffer();
pegcjs 5:6d2aded0cf41 379
pegcjs 5:6d2aded0cf41 380 if (debug) debug->printf("SPKDisplay loaded\n\r");
pegcjs 5:6d2aded0cf41 381 }
pegcjs 5:6d2aded0cf41 382
pegcjs 5:6d2aded0cf41 383 // set display for black on white
pegcjs 5:6d2aded0cf41 384 void SPKDisplay::inverse()
pegcjs 5:6d2aded0cf41 385 {
pegcjs 5:6d2aded0cf41 386 *dc=0;
pegcjs 5:6d2aded0cf41 387 *cs=0;
pegcjs 5:6d2aded0cf41 388 spi->write(0xA7);
pegcjs 5:6d2aded0cf41 389 *dc=1;
pegcjs 5:6d2aded0cf41 390 *cs=1;
pegcjs 5:6d2aded0cf41 391 }
pegcjs 5:6d2aded0cf41 392
pegcjs 5:6d2aded0cf41 393 //set display for white on black (normal state after reset)
pegcjs 5:6d2aded0cf41 394 void SPKDisplay::normal()
pegcjs 5:6d2aded0cf41 395 {
pegcjs 5:6d2aded0cf41 396 *dc=0;
pegcjs 5:6d2aded0cf41 397 *cs=0;
pegcjs 5:6d2aded0cf41 398 spi->write(0xA6);
pegcjs 5:6d2aded0cf41 399 *dc=1;
pegcjs 5:6d2aded0cf41 400 *cs=1;
pegcjs 5:6d2aded0cf41 401 }
pegcjs 5:6d2aded0cf41 402
pegcjs 5:6d2aded0cf41 403 void SPKDisplay::displayPower(int P)
pegcjs 5:6d2aded0cf41 404 {
pegcjs 5:6d2aded0cf41 405 *dc=0;
pegcjs 5:6d2aded0cf41 406 *cs=0;
pegcjs 5:6d2aded0cf41 407 if(P==0) spi->write(0xAE);
pegcjs 5:6d2aded0cf41 408 else spi->write(0xAF);
pegcjs 5:6d2aded0cf41 409 *dc=1;
pegcjs 5:6d2aded0cf41 410 *cs=1;
pegcjs 5:6d2aded0cf41 411
pegcjs 5:6d2aded0cf41 412 }
pegcjs 5:6d2aded0cf41 413
pegcjs 5:6d2aded0cf41 414
pegcjs 5:6d2aded0cf41 415 void SPKDisplay::clearBuffer()
pegcjs 5:6d2aded0cf41 416 {
pegcjs 5:6d2aded0cf41 417 memset(buffer, 0, bufferCount);
pegcjs 5:6d2aded0cf41 418 bufferHasChanged = true;
pegcjs 5:6d2aded0cf41 419 }
pegcjs 5:6d2aded0cf41 420
pegcjs 5:6d2aded0cf41 421 void SPKDisplay::imageToBuffer(const uint8_t* image)
pegcjs 5:6d2aded0cf41 422 {
pegcjs 5:6d2aded0cf41 423 memcpy(buffer, image, bufferCount);
pegcjs 5:6d2aded0cf41 424 bufferHasChanged = true;
pegcjs 5:6d2aded0cf41 425 }
pegcjs 5:6d2aded0cf41 426
pegcjs 5:6d2aded0cf41 427 void SPKDisplay::clearBufferRow(int row)
pegcjs 5:6d2aded0cf41 428 {
pegcjs 5:6d2aded0cf41 429 // Range check
pegcjs 5:6d2aded0cf41 430 if (row >= 8) {
pegcjs 5:6d2aded0cf41 431 if (debug) debug->printf("SPKDisplay::clearBufferRow sent out of bounds row");
pegcjs 5:6d2aded0cf41 432 return;
pegcjs 5:6d2aded0cf41 433 }
pegcjs 5:6d2aded0cf41 434 int bStart = row*bufferWidth;
pegcjs 5:6d2aded0cf41 435 int bEnd = bStart + pixelWidth;
pegcjs 5:6d2aded0cf41 436
pegcjs 5:6d2aded0cf41 437 for (int bPos = bStart; bPos <= bEnd; bPos++) {
pegcjs 5:6d2aded0cf41 438 buffer[bPos] = 0x00;
pegcjs 5:6d2aded0cf41 439 }
pegcjs 5:6d2aded0cf41 440
pegcjs 5:6d2aded0cf41 441 bufferHasChanged = true;
pegcjs 5:6d2aded0cf41 442 }
pegcjs 5:6d2aded0cf41 443
pegcjs 5:6d2aded0cf41 444 void SPKDisplay::horizLineToBuffer(int y)
pegcjs 5:6d2aded0cf41 445 {
pegcjs 5:6d2aded0cf41 446 if (y >= pixelHeight) {
pegcjs 5:6d2aded0cf41 447 if (debug) debug->printf("SPKDisplay::clearBufferRow sent out of bounds y");
pegcjs 5:6d2aded0cf41 448 return;
pegcjs 5:6d2aded0cf41 449 }
pegcjs 5:6d2aded0cf41 450
pegcjs 5:6d2aded0cf41 451 int row = (y*pixInPage) / pixelHeight;
pegcjs 5:6d2aded0cf41 452 int posInRow = y % pixInPage;
pegcjs 5:6d2aded0cf41 453
pegcjs 5:6d2aded0cf41 454 int bStart = row*bufferWidth;
pegcjs 5:6d2aded0cf41 455 int bEnd = bStart + pixelWidth;
pegcjs 5:6d2aded0cf41 456
pegcjs 5:6d2aded0cf41 457 for (int bPos = bStart; bPos <= bEnd; bPos++) {
pegcjs 5:6d2aded0cf41 458 // Need to bitwise OR as setting single bit (the line) in byte (the row)
pegcjs 5:6d2aded0cf41 459 buffer[bPos] = buffer[bPos] | 0x01 << posInRow;
pegcjs 5:6d2aded0cf41 460 }
pegcjs 5:6d2aded0cf41 461
pegcjs 5:6d2aded0cf41 462 bufferHasChanged = true;
pegcjs 5:6d2aded0cf41 463 }
pegcjs 5:6d2aded0cf41 464
pegcjs 5:6d2aded0cf41 465
pegcjs 5:6d2aded0cf41 466 void SPKDisplay::textToBuffer(char *message, int row)
pegcjs 5:6d2aded0cf41 467 {
pegcjs 5:6d2aded0cf41 468 char character;
pegcjs 5:6d2aded0cf41 469 // Range check
pegcjs 5:6d2aded0cf41 470 if (row >= 8) row = 7;
pegcjs 5:6d2aded0cf41 471 int bStart = row*bufferWidth;
pegcjs 5:6d2aded0cf41 472 int bEnd = bStart + pixelWidth;
pegcjs 5:6d2aded0cf41 473
pegcjs 5:6d2aded0cf41 474 int bPos = bStart;
pegcjs 5:6d2aded0cf41 475 for (int i = 0; i < 21; i++)
pegcjs 5:6d2aded0cf41 476 {
pegcjs 5:6d2aded0cf41 477 character=message[i];
pegcjs 5:6d2aded0cf41 478
pegcjs 5:6d2aded0cf41 479 // Shift into our array's indexing
pegcjs 5:6d2aded0cf41 480 // character -= *fontStartCharacter;
pegcjs 5:6d2aded0cf41 481
pegcjs 5:6d2aded0cf41 482 // Write each byte's vertical column of 8bits into the buffer.
pegcjs 5:6d2aded0cf41 483 for (int j = 0; j < 5;j++)
pegcjs 5:6d2aded0cf41 484 {
pegcjs 5:6d2aded0cf41 485 if (bPos >= bEnd) break;
pegcjs 5:6d2aded0cf41 486 buffer[bPos++] = font[character*5+j];
pegcjs 5:6d2aded0cf41 487 }
pegcjs 5:6d2aded0cf41 488
pegcjs 5:6d2aded0cf41 489 // Put 1px letter spacing at end
pegcjs 5:6d2aded0cf41 490 if (bPos >= bEnd) break;
pegcjs 5:6d2aded0cf41 491 buffer[bPos++] = 0x00; // 1 px letter spacing
pegcjs 5:6d2aded0cf41 492
pegcjs 5:6d2aded0cf41 493 }
pegcjs 5:6d2aded0cf41 494
pegcjs 5:6d2aded0cf41 495 bufferHasChanged = true;
pegcjs 5:6d2aded0cf41 496 }
pegcjs 5:6d2aded0cf41 497
pegcjs 5:6d2aded0cf41 498
pegcjs 5:6d2aded0cf41 499 // rewritten to cope with the paging
pegcjs 5:6d2aded0cf41 500 void SPKDisplay::sendBuffer()
pegcjs 5:6d2aded0cf41 501 {
pegcjs 5:6d2aded0cf41 502 if (bufferHasChanged) {
pegcjs 5:6d2aded0cf41 503 // Select the device by seting chip select low
pegcjs 5:6d2aded0cf41 504 *cs = 0; // select chip
pegcjs 5:6d2aded0cf41 505 *dc = 0; // comand mode
pegcjs 5:6d2aded0cf41 506
pegcjs 5:6d2aded0cf41 507
pegcjs 5:6d2aded0cf41 508 unsigned char i=0,j=0;
pegcjs 5:6d2aded0cf41 509 for(i=0; i<8; i++) {
pegcjs 5:6d2aded0cf41 510 *dc=0; // command mode
pegcjs 5:6d2aded0cf41 511 spi->write(0xB0+i); //Set display position - paged display
pegcjs 5:6d2aded0cf41 512 spi->write(0x00); //Set display position - low column address
pegcjs 5:6d2aded0cf41 513 spi->write(0x10);//Set the display position - high column address
pegcjs 5:6d2aded0cf41 514
pegcjs 5:6d2aded0cf41 515 *dc=1; // data mode
pegcjs 5:6d2aded0cf41 516 for(j=0; j<128; j++) {
pegcjs 5:6d2aded0cf41 517 spi->write(buffer[i*128+j]); //copy buffer into ram
pegcjs 5:6d2aded0cf41 518
pegcjs 5:6d2aded0cf41 519 }
pegcjs 5:6d2aded0cf41 520
pegcjs 5:6d2aded0cf41 521 }
pegcjs 5:6d2aded0cf41 522
pegcjs 5:6d2aded0cf41 523 *cs = 1;
pegcjs 5:6d2aded0cf41 524
pegcjs 5:6d2aded0cf41 525 bufferHasChanged = false;
pegcjs 5:6d2aded0cf41 526 }
pegcjs 5:6d2aded0cf41 527 }
pegcjs 5:6d2aded0cf41 528
pegcjs 5:6d2aded0cf41 529 // display a welcome message encoded in tab0 in spk_ole_ssd1305.h
pegcjs 5:6d2aded0cf41 530 void SPKDisplay::welcome()
pegcjs 5:6d2aded0cf41 531 {
pegcjs 5:6d2aded0cf41 532 // Select the device by seting chip select low
pegcjs 5:6d2aded0cf41 533 *cs = 0; // select chip
pegcjs 5:6d2aded0cf41 534 *dc = 0; // comand mode
pegcjs 5:6d2aded0cf41 535
pegcjs 5:6d2aded0cf41 536
pegcjs 5:6d2aded0cf41 537 unsigned char i=0,j=0;
pegcjs 5:6d2aded0cf41 538 for(i=0; i<8; i++) {
pegcjs 5:6d2aded0cf41 539 *dc=0; // command mode
pegcjs 5:6d2aded0cf41 540 spi->write(0xB0+i); //Set display position - paged display
pegcjs 5:6d2aded0cf41 541 spi->write(0x00); //Set display position - low column address
pegcjs 5:6d2aded0cf41 542 spi->write(0x10);//Set the display position - high column address
pegcjs 5:6d2aded0cf41 543
pegcjs 5:6d2aded0cf41 544 *dc=1; // data mode
pegcjs 5:6d2aded0cf41 545 for(j=0; j<128; j++) {
pegcjs 5:6d2aded0cf41 546 // spi->write(tab0[i*128+j]); //copy buffer into ram
pegcjs 5:6d2aded0cf41 547 spi->write(logo_bits[i*128+j]); //copy buffer into ram
pegcjs 5:6d2aded0cf41 548 }
pegcjs 5:6d2aded0cf41 549
pegcjs 5:6d2aded0cf41 550 }
pegcjs 5:6d2aded0cf41 551
pegcjs 5:6d2aded0cf41 552 *cs = 1;
pegcjs 5:6d2aded0cf41 553
pegcjs 5:6d2aded0cf41 554 }
pegcjs 5:6d2aded0cf41 555
pegcjs 5:6d2aded0cf41 556
pegcjs 5:6d2aded0cf41 557
pegcjs 5:6d2aded0cf41 558 //================
pegcjs 5:6d2aded0cf41 559 // display a welcome message encoded in tab0 in spk_ole_ssd1305.h
pegcjs 5:6d2aded0cf41 560 void SPKDisplay::fontdemo()
pegcjs 5:6d2aded0cf41 561 {
pegcjs 5:6d2aded0cf41 562 // Select the device by seting chip select low
pegcjs 5:6d2aded0cf41 563 *cs = 0; // select chip
pegcjs 5:6d2aded0cf41 564 *dc = 0; // comand mode
pegcjs 5:6d2aded0cf41 565
pegcjs 5:6d2aded0cf41 566
pegcjs 5:6d2aded0cf41 567 unsigned char i=0,j=0;
pegcjs 5:6d2aded0cf41 568 for(i=0; i<8; i++) {
pegcjs 5:6d2aded0cf41 569 *dc=0; // command mode
pegcjs 5:6d2aded0cf41 570 spi->write(0xB0+i); //Set display position - paged display
pegcjs 5:6d2aded0cf41 571 spi->write(0x00); //Set display position - low column address
pegcjs 5:6d2aded0cf41 572 spi->write(0x10);//Set the display position - high column address
pegcjs 5:6d2aded0cf41 573
pegcjs 5:6d2aded0cf41 574 *dc=1; // data mode
pegcjs 5:6d2aded0cf41 575 for(j=0; j<128; j++) {
pegcjs 5:6d2aded0cf41 576 // spi->write(tab0[i*128+j]); //copy buffer into ram
pegcjs 5:6d2aded0cf41 577 spi->write(font[i*128+j]); //copy buffer into ram
pegcjs 5:6d2aded0cf41 578 }
pegcjs 5:6d2aded0cf41 579
pegcjs 5:6d2aded0cf41 580 }
pegcjs 5:6d2aded0cf41 581
pegcjs 5:6d2aded0cf41 582 *cs = 1;
pegcjs 5:6d2aded0cf41 583
pegcjs 5:6d2aded0cf41 584 }
pegcjs 5:6d2aded0cf41 585 //=================
pegcjs 5:6d2aded0cf41 586
pegcjs 5:6d2aded0cf41 587 void SPKDisplay::setup()
pegcjs 5:6d2aded0cf41 588 {
pegcjs 5:6d2aded0cf41 589 // TASK: SCREEN OFF, Run pre-flight
pegcjs 5:6d2aded0cf41 590
pegcjs 5:6d2aded0cf41 591 // Hard reset the OLED
pegcjs 5:6d2aded0cf41 592 *res=1;
pegcjs 5:6d2aded0cf41 593 wait_ms(1);
pegcjs 5:6d2aded0cf41 594 *res = 0;
pegcjs 5:6d2aded0cf41 595 wait_ms(1);
pegcjs 5:6d2aded0cf41 596 *res = 1;
pegcjs 5:6d2aded0cf41 597
pegcjs 5:6d2aded0cf41 598 // Select the device by seting chip select low
pegcjs 5:6d2aded0cf41 599 *cs = 0;
pegcjs 5:6d2aded0cf41 600
pegcjs 5:6d2aded0cf41 601 // Set to receive COMMANDS not data
pegcjs 5:6d2aded0cf41 602 *dc = 0;
pegcjs 5:6d2aded0cf41 603 //=======ALL THESE TAKEN FROM THE UNIVISION DATASHEET UNCHANGED==========
pegcjs 5:6d2aded0cf41 604
pegcjs 5:6d2aded0cf41 605 spi->write(0x20); // set addressing mode
pegcjs 5:6d2aded0cf41 606 spi->write(0x10); // paged adressign mode
pegcjs 5:6d2aded0cf41 607
pegcjs 5:6d2aded0cf41 608 spi->write(0x00); // set lower nyble column address
pegcjs 5:6d2aded0cf41 609 spi->write(0x10); // set higher column adress
pegcjs 5:6d2aded0cf41 610 spi->write(0x40); //set display start line to 0
pegcjs 5:6d2aded0cf41 611 spi->write(0x81); // set contrast control register
pegcjs 5:6d2aded0cf41 612 spi->write(0xFF); // set contrast to maximum
pegcjs 5:6d2aded0cf41 613
pegcjs 5:6d2aded0cf41 614 spi->write(0xA0); // [A0]:column address 0 is map to SEG0 ,
pegcjs 5:6d2aded0cf41 615 //[A1]: columnaddress 131 is map to SEG0*/
pegcjs 5:6d2aded0cf41 616
pegcjs 5:6d2aded0cf41 617 spi->write(0xA4); // entire display ON - means that dispaly constaly matched to RAM content
pegcjs 5:6d2aded0cf41 618
pegcjs 5:6d2aded0cf41 619 spi->write(0xA6); //normal display - white on black
pegcjs 5:6d2aded0cf41 620
pegcjs 5:6d2aded0cf41 621 spi->write(0xA8); // set MUX ratio command
pegcjs 5:6d2aded0cf41 622 spi->write(0x3F); // MUX set to 36
pegcjs 5:6d2aded0cf41 623
pegcjs 5:6d2aded0cf41 624 spi->write(0x8D); //set DC-DC
pegcjs 5:6d2aded0cf41 625 spi->write(0x14); // 0x14=ON
pegcjs 5:6d2aded0cf41 626
pegcjs 5:6d2aded0cf41 627 spi->write(0xAE); // set display off - sleep mode
pegcjs 5:6d2aded0cf41 628
pegcjs 5:6d2aded0cf41 629 spi->write(0xD3); // set display offset
pegcjs 5:6d2aded0cf41 630 spi->write(0x00); // to no offset
pegcjs 5:6d2aded0cf41 631
pegcjs 5:6d2aded0cf41 632 spi->write(0xD5); //set clock divide
pegcjs 5:6d2aded0cf41 633 spi->write(0x20); // to get clock at 80Hz
pegcjs 5:6d2aded0cf41 634
pegcjs 5:6d2aded0cf41 635 //spi->write(0xD8); // set area color
pegcjs 5:6d2aded0cf41 636 //spi->write(0x00);
pegcjs 5:6d2aded0cf41 637
pegcjs 5:6d2aded0cf41 638 spi->write(0xDA); // set pins configuration
pegcjs 5:6d2aded0cf41 639 spi->write(0x12); // com left - right remap , alternaitve com config - realtes to hardware settings on board
pegcjs 5:6d2aded0cf41 640
pegcjs 5:6d2aded0cf41 641 spi->write(0xDB); // set VCOMHH level
pegcjs 5:6d2aded0cf41 642 spi->write(0x00); // to 0.65*Vcc
pegcjs 5:6d2aded0cf41 643
pegcjs 5:6d2aded0cf41 644 spi->write(0xD9); // set pre charge period
pegcjs 5:6d2aded0cf41 645 spi->write(0x22); // P1=2, P2=2
pegcjs 5:6d2aded0cf41 646
pegcjs 5:6d2aded0cf41 647 spi->write(0xC0); // set COM ouptut scan normal
pegcjs 5:6d2aded0cf41 648
pegcjs 5:6d2aded0cf41 649 //INI_DIS - initialise the display as per manufacturers example prog
pegcjs 5:6d2aded0cf41 650
pegcjs 5:6d2aded0cf41 651 unsigned char i=0,j=0;
pegcjs 5:6d2aded0cf41 652 for(i=0; i<8; i++) {
pegcjs 5:6d2aded0cf41 653 *dc=0; // command mode
pegcjs 5:6d2aded0cf41 654 spi->write(0xB0+i); //Set display position - paged display
pegcjs 5:6d2aded0cf41 655 spi->write(0x02); //Set display position - low column address
pegcjs 5:6d2aded0cf41 656 spi->write(0x10);//Set the display position - high column address
pegcjs 5:6d2aded0cf41 657
pegcjs 5:6d2aded0cf41 658 *dc=1; // set to receive data no commands
pegcjs 5:6d2aded0cf41 659
pegcjs 5:6d2aded0cf41 660 for(j=0; j<128; j++) {
pegcjs 5:6d2aded0cf41 661 spi->write(0x00); //Screen display initial setting
pegcjs 5:6d2aded0cf41 662
pegcjs 5:6d2aded0cf41 663 }
pegcjs 5:6d2aded0cf41 664 *dc=0;
pegcjs 5:6d2aded0cf41 665 spi->write(0xaf); // screen on
pegcjs 5:6d2aded0cf41 666 }
pegcjs 5:6d2aded0cf41 667
pegcjs 5:6d2aded0cf41 668
pegcjs 5:6d2aded0cf41 669
pegcjs 5:6d2aded0cf41 670 }