Orignal AVR Tiny USI Based I2C slave LCD Driver.

Dependents:   MyLCD_OSARU MyLCD_printf

MyLCD.h

Committer:
bant62
Date:
2013-12-12
Revision:
1:794acd9a0b9c
Parent:
0:2ba6a6510880

File content as of revision 1:794acd9a0b9c:

/**
 *****************************************************************************
 * File Name    : MyLCD.h
 *
 * Title        : ORGINAL I2C LCD Display Claass Header File
 * Revision     : 0.1
 * Notes        :
 * Target Board : mbed NXP LPC1768, mbed LPC1114FN28  etc
 * Tool Chain   : ????
 *
 * Revision History:
 * When         Who         Description of change
 * -----------  ----------- -----------------------
 * 2013/12/06   Hiroshi M   init
 *****************************************************************************
 *
 * Copyright (C) 2013 Hiroshi M, MIT License
 *
 * 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:
 *
 * The above copyright notice and this permission notice shall be included in all copies or
 * substantial portions of the Software.
 *
 * 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.
 *
 **/

#ifndef __MYLCD_H_
#define __MYLCD_H_

/* Includes ----------------------------------------------------------------- */
#include "mbed.h"
/* typedef ------------------------------------------------------------------ */

/* define ------------------------------------------------------------------- */
#define ESC             0x1B
#define I2C_ADDR_MYLCD  0x32
#define _i2cSUCCESS     0
#define _i2cFAILURE     1

/* macro -------------------------------------------------------------------- */
/* variables ---------------------------------------------------------------- */
/* class -------------------------------------------------------------------- */
class MyLCD : public Stream
{
private:
    static const int i2c_addr = I2C_ADDR_MYLCD << 1;
    static const int i2c_bit_wait_us = 20;
    static const int i2c_command_wait_ms = 4;
    static const int display_columns = 16;
    static const int display_rows = 2;

    I2C *_i2c;
    int _column, _row;
    int writeBytes(const char *data, int length, bool repeated=false);

protected:
    virtual int _putc(int value);
    virtual int _getc();
    
    void character(int column, int row, int c);
    int columns();
    int rows();

public:
    MyLCD(I2C *i2c);
#if DOXYGEN_ONLY
    int putc(int value);
    int printf(const char* format, ...);
#endif
    
    int gotoCursor( int x, int y );
    int home(void);
    int clear(void);
    int offDisplay(void);
    int onDisplay(void);
    int blinkCharacter(void);
    int dispCursor(void);
    int blinkCursor(void);
    int hideCursor(void);
    int moveLeftCursor(void);
    int moveRightCursor(void);
    int moveLeftDisplay(void);
    int moveRightDisplay(void);
    int printChar(char chr);
    int printStr(const char *s);
    
    int saveCustomCharacter(int romCharNum, char lcdCharData[]);
    int mapCustomCharacter(int romCharNum, int lcdCharNum);
};

#endif /* __MYLCD_H_ */