aboutsummaryrefslogtreecommitdiff
path: root/src/Samples
diff options
context:
space:
mode:
Diffstat (limited to 'src/Samples')
-rwxr-xr-xsrc/Samples/SpiLcd.cpp457
-rwxr-xr-xsrc/Samples/SpiLcd.h94
-rwxr-xr-xsrc/Samples/TFTLCD.h220
-rwxr-xr-xsrc/Samples/maryoled.cpp484
-rwxr-xr-xsrc/Samples/maryoled.h127
5 files changed, 1382 insertions, 0 deletions
diff --git a/src/Samples/SpiLcd.cpp b/src/Samples/SpiLcd.cpp
new file mode 100755
index 0000000..10d870c
--- /dev/null
+++ b/src/Samples/SpiLcd.cpp
@@ -0,0 +1,457 @@
+/* mbed Nokia LCD Library
+ * Atsu
+ */
+
+#include "delay.h"
+#include "SpiLcd.h"
+#include <math.h>
+
+
+#define LCD_ROWS 15
+#define LCD_COLS 16
+#define LCD_WIDTH 128
+#define LCD_HEIGHT 160
+#define LCD_FREQUENCY 20000000
+
+//MARY Pin Assign
+//#define LCD_VCC_ON C21
+//#define LCD_CS C33
+//#define LCD_RES C31
+
+//LPCXpresso pin Assign (MARMEX-SLOT1)
+//#define LCD_VCC_ON P0_7
+//#define LCD_CS P0_2
+//#define LCD_RES P0_1
+
+SPILCD slcd;
+
+SPILCD::SPILCD()
+{
+ this->LCD_VCC_ON = C21;
+ this->LCD_CS = C33;
+ this->LCD_RES = C31;
+ this->device = ST7735;
+ port = marySSP0;
+ _row = 0;
+ _column = 0;
+ _foreground = 0x00FFFFFF;
+ _background = 0x00000000;
+
+}
+
+SPILCD::~SPILCD()
+{
+}
+void SPILCD::reset(SSP_PORT port)
+{
+ this->port = port;
+ if(port==LPCXSSP0) //LPCXpresso 1114 + MAPLE
+ {
+ this->LCD_VCC_ON = P0_7;
+ this->LCD_CS = P0_2;
+ this->LCD_RES = P0_1;
+ }
+ pinMode(LCD_VCC_ON,OUTPUT);
+ pinMode(LCD_RES,OUTPUT);
+ pinMode(LCD_CS,OUTPUT);
+
+ digitalWrite(LCD_RES,HIGH);
+ digitalWrite(LCD_VCC_ON,LOW);
+
+ reset();
+ return;
+}
+void SPILCD::reset() {
+
+ command(0x11);//Sleep out
+ delay(120);
+ //ST7735R Frame Rate
+ command(0xB1);
+ data(0x01);
+ data(0x2C);
+ data(0x2D);
+ command(0xB2);
+ data(0x01);
+ data(0x2C);
+ data(0x2D);
+ command(0xB3);
+ data(0x01);
+ data(0x2C);
+ data(0x2D);
+ data(0x01);
+ data(0x2C);
+ data(0x2D);
+ //------------------------------------End ST7735R Frame Rate-----------------------------------------//
+ command(0xB4);//Column inversion
+ data(0x07);
+ //------------------------------------ST7735R Power Sequence-----------------------------------------//
+ command(0xC0);
+ data(0xA2);
+ data(0x02);
+ data(0x84);
+ command(0xC1);
+ data(0xC5);
+ command(0xC2);
+ data(0x0A);
+ data(0x00);
+ command(0xC3);
+ data(0x8A);
+ data(0x2A);
+ command(0xC4);
+ data(0x8A);
+ data(0xEE);
+ //---------------------------------End ST7735R Power Sequence-------------------------------------//
+ command(0xC5);//VCOM
+ data(0x0E);
+ command(0x36);//MX, MY, RGB mode
+ data(0xC8);
+ //------------------------------------ST7735R Gamma Sequence-----------------------------------------//
+ command(0xe0);
+ data(0x02);
+ data(0x1c);
+ data(0x07);
+ data(0x12);
+ data(0x37);
+ data(0x32);
+ data(0x29);
+ data(0x2d);
+ data(0x29);
+ data(0x25);
+ data(0x2b);
+ data(0x39);
+ data(0x00);
+ data(0x01);
+ data(0x03);
+ data(0x10);
+ command(0xe1);
+ data(0x03);
+ data(0x1d);
+ data(0x07);
+ data(0x06);
+ data(0x2e);
+ data(0x2c);
+ data(0x29);
+ data(0x2d);
+ data(0x2e);
+ data(0x2e);
+ data(0x37);
+ data(0x3f);
+ data(0x00);
+ data(0x00);
+ data(0x02);
+ data(0x10);
+ command(0x2A);
+ data(0x00);
+ data(0x02);
+ data(0x00);
+ data(0x81);
+
+ command(0x2B);
+ data(0x00);
+ data(0x01);
+ data(0x00);
+ data(0xA0);
+ //------------------------------------End ST7735R Gamma Sequence-----------------------------------------//
+
+ command(0x3A);
+ data(0x05);
+ //command(0x3A);//65k mode
+ //data(0x05);
+ command(0x29);//Display on
+
+}
+
+void SPILCD::command(int value)
+{
+ digitalWrite(LCD_CS, LOW);
+ digitalWrite(LCD_RES, LOW);
+
+ SPI.transfer(value & 0xff);
+
+ digitalWrite(LCD_CS,HIGH);
+}
+
+void SPILCD::data(int value)
+{
+ digitalWrite(LCD_CS,LOW);
+ digitalWrite(LCD_RES,HIGH);
+
+ SPI.transfer(value & 0xff);
+
+ digitalWrite(LCD_CS, HIGH);
+}
+
+void SPILCD::_window( int x, int y, int width, int height )
+{
+ int x1 = x + 0;
+ int y1 = y + 0;
+ int x2 = x1 + width - 1;
+ int y2 = y1 + height - 1;
+
+// TODO: fix this frame-Command new
+// command( SET_COLUMN_ADDRESS );
+// data( x1 );
+// data( x2 );
+// command( SET_ROW_ADDRESS );
+// data( y1 );
+// data( y2 );
+// command( WRITE_RAM_COMMAND );
+
+}
+
+void SPILCD::WindowReset(void)
+{
+ command( SET_COLUMN_ADDRESS );
+ data( 0 );
+ data( 127 );
+ command( SET_ROW_ADDRESS );
+ data( 0 );
+ data( 127 );
+ command( WRITE_RAM_COMMAND );
+}
+
+
+
+
+const unsigned char FONT8x8[97][8] = {
+ {0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00}, // columns, rows, num_bytes_per_char
+ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // space 0x20
+ {0x30,0x78,0x78,0x30,0x30,0x00,0x30,0x00}, // !
+ {0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00}, // "
+ {0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00}, // #
+ {0x18,0x3E,0x60,0x3C,0x06,0x7C,0x18,0x00}, // $
+ {0x00,0x63,0x66,0x0C,0x18,0x33,0x63,0x00}, // %
+ {0x1C,0x36,0x1C,0x3B,0x6E,0x66,0x3B,0x00}, // &
+ {0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00}, // '
+ {0x0C,0x18,0x30,0x30,0x30,0x18,0x0C,0x00}, // (
+ {0x30,0x18,0x0C,0x0C,0x0C,0x18,0x30,0x00}, // )
+ {0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00}, // *
+ {0x00,0x30,0x30,0xFC,0x30,0x30,0x00,0x00}, // +
+ {0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x30}, // ,
+ {0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00}, // -
+ {0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00}, // .
+ {0x03,0x06,0x0C,0x18,0x30,0x60,0x40,0x00}, // / (forward slash)
+ {0x3E,0x63,0x63,0x6B,0x63,0x63,0x3E,0x00}, // 0 0x30
+ {0x18,0x38,0x58,0x18,0x18,0x18,0x7E,0x00}, // 1
+ {0x3C,0x66,0x06,0x1C,0x30,0x66,0x7E,0x00}, // 2
+ {0x3C,0x66,0x06,0x1C,0x06,0x66,0x3C,0x00}, // 3
+ {0x0E,0x1E,0x36,0x66,0x7F,0x06,0x0F,0x00}, // 4
+ {0x7E,0x60,0x7C,0x06,0x06,0x66,0x3C,0x00}, // 5
+ {0x1C,0x30,0x60,0x7C,0x66,0x66,0x3C,0x00}, // 6
+ {0x7E,0x66,0x06,0x0C,0x18,0x18,0x18,0x00}, // 7
+ {0x3C,0x66,0x66,0x3C,0x66,0x66,0x3C,0x00}, // 8
+ {0x3C,0x66,0x66,0x3E,0x06,0x0C,0x38,0x00}, // 9
+ {0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x00}, // :
+ {0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x30}, // ;
+ {0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x00}, // <
+ {0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00}, // =
+ {0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x00}, // >
+ {0x3C,0x66,0x06,0x0C,0x18,0x00,0x18,0x00}, // ?
+ {0x3E,0x63,0x6F,0x69,0x6F,0x60,0x3E,0x00}, // @ 0x40
+ {0x18,0x3C,0x66,0x66,0x7E,0x66,0x66,0x00}, // A
+ {0x7E,0x33,0x33,0x3E,0x33,0x33,0x7E,0x00}, // B
+ {0x1E,0x33,0x60,0x60,0x60,0x33,0x1E,0x00}, // C
+ {0x7C,0x36,0x33,0x33,0x33,0x36,0x7C,0x00}, // D
+ {0x7F,0x31,0x34,0x3C,0x34,0x31,0x7F,0x00}, // E
+ {0x7F,0x31,0x34,0x3C,0x34,0x30,0x78,0x00}, // F
+ {0x1E,0x33,0x60,0x60,0x67,0x33,0x1F,0x00}, // G
+ {0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x00}, // H
+ {0x3C,0x18,0x18,0x18,0x18,0x18,0x3C,0x00}, // I
+ {0x0F,0x06,0x06,0x06,0x66,0x66,0x3C,0x00}, // J
+ {0x73,0x33,0x36,0x3C,0x36,0x33,0x73,0x00}, // K
+ {0x78,0x30,0x30,0x30,0x31,0x33,0x7F,0x00}, // L
+ {0x63,0x77,0x7F,0x7F,0x6B,0x63,0x63,0x00}, // M
+ {0x63,0x73,0x7B,0x6F,0x67,0x63,0x63,0x00}, // N
+ {0x3E,0x63,0x63,0x63,0x63,0x63,0x3E,0x00}, // O
+ {0x7E,0x33,0x33,0x3E,0x30,0x30,0x78,0x00}, // P 0x50
+ {0x3C,0x66,0x66,0x66,0x6E,0x3C,0x0E,0x00}, // Q
+ {0x7E,0x33,0x33,0x3E,0x36,0x33,0x73,0x00}, // R
+ {0x3C,0x66,0x30,0x18,0x0C,0x66,0x3C,0x00}, // S
+ {0x7E,0x5A,0x18,0x18,0x18,0x18,0x3C,0x00}, // T
+ {0x66,0x66,0x66,0x66,0x66,0x66,0x7E,0x00}, // U
+ {0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00}, // V
+ {0x63,0x63,0x63,0x6B,0x7F,0x77,0x63,0x00}, // W
+ {0x63,0x63,0x36,0x1C,0x1C,0x36,0x63,0x00}, // X
+ {0x66,0x66,0x66,0x3C,0x18,0x18,0x3C,0x00}, // Y
+ {0x7F,0x63,0x46,0x0C,0x19,0x33,0x7F,0x00}, // Z
+ {0x3C,0x30,0x30,0x30,0x30,0x30,0x3C,0x00}, // [
+ {0x60,0x30,0x18,0x0C,0x06,0x03,0x01,0x00}, // \ (back slash)
+ {0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00}, // ]
+ {0x08,0x1C,0x36,0x63,0x00,0x00,0x00,0x00}, // ^
+ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF}, // _
+ {0x18,0x18,0x0C,0x00,0x00,0x00,0x00,0x00}, // ` 0x60
+ {0x00,0x00,0x3C,0x06,0x3E,0x66,0x3B,0x00}, // a
+ {0x70,0x30,0x3E,0x33,0x33,0x33,0x6E,0x00}, // b
+ {0x00,0x00,0x3C,0x66,0x60,0x66,0x3C,0x00}, // c
+ {0x0E,0x06,0x3E,0x66,0x66,0x66,0x3B,0x00}, // d
+ {0x00,0x00,0x3C,0x66,0x7E,0x60,0x3C,0x00}, // e
+ {0x1C,0x36,0x30,0x78,0x30,0x30,0x78,0x00}, // f
+ {0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x7C}, // g
+ {0x70,0x30,0x36,0x3B,0x33,0x33,0x73,0x00}, // h
+ {0x18,0x00,0x38,0x18,0x18,0x18,0x3C,0x00}, // i
+ {0x06,0x00,0x06,0x06,0x06,0x66,0x66,0x3C}, // j
+ {0x70,0x30,0x33,0x36,0x3C,0x36,0x73,0x00}, // k
+ {0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00}, // l
+ {0x00,0x00,0x66,0x7F,0x7F,0x6B,0x63,0x00}, // m
+ {0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x00}, // n
+ {0x00,0x00,0x3C,0x66,0x66,0x66,0x3C,0x00}, // o
+ {0x00,0x00,0x6E,0x33,0x33,0x3E,0x30,0x78}, // p
+ {0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x0F}, // q
+ {0x00,0x00,0x6E,0x3B,0x33,0x30,0x78,0x00}, // r
+ {0x00,0x00,0x3E,0x60,0x3C,0x06,0x7C,0x00}, // s
+ {0x08,0x18,0x3E,0x18,0x18,0x1A,0x0C,0x00}, // t
+ {0x00,0x00,0x66,0x66,0x66,0x66,0x3B,0x00}, // u
+ {0x00,0x00,0x66,0x66,0x66,0x3C,0x18,0x00}, // v
+ {0x00,0x00,0x63,0x6B,0x7F,0x7F,0x36,0x00}, // w
+ {0x00,0x00,0x63,0x36,0x1C,0x36,0x63,0x00}, // x
+ {0x00,0x00,0x66,0x66,0x66,0x3E,0x06,0x7C}, // y
+ {0x00,0x00,0x7E,0x4C,0x18,0x32,0x7E,0x00}, // z
+ {0x0E,0x18,0x18,0x70,0x18,0x18,0x0E,0x00}, // {
+ {0x0C,0x0C,0x0C,0x00,0x0C,0x0C,0x0C,0x00}, // |
+ {0x70,0x18,0x18,0x0E,0x18,0x18,0x70,0x00}, // }
+ {0x3B,0x6E,0x00,0x00,0x00,0x00,0x00,0x00}, // ~
+ {0x1C,0x36,0x36,0x1C,0x00,0x00,0x00,0x00}
+}; // DEL
+
+void SPILCD::locate(int column, int row) {
+ _column = column;
+ _row = row;
+}
+
+void SPILCD::newline() {
+ _column = 0;
+ _row++;
+ if (_row >= rows() ) {
+ _row = 0;
+ }
+}
+
+void SPILCD::_putp( int colour ) {
+ /*int cnv = 0;
+
+ cnv = (colour >> 8) & 0xf800;
+ cnv |= (colour >> 5) & 0x07e0;
+ cnv |= (colour >> 3) & 0x001f;
+
+ data( cnv >> 8);
+ data( cnv );
+ */
+ unsigned long data1, data2;
+ data1 = ((colour >> 8) & 0xff) | 0x100;
+ data2 = (colour & 0x0ff) | 0x100;
+ data(data1);
+ data(data2);
+ }
+int SPILCD::_putc(int value) {
+ int x = _column * 8; // FIXME: Char sizes
+ int y = _row * 8;
+ bitblit(x + 1, y + 1, 8, 8, (char*)&(FONT8x8[value - 0x1F][0]));
+
+ _column++;
+
+ if (_column >= SPILCD_COLS) {
+ _row++;
+ _column = 0;
+ }
+
+ if (_row >= SPILCD_ROWS) {
+ _row = 0;
+ }
+
+ return value;
+}
+
+void SPILCD::cls( void ) {
+ fill( 0, 0, SPILCD_WIDTH , SPILCD_HEIGHT, _background );
+ _row = 0;
+ _column = 0;
+}
+
+
+void SPILCD::window(int x, int y, int width, int height) {
+ // digitalWrite( LCD_CS, LOW );
+ _window(x, y, width, height);
+ //digitalWrite( LCD_CS, HIGH );
+}
+
+void SPILCD::putp(int colour) {
+ //digitalWrite( LCD_CS, LOW );
+ _putp(colour);
+ //digitalWrite( LCD_CS, HIGH );
+}
+
+
+void SPILCD::pixel(int x, int y, int colour) {
+ //digitalWrite( LCD_CS, LOW );
+ _window(x, y, 1, 1);
+ _putp(colour);
+ //digitalWrite( LCD_CS, HIGH );
+}
+
+void SPILCD::fill( int x, int y, int width, int height, int colour )
+{
+ digitalWrite( LCD_CS, LOW );
+ _window( x, y, width, height );
+
+ for (int i = 0; i < width * height; i++ ) {
+ _putp( colour );
+ }
+
+ _window( 0, 0, SPILCD_WIDTH, SPILCD_HEIGHT );
+ digitalWrite( LCD_CS, HIGH );
+}
+
+
+void SPILCD::blit( int x, int y, int width, int height, const int* colour ) {
+ digitalWrite( LCD_CS, LOW );
+ _window( x, y, width, height );
+
+ for (int i = 0; i < width * height; i++ ) {
+ _putp( colour[i] );
+ }
+ _window( 0, 0, SPILCD_WIDTH, SPILCD_HEIGHT );
+ digitalWrite( LCD_CS, HIGH );
+}
+
+
+void SPILCD::bitblit( int x, int y, int width, int height, const char* bitstream ) {
+ digitalWrite( LCD_CS, LOW );
+ _window( x, y, width, height );
+
+ for (int i = 0; i < height * width; i++ ) {
+ int byte = i / 8;
+ int bit = i % 8;
+ int colour = ((bitstream[ byte ] << bit) & 0x80) ? _foreground : _background;
+ _putp( colour );
+ }
+ _window( 0, 0, _width, _height );
+ digitalWrite( LCD_CS, HIGH );
+}
+
+void SPILCD::foreground(int c) {
+ _foreground = c;
+ return;
+}
+
+void SPILCD::background(int c) {
+ _background = c;
+ return;
+}
+
+int SPILCD::width() {
+ return SPILCD_WIDTH;
+}
+
+int SPILCD::height() {
+ return SPILCD_HEIGHT;
+}
+
+int SPILCD::columns() {
+ return SPILCD_COLS;
+}
+
+int SPILCD::rows() {
+ return SPILCD_ROWS;
+}
+
+
diff --git a/src/Samples/SpiLcd.h b/src/Samples/SpiLcd.h
new file mode 100755
index 0000000..be912cc
--- /dev/null
+++ b/src/Samples/SpiLcd.h
@@ -0,0 +1,94 @@
+/*
+ * SpiLcd.h
+ *
+ * Created on: 2012/08/01
+ * Author: lynxeyed
+ */
+
+#ifndef SPILCD_H_
+#define SPILCD_H_
+
+/**************************************************************************//**
+ * @file SpiLcd.h
+ * @brief Arduino-like library for Cortex-M0 Series
+ * @version v.0.50
+ * @date 1. August 2011.
+ * @author lynxeyed
+ * @note Copyright (c) 2012 Lynx-EyED's Klavier and Craft-works. <BR>
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions: <BR>
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.<BR>
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ ******************************************************************************/
+
+#include "SPI.h"
+#include "gpio.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+typedef enum {ST7735,Nokia6610,Nokia6100,PCF8833} LCD_DEVICES; // Defaults:ST7735
+
+class SPILCD {
+private:
+ SSP_PORT port;
+ LCD_DEVICES device;
+ int LCD_VCC_ON;
+ int LCD_CS;
+ int LCD_RES;
+ int _row;
+ int _column;
+ int _foreground;
+ int _background;
+ int _width;
+ int _height;
+
+
+
+public:
+ SPILCD(); // announce the constructor to initialize
+ ~SPILCD();
+
+ void reset();
+ void reset(SSP_PORT port);
+ void command( int value );
+ void data( int value );
+ void _window( int x, int y, int width, int height );
+ void locate(int column, int row);
+ void newline();
+ void _putp( int colour );
+ int _putc( int value );
+ void cls( void );
+ void window( int x, int y, int width, int height );
+ void WindowReset(void);
+ void putp( int colour );
+ void pixel( int x, int y, int colour );
+ void fill( int x, int y, int width, int height, int colour );
+ void blit( int x, int y, int width, int height, const int* colour );
+ void bitblit( int x, int y, int width, int height, const char* bitstream );
+ void foreground(int c);
+ void background(int c);
+ int width();
+ int height();
+ int columns();
+ int rows();
+};
+
+extern SPILCD slcd;
+
+#ifdef __cplusplus
+ }
+#endif
+#endif /* SPILCD_H_ */
diff --git a/src/Samples/TFTLCD.h b/src/Samples/TFTLCD.h
new file mode 100755
index 0000000..797383c
--- /dev/null
+++ b/src/Samples/TFTLCD.h
@@ -0,0 +1,220 @@
+#include <libmary.h>
+#include <SPI.h>
+
+#define LCD_CS C33//4 //cs
+#define LCD_DC C21//5 //data command
+#define LCD_RES C31//6 //reset
+//MOSI 11 C47
+//CLK 13 C43
+#define DC_DATA HIGH
+#define DC_CMD LOW
+
+//#define STICK_A 7
+//#define STICK_B 8
+//#define STICK_C 9
+//#define STICK_D 10
+//#define STICK_CT 2
+
+
+#define select_disp() digitalWrite(LCD_CS,LOW) //PORTD &= ~(1 << PORTD4)
+#define unselect_disp() digitalWrite(LCD_CS,HIGH) //PORTD |= (1 << PORTD4)
+
+#define set_disp_command() digitalWrite(LCD_DC,LOW) //PORTD &= ~(1 << PORTD5)
+#define set_disp_data() digitalWrite(LCD_DC,HIGH) //PORTD |= (1 << PORTD5)
+
+/* SSD1283A Unique Value */
+/* MUST be need for SSD1283A */
+#define OFS_COL 2
+#define OFS_RAW 0
+#define MAX_X 130
+#define MAX_Y 130
+
+
+
+void sendCmd(unsigned int cmd){
+ select_disp();
+ set_disp_command();
+ // shiftOut2(PIN_MOSI,PIN_CLK,MSBFIRST,cmd);
+ SPI.transfer(cmd);
+ set_disp_data();
+}
+
+void sendData(unsigned int data){
+ select_disp();
+ set_disp_data();
+ //shiftOut2(PIN_MOSI,PIN_CLK,MSBFIRST,data);
+ SPI.transfer(data);
+}
+
+void sendData16(unsigned int data1,unsigned int data2){
+ select_disp();
+ set_disp_data();
+ //shiftOut2(PIN_MOSI,PIN_CLK,MSBFIRST,data);
+ SPI.transfer(data1);
+ SPI.transfer(data2);
+}
+
+void sendColor(unsigned int color){
+ sendData(color&0x00ff);
+}
+
+
+
+
+void initDisplay(){
+ select_disp();
+
+ digitalWrite(LCD_RES, LOW);
+ delay(80);
+ digitalWrite(LCD_RES, HIGH);
+ delay(20);
+
+ /* SSD1283A */
+ sendCmd(0x10); /* Power Control (1) */
+ sendData16(0x2f,0x8e); /* Onchip DCDC Clock,Fine*2 StartCycle,VGH unregurated */
+ /* StepUpCycle fosc,Internal OPAMP Current reserved,Sleep Mode OFF */
+
+ sendCmd(0x11); /* Power Control (2) */
+ sendData16(0x00,0x0c); /* VGH/VCI ratio x4 */
+
+ sendCmd(0x07); /* Display Control */
+ sendData16(0x00,0x21); /* Nomalize source out zero, Vartical Scroll not pafomed */
+ /* 1 Divison Display,Source output GND, Gate output GVOFFL */
+
+ sendCmd(0x28); /* VCOM-OTP1 */
+ sendData16(0x00,0x06);
+
+ sendCmd(0x28); /* VCOM-OTP1 */
+ sendData16(0x00,0x05);
+
+ sendCmd(0x27); /* VCOM-OTP */
+ sendData16(0x05,0x7f);
+
+ sendCmd(0x29); /* VCOM-OTP2 */
+ sendData16(0x89,0xa1);
+
+ sendCmd(0x00); /* Oscillator On */
+ sendData16(0x00,0x01);
+ delay(150);
+
+ sendCmd(0x29); /* VCOM-OTP2 */
+ sendData16(0x80,0xb0);
+ delay(50);
+
+ sendCmd(0x29); /* VCOM-OTP2 */
+ sendData16(0xff,0xfe);
+
+ sendCmd(0x07); /* Display Control */
+ sendData16(0x00,0x23);
+ delay(50);
+
+ sendCmd(0x07); /* Display Control (Confirm) */
+ sendData16(0x00,0x23);
+ delay(50);
+
+ sendCmd(0x07); /* Display Control */
+ sendData16(0x00,0x33); /* Nomalize source out zero, Vartical Scroll not pafomed */
+ /* 1 Divison Display,,Source output GND (OFF) */
+ /* Gate output Selected VGH, others GVOFFL */
+
+ sendCmd(0x01); /* Driver Output Control */
+ sendData16(0x21,0x83); /* Reversal ON ,Cs On Common,BGR,Scanning Mounting Method */
+ /* Output Shift Direction of Gate Driver G131->G0, */
+ /* Output Shift Direction of Source Driver S0->S395, */
+ /* Number of Gate Driver 131 */
+
+ sendCmd(0x2f); /* ??? */
+ sendData16(0xff,0xff);
+
+ sendCmd(0x2c); /* Oscillator frequency */
+ sendData16(0x80,0x00); /* 520kHz */
+
+ sendCmd(0x03); /* Entry mode */
+ sendData16(0x68,0x30); /* Colour mode 65k,OE defines Display Window,D-mode from internal ram */
+ /* Horizontal increment & Vertical increment & AM 0 Horizontal */
+
+ sendCmd(0x40); /* Set Offset */
+ sendData16(0x00,0x02);
+
+ sendCmd(0x27); /* Further bias current setting */
+ sendData16(0x05,0x70); /* Maximum */
+
+ sendCmd(0x02); /* LCD-Driving-Waveform Control */
+ sendData16(0x03,0x00); /* the odd/even frame-select signals and the N-line inversion */
+ /* signals are EORed for alternating drive */
+
+ sendCmd(0x0b); /* Frame Cycle Control */
+ sendData16(0x58,0x0c); /* Amount of Overlap 4 clock cycle */
+ /* Delay amount of the source output 2 clock cycle */
+ /* EQ period 2 clock cycle, Division Ratio 2 */
+
+ sendCmd(0x12); /* Power Control 3 */
+ sendData16(0x06,0x09); /* Set amplitude magnification of VLCD63 = Vref x 2.175 */
+
+ sendCmd(0x13); /* Power Control 4 */
+ sendData16(0x31,0x00); /* Set output voltage of VcomL = VLCD63 x 1.02 */
+
+ sendCmd(0x2a); /* Test Commands ? */
+ sendData16(0x1d,0xd0);
+
+ sendCmd(0x2b); /* Test Commands ? */
+ sendData16(0x0a,0x90);
+
+ sendCmd(0x2d); /* Test Commands ? */
+ sendData16(0x31,0x0f);
+ delay(100);
+
+ sendCmd(0x44); /* Set CAS Address */
+ sendData16(0x83,0x00);
+
+ sendCmd(0x45); /* Set RAS Address */
+ sendData16(0x83,0x00);
+
+ sendCmd(0x21); /* Set RAM Address */
+ sendData16(0x00,0x00);
+
+ sendCmd(0x1e); /* Power Control 5 */
+ sendData16(0x00,0xbf); /* VcomH = VLCD63 x 0.99 */
+ delay(1);
+
+ sendCmd(0x1e); /* Power Control 5 */
+ sendData16(0x00,0x00); /* VcomH =VLCD63 x 0.36 */
+ delay(100);
+
+ unselect_disp();
+}
+
+void resetArea(){
+ int x=0,y=0;
+ int xwidth=130 , yheight=130;
+
+ select_disp();
+
+ /* Set CAS Address */
+ sendCmd(0x44);
+ sendData16(OFS_COL + xwidth - 1, OFS_COL + x);
+
+ /* Set RAS Address */
+ sendCmd(0x45);
+ sendData16(OFS_RAW + yheight - 1, OFS_RAW + y);
+
+ /* Set RAM Address */
+ sendCmd(0x21);
+ sendData16(OFS_RAW + y, OFS_COL + x);
+
+ /* Write RAM */
+ sendCmd(0x22);
+
+ set_disp_data();
+ unselect_disp();
+}
+
+void fillScreen(unsigned int color_H,unsigned int color_L){
+ select_disp();
+ int i;
+ resetArea();
+ for(i=0;i<16900;i++){
+ sendData16(color_H,color_L);
+ }
+ unselect_disp();
+}
diff --git a/src/Samples/maryoled.cpp b/src/Samples/maryoled.cpp
new file mode 100755
index 0000000..8df935c
--- /dev/null
+++ b/src/Samples/maryoled.cpp
@@ -0,0 +1,484 @@
+/* mbed Nokia LCD Library
+ * Atsu
+ */
+
+#include "delay.h"
+#include "maryoled.h"
+#include <math.h>
+
+/** General parameters for MARMEX_OB_oled */
+
+#define MARYOLED_ROWS 15
+#define MARYOLED_COLS 16
+#define MARYOLED_WIDTH 128
+#define MARYOLED_HEIGHT 128
+#define MARYOLED_FREQUENCY 20000000
+
+//MARY Pin Assign
+//#define OLED_VCC_ON C21
+//#define OLED_CS C33
+//#define OLED_RES C31
+
+//LPCXpresso pin Assign (MARMEX-SLOT1)
+//#define OLED_VCC_ON P0_7
+//#define OLED_CS P0_2
+//#define OLED_RES P0_1
+
+MARYOLED oled;
+
+MARYOLED::MARYOLED() //default : MARY
+{
+ this->OLED_VCC_ON = C21;
+ this->OLED_CS = C33;
+ this->OLED_RES = C31;
+ this->device = OLED;
+ port = marySSP0;
+ _row = 0;
+ _column = 0;
+ _foreground = 0x00FFFFFF;
+ _background = 0x00000000;
+
+}
+
+MARYOLED::~MARYOLED()
+{
+}
+void MARYOLED::reset(SSP_PORT port)
+{
+ this->port = port;
+ if(port==LPCXSSP0) //LPCXpresso 1114 + MAPLE
+ {
+ this->OLED_VCC_ON = P0_7;
+ this->OLED_CS = P0_2;
+ this->OLED_RES = P0_1;
+ }
+ pinMode(OLED_VCC_ON,OUTPUT);
+ pinMode(OLED_RES,OUTPUT);
+ pinMode(OLED_CS,OUTPUT);
+
+ digitalWrite(OLED_RES,HIGH);
+ digitalWrite(OLED_VCC_ON,LOW);
+
+ reset();
+ return;
+}
+void MARYOLED::reset() {
+ #define GAMMA_LUT_SIZE 63
+ //unsigned char gamma_LUT[ GAMMA_LUT_SIZE ];
+
+ //for ( int i = 0; i < GAMMA_LUT_SIZE; i++ )
+ //gamma_LUT[ i ] = (unsigned char)(powf( ((float)i / 62.0), (1.0 / 0.58) ) * 178.0 + 2.0);
+ unsigned char gamma_LUT[63] =
+ {
+ 0x02, 0x03, 0x04, 0x05,
+ 0x06, 0x07, 0x08, 0x09,
+ 0x0a, 0x0b, 0x0c, 0x0d,
+ 0x0e, 0x0f, 0x10, 0x11,
+ //
+ 0x12, 0x13, 0x15, 0x17,
+ 0x19, 0x1b, 0x1d, 0x1f,
+ 0x21, 0x23, 0x25, 0x27,
+ 0x2a, 0x2d, 0x30, 0x33,
+ //
+ 0x36, 0x39, 0x3c, 0x3f,
+ 0x42, 0x45, 0x48, 0x4c,
+ 0x50, 0x54, 0x58, 0x5c,
+ 0x60, 0x64, 0x68, 0x6c,
+ //
+ 0x70, 0x74, 0x78, 0x7d,
+ 0x82, 0x87, 0x8c, 0x91,
+ 0x96, 0x9b, 0xa0, 0xa5,
+ 0xaa, 0xaf, 0xb4
+ };
+
+ // setup the _spi interface and bring display out of reset
+ digitalWrite( OLED_CS, HIGH );
+ digitalWrite( OLED_RES, LOW );
+
+
+ SPI.setBitLength( 9 ); //9bit mode
+ SPI.setDataMode(SPI_MODE3);
+ SPI.setClockDivider( SPI_CLOCK_DIV2 );
+ SPI.begin(port);
+ //ssp_begin(SPI_CLOCK_DIV1, SPI_MODE0, 9);
+
+ delay( 100 ); //wait 100ms
+ digitalWrite( OLED_RES, LOW );
+ delay( 100 );
+ digitalWrite( OLED_RES, HIGH ); //RESET
+
+ command( SET_DISPLAY_MODE_ALL_OFF );
+
+ command( SET_COMMAND_LOCK );
+ data( 0x12 );
+
+ command( SET_COMMAND_LOCK );
+ data( 0xb1 );
+
+ command( SET_SLEEP_MODE_ON );
+
+ command( FRONT_CLOCK_DRIVER_OSC_FREQ );
+ data( 0xF1 );
+
+ command( SET_MUX_RATIO );
+ data( 0x7F );
+
+ command( SET_DISPAY_OFFSET );
+ data( 0x00 );
+
+ command( SET_DISPAY_START_LINE );
+ data( 0x00 );
+
+ command( SET_REMAP_COLOR_DEPTH );
+ data( 0x74 );
+
+ command( SET_GPIO );
+ data( 0x00);
+
+ command( FUNCTION_SELECTION );
+ data( 0x01 );
+
+ command( SET_SEGMENT_LOW_VOLTAGE );
+ data( 0xA0 );
+ data( 0xB5 );
+ data( 0x55 );
+
+ command( SET_CONTRAST_CURRENT_FOR_COLOR_ABC );
+ data( 0xC8 );
+ data( 0x80 );
+ data( 0xC8 );
+
+ command( MASTER_CONTRAST_CURRENT_CONTROL );
+ data( 0x0F );
+
+ command( LOOKUP_TABLE_FOR_GRAYSCALE_PULSE_WIDTH );
+ for ( int i = 0; i < GAMMA_LUT_SIZE; i++ )
+ data( gamma_LUT[ i ] );
+
+ //command( USE_BUILT_IN_LINEAR_LUT );
+
+ command( SET_RESET_PRECHARGE_PERIOD );
+ data( 0x32 );
+
+ command( ENHANCE_DRIVING_SCHEME_CAPABILITY );
+ data( 0xA4 );//data( 0x04 );
+ data( 0x00 );
+ data( 0x00 );
+
+ command( SET_PRECHARGE_VOLTAGE );
+ data( 0x17 );
+
+ command( SET_SECOND_PRECHARGE_VOLTAGE );
+ data( 0x01 );
+
+ command( SET_VCOMH_VOLTAGE );
+ data( 0x05 );
+ command( SET_DISPLAY_MODE_RESET );
+
+ command( SET_COLUMN_ADDRESS );
+ data( 0x00 );
+ data( 0x7f );
+
+ command( SET_ROW_ADDRESS );
+ data( 0x00 );
+ data( 0x7f );
+
+ cls();
+ //WindowReset();
+
+ digitalWrite(OLED_VCC_ON,HIGH);
+
+ delay( 200 ); //wait 200ms
+
+ command( SET_SLEEP_MODE_OFF );
+ return;
+}
+
+void MARYOLED::command(int value) {
+
+ digitalWrite(OLED_CS,LOW);
+ SPI.transfer(value & 0xff);
+ //ssp_transfer(value & 0xFF);
+ digitalWrite(OLED_CS,HIGH);
+}
+
+void MARYOLED::data(int value) {
+ digitalWrite(OLED_CS,LOW);
+ SPI.transfer(value | 0x100);
+ //ssp_transfer(value | 0x100);
+ digitalWrite(OLED_CS,HIGH);
+}
+
+void MARYOLED::_window( int x, int y, int width, int height )
+{
+ int x1 = x + 0;
+ int y1 = y + 0;
+ int x2 = x1 + width - 1;
+ int y2 = y1 + height - 1;
+
+ command( SET_COLUMN_ADDRESS );
+ data( x1 );
+ data( x2 );
+ command( SET_ROW_ADDRESS );
+ data( y1 );
+ data( y2 );
+ command( WRITE_RAM_COMMAND );
+
+}
+
+void MARYOLED::WindowReset(void)
+{
+ command( SET_COLUMN_ADDRESS );
+ data( 0 );
+ data( 127 );
+ command( SET_ROW_ADDRESS );
+ data( 0 );
+ data( 127 );
+ command( WRITE_RAM_COMMAND );
+}
+
+
+
+
+const unsigned char FONT8x8[97][8] = {
+ {0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00}, // columns, rows, num_bytes_per_char
+ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // space 0x20
+ {0x30,0x78,0x78,0x30,0x30,0x00,0x30,0x00}, // !
+ {0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00}, // "
+ {0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00}, // #
+ {0x18,0x3E,0x60,0x3C,0x06,0x7C,0x18,0x00}, // $
+ {0x00,0x63,0x66,0x0C,0x18,0x33,0x63,0x00}, // %
+ {0x1C,0x36,0x1C,0x3B,0x6E,0x66,0x3B,0x00}, // &
+ {0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00}, // '
+ {0x0C,0x18,0x30,0x30,0x30,0x18,0x0C,0x00}, // (
+ {0x30,0x18,0x0C,0x0C,0x0C,0x18,0x30,0x00}, // )
+ {0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00}, // *
+ {0x00,0x30,0x30,0xFC,0x30,0x30,0x00,0x00}, // +
+ {0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x30}, // ,
+ {0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00}, // -
+ {0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00}, // .
+ {0x03,0x06,0x0C,0x18,0x30,0x60,0x40,0x00}, // / (forward slash)
+ {0x3E,0x63,0x63,0x6B,0x63,0x63,0x3E,0x00}, // 0 0x30
+ {0x18,0x38,0x58,0x18,0x18,0x18,0x7E,0x00}, // 1
+ {0x3C,0x66,0x06,0x1C,0x30,0x66,0x7E,0x00}, // 2
+ {0x3C,0x66,0x06,0x1C,0x06,0x66,0x3C,0x00}, // 3
+ {0x0E,0x1E,0x36,0x66,0x7F,0x06,0x0F,0x00}, // 4
+ {0x7E,0x60,0x7C,0x06,0x06,0x66,0x3C,0x00}, // 5
+ {0x1C,0x30,0x60,0x7C,0x66,0x66,0x3C,0x00}, // 6
+ {0x7E,0x66,0x06,0x0C,0x18,0x18,0x18,0x00}, // 7
+ {0x3C,0x66,0x66,0x3C,0x66,0x66,0x3C,0x00}, // 8
+ {0x3C,0x66,0x66,0x3E,0x06,0x0C,0x38,0x00}, // 9
+ {0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x00}, // :
+ {0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x30}, // ;
+ {0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x00}, // <
+ {0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00}, // =
+ {0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x00}, // >
+ {0x3C,0x66,0x06,0x0C,0x18,0x00,0x18,0x00}, // ?
+ {0x3E,0x63,0x6F,0x69,0x6F,0x60,0x3E,0x00}, // @ 0x40
+ {0x18,0x3C,0x66,0x66,0x7E,0x66,0x66,0x00}, // A
+ {0x7E,0x33,0x33,0x3E,0x33,0x33,0x7E,0x00}, // B
+ {0x1E,0x33,0x60,0x60,0x60,0x33,0x1E,0x00}, // C
+ {0x7C,0x36,0x33,0x33,0x33,0x36,0x7C,0x00}, // D
+ {0x7F,0x31,0x34,0x3C,0x34,0x31,0x7F,0x00}, // E
+ {0x7F,0x31,0x34,0x3C,0x34,0x30,0x78,0x00}, // F
+ {0x1E,0x33,0x60,0x60,0x67,0x33,0x1F,0x00}, // G
+ {0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x00}, // H
+ {0x3C,0x18,0x18,0x18,0x18,0x18,0x3C,0x00}, // I
+ {0x0F,0x06,0x06,0x06,0x66,0x66,0x3C,0x00}, // J
+ {0x73,0x33,0x36,0x3C,0x36,0x33,0x73,0x00}, // K
+ {0x78,0x30,0x30,0x30,0x31,0x33,0x7F,0x00}, // L
+ {0x63,0x77,0x7F,0x7F,0x6B,0x63,0x63,0x00}, // M
+ {0x63,0x73,0x7B,0x6F,0x67,0x63,0x63,0x00}, // N
+ {0x3E,0x63,0x63,0x63,0x63,0x63,0x3E,0x00}, // O
+ {0x7E,0x33,0x33,0x3E,0x30,0x30,0x78,0x00}, // P 0x50
+ {0x3C,0x66,0x66,0x66,0x6E,0x3C,0x0E,0x00}, // Q
+ {0x7E,0x33,0x33,0x3E,0x36,0x33,0x73,0x00}, // R
+ {0x3C,0x66,0x30,0x18,0x0C,0x66,0x3C,0x00}, // S
+ {0x7E,0x5A,0x18,0x18,0x18,0x18,0x3C,0x00}, // T
+ {0x66,0x66,0x66,0x66,0x66,0x66,0x7E,0x00}, // U
+ {0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00}, // V
+ {0x63,0x63,0x63,0x6B,0x7F,0x77,0x63,0x00}, // W
+ {0x63,0x63,0x36,0x1C,0x1C,0x36,0x63,0x00}, // X
+ {0x66,0x66,0x66,0x3C,0x18,0x18,0x3C,0x00}, // Y
+ {0x7F,0x63,0x46,0x0C,0x19,0x33,0x7F,0x00}, // Z
+ {0x3C,0x30,0x30,0x30,0x30,0x30,0x3C,0x00}, // [
+ {0x60,0x30,0x18,0x0C,0x06,0x03,0x01,0x00}, // \ (back slash)
+ {0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00}, // ]
+ {0x08,0x1C,0x36,0x63,0x00,0x00,0x00,0x00}, // ^
+ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF}, // _
+ {0x18,0x18,0x0C,0x00,0x00,0x00,0x00,0x00}, // ` 0x60
+ {0x00,0x00,0x3C,0x06,0x3E,0x66,0x3B,0x00}, // a
+ {0x70,0x30,0x3E,0x33,0x33,0x33,0x6E,0x00}, // b
+ {0x00,0x00,0x3C,0x66,0x60,0x66,0x3C,0x00}, // c
+ {0x0E,0x06,0x3E,0x66,0x66,0x66,0x3B,0x00}, // d
+ {0x00,0x00,0x3C,0x66,0x7E,0x60,0x3C,0x00}, // e
+ {0x1C,0x36,0x30,0x78,0x30,0x30,0x78,0x00}, // f
+ {0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x7C}, // g
+ {0x70,0x30,0x36,0x3B,0x33,0x33,0x73,0x00}, // h
+ {0x18,0x00,0x38,0x18,0x18,0x18,0x3C,0x00}, // i
+ {0x06,0x00,0x06,0x06,0x06,0x66,0x66,0x3C}, // j
+ {0x70,0x30,0x33,0x36,0x3C,0x36,0x73,0x00}, // k
+ {0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00}, // l
+ {0x00,0x00,0x66,0x7F,0x7F,0x6B,0x63,0x00}, // m
+ {0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x00}, // n
+ {0x00,0x00,0x3C,0x66,0x66,0x66,0x3C,0x00}, // o
+ {0x00,0x00,0x6E,0x33,0x33,0x3E,0x30,0x78}, // p
+ {0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x0F}, // q
+ {0x00,0x00,0x6E,0x3B,0x33,0x30,0x78,0x00}, // r
+ {0x00,0x00,0x3E,0x60,0x3C,0x06,0x7C,0x00}, // s
+ {0x08,0x18,0x3E,0x18,0x18,0x1A,0x0C,0x00}, // t
+ {0x00,0x00,0x66,0x66,0x66,0x66,0x3B,0x00}, // u
+ {0x00,0x00,0x66,0x66,0x66,0x3C,0x18,0x00}, // v
+ {0x00,0x00,0x63,0x6B,0x7F,0x7F,0x36,0x00}, // w
+ {0x00,0x00,0x63,0x36,0x1C,0x36,0x63,0x00}, // x
+ {0x00,0x00,0x66,0x66,0x66,0x3E,0x06,0x7C}, // y
+ {0x00,0x00,0x7E,0x4C,0x18,0x32,0x7E,0x00}, // z
+ {0x0E,0x18,0x18,0x70,0x18,0x18,0x0E,0x00}, // {
+ {0x0C,0x0C,0x0C,0x00,0x0C,0x0C,0x0C,0x00}, // |
+ {0x70,0x18,0x18,0x0E,0x18,0x18,0x70,0x00}, // }
+ {0x3B,0x6E,0x00,0x00,0x00,0x00,0x00,0x00}, // ~
+ {0x1C,0x36,0x36,0x1C,0x00,0x00,0x00,0x00}
+}; // DEL
+
+void MARYOLED::locate(int column, int row) {
+ _column = column;
+ _row = row;
+}
+
+void MARYOLED::newline() {
+ _column = 0;
+ _row++;
+ if (_row >= rows() ) {
+ _row = 0;
+ }
+}
+
+void MARYOLED::_putp( int colour ) {
+ /*int cnv = 0;
+
+ cnv = (colour >> 8) & 0xf800;
+ cnv |= (colour >> 5) & 0x07e0;
+ cnv |= (colour >> 3) & 0x001f;
+
+ data( cnv >> 8);
+ data( cnv );
+ */
+ unsigned long data1, data2;
+ data1 = ((colour >> 8) & 0xff) | 0x100;
+ data2 = (colour & 0x0ff) | 0x100;
+ data(data1);
+ data(data2);
+ }
+int MARYOLED::_putc(int value) {
+ int x = _column * 8; // FIXME: Char sizes
+ int y = _row * 8;
+ bitblit(x + 1, y + 1, 8, 8, (char*)&(FONT8x8[value - 0x1F][0]));
+
+ _column++;
+
+ if (_column >= MARYOLED_COLS) {
+ _row++;
+ _column = 0;
+ }
+
+ if (_row >= MARYOLED_ROWS) {
+ _row = 0;
+ }
+
+ return value;
+}
+
+void MARYOLED::cls( void ) {
+ fill( 0, 0, MARYOLED_WIDTH , MARYOLED_HEIGHT, _background );
+ _row = 0;
+ _column = 0;
+}
+
+
+void MARYOLED::window(int x, int y, int width, int height) {
+ // digitalWrite( OLED_CS, LOW );
+ _window(x, y, width, height);
+ //digitalWrite( OLED_CS, HIGH );
+}
+
+void MARYOLED::putp(int colour) {
+ //digitalWrite( OLED_CS, LOW );
+ _putp(colour);
+ //digitalWrite( OLED_CS, HIGH );
+}
+
+
+void MARYOLED::pixel(int x, int y, int colour) {
+ //digitalWrite( OLED_CS, LOW );
+ _window(x, y, 1, 1);
+ _putp(colour);
+ //digitalWrite( OLED_CS, HIGH );
+}
+
+void MARYOLED::fill( int x, int y, int width, int height, int colour )
+{
+ digitalWrite( OLED_CS, LOW );
+ _window( x, y, width, height );
+
+ for (int i = 0; i < width * height; i++ ) {
+ _putp( colour );
+ }
+
+ _window( 0, 0, MARYOLED_WIDTH, MARYOLED_HEIGHT );
+ digitalWrite( OLED_CS, HIGH );
+}
+
+
+void MARYOLED::blit( int x, int y, int width, int height, const int* colour ) {
+ digitalWrite( OLED_CS, LOW );
+ _window( x, y, width, height );
+
+ for (int i = 0; i < width * height; i++ ) {
+ _putp( colour[i] );
+ }
+ _window( 0, 0, MARYOLED_WIDTH, MARYOLED_HEIGHT );
+ digitalWrite( OLED_CS, HIGH );
+}
+
+
+void MARYOLED::bitblit( int x, int y, int width, int height, const char* bitstream ) {
+ digitalWrite( OLED_CS, LOW );
+ _window( x, y, width, height );
+
+ for (int i = 0; i < height * width; i++ ) {
+ int byte = i / 8;
+ int bit = i % 8;
+ int colour = ((bitstream[ byte ] << bit) & 0x80) ? _foreground : _background;
+ _putp( colour );
+ }
+ _window( 0, 0, _width, _height );
+ digitalWrite( OLED_CS, HIGH );
+}
+
+void MARYOLED::foreground(int c) {
+ _foreground = c;
+ return;
+}
+
+void MARYOLED::background(int c) {
+ _background = c;
+ return;
+}
+
+int MARYOLED::width() {
+ return MARYOLED_WIDTH;
+}
+
+int MARYOLED::height() {
+ return MARYOLED_HEIGHT;
+}
+
+int MARYOLED::columns() {
+ return MARYOLED_COLS;
+}
+
+int MARYOLED::rows() {
+ return MARYOLED_ROWS;
+}
+
+
diff --git a/src/Samples/maryoled.h b/src/Samples/maryoled.h
new file mode 100755
index 0000000..3998f8d
--- /dev/null
+++ b/src/Samples/maryoled.h
@@ -0,0 +1,127 @@
+/*
+ * MARYOLED.h
+ *
+ * Created on: 2011/08/01
+ * Author: lynxeyed
+ */
+
+#ifndef MARYOLED_H_
+#define MARYOLED_H_
+
+/**************************************************************************//**
+ * @file maryoled.h
+ * @brief Arduino-like library for MARY(LPC1114)
+ * @version v.0.50
+ * @date 1. August 2011.
+ * @author this library's assembled by @@dw256 and @@tedd_okano rebuild by @@lynxeyed_atsu
+ * @note Copyright (c) 2011 Lynx-EyED's Klavier and Craft-works. <BR>
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions: <BR>
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.<BR>
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ ******************************************************************************/
+
+#include "SPI.h"
+#include "gpio.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+typedef enum {OLED,Nokia6610,Nokia6100,PCF8833} LCD_DEVICES; // Defaults:OLED
+
+class MARYOLED {
+private:
+ SSP_PORT port;
+ LCD_DEVICES device;
+ int OLED_VCC_ON;
+ int OLED_CS;
+ int OLED_RES;
+ int _row;
+ int _column;
+ int _foreground;
+ int _background;
+ int _width;
+ int _height;
+
+ /** Command list for the OLED controller */
+ enum {
+ SET_DISPLAY_MODE_ALL_OFF = 0xA4,
+ SET_COMMAND_LOCK = 0xFD,
+ SET_SLEEP_MODE_ON = 0xAE,
+ FRONT_CLOCK_DRIVER_OSC_FREQ = 0xB3,
+ SET_MUX_RATIO = 0xCA,
+ SET_DISPAY_OFFSET = 0xA2,
+ SET_DISPAY_START_LINE = 0xA1,
+ SET_REMAP_COLOR_DEPTH = 0xA0,
+ SET_GPIO = 0xB5,
+ FUNCTION_SELECTION = 0xAB,
+ SET_SEGMENT_LOW_VOLTAGE = 0xB4,
+ SET_CONTRAST_CURRENT_FOR_COLOR_ABC = 0xC1,
+ MASTER_CONTRAST_CURRENT_CONTROL = 0xC7,
+ LOOKUP_TABLE_FOR_GRAYSCALE_PULSE_WIDTH = 0xB8,
+ USE_BUILT_IN_LINEAR_LUT = 0xB9,
+ SET_RESET_PRECHARGE_PERIOD = 0xB1,
+ ENHANCE_DRIVING_SCHEME_CAPABILITY = 0xB2,
+ SET_PRECHARGE_VOLTAGE = 0xBB,
+ SET_SECOND_PRECHARGE_VOLTAGE = 0xB6,
+ SET_VCOMH_VOLTAGE = 0xBE,
+ SET_DISPLAY_MODE_RESET = 0xA6,
+ SET_COLUMN_ADDRESS = 0x15,
+ SET_ROW_ADDRESS = 0x75,
+ WRITE_RAM_COMMAND = 0x5C,
+ SET_SLEEP_MODE_OFF = 0xAF
+ };
+ /** Constants for power() function */
+ enum {
+ OFF = 0, /**< : to turning-OFF */
+ ON /**< : to turning-ON */
+ };
+
+
+public:
+ MARYOLED(); // announce the constructor to initialize
+ ~MARYOLED();
+
+ void reset();
+ void reset(SSP_PORT port);
+ void command( int value );
+ void data( int value );
+ void _window( int x, int y, int width, int height );
+ void locate(int column, int row);
+ void newline();
+ void _putp( int colour );
+ int _putc( int value );
+ void cls( void );
+ void window( int x, int y, int width, int height );
+ void WindowReset(void);
+ void putp( int colour );
+ void pixel( int x, int y, int colour );
+ void fill( int x, int y, int width, int height, int colour );
+ void blit( int x, int y, int width, int height, const int* colour );
+ void bitblit( int x, int y, int width, int height, const char* bitstream );
+ void foreground(int c);
+ void background(int c);
+ int width();
+ int height();
+ int columns();
+ int rows();
+};
+
+extern MARYOLED oled;
+
+#ifdef __cplusplus
+ }
+#endif
+#endif /* MARYOLED_H_ */