diff options
Diffstat (limited to 'src/core/maryoled.cpp')
| -rwxr-xr-x | src/core/maryoled.cpp | 484 |
1 files changed, 0 insertions, 484 deletions
diff --git a/src/core/maryoled.cpp b/src/core/maryoled.cpp deleted file mode 100755 index 8df935c..0000000 --- a/src/core/maryoled.cpp +++ /dev/null @@ -1,484 +0,0 @@ -/* 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; -} - - |
