/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h
Go to the documentation of this file.

    00001 // ---------------------------------------------------------------------------
    00002 // Created by Francisco Malpartida on 20/08/11.
    00003 // Copyright 2011 - Under creative commons license 3.0:
    00004 //        Attribution-ShareAlike CC BY-SA
    00005 //
    00006 // This software is furnished "as is", without technical support, and with no
    00007 // warranty, express or implied, as to its usefulness for any purpose.
    00008 //
    00009 // Thread Safe: No
    00010 // Extendable: Yes
    00011 //
    00012 // @file LCD.h
    00013 // This file implements a basic liquid crystal library that comes as standard
    00014 // in the Arduino SDK.
    00015 //
    00016 // @brief
    00017 // This is a basic implementation of the LiquidCrystal library of the
    00018 // Arduino SDK. This library is a refactored version of the one supplied
    00019 // in the Arduino SDK in such a way that it simplifies its extension
    00020 // to support other mechanism to communicate to LCDs such as I2C, Serial, SR,
    00021 // The original library has been reworked in such a way that this will be
    00022 // the base class implementing all generic methods to command an LCD based
    00023 // on the Hitachi HD44780 and compatible chipsets.
    00024 //
    00025 // This base class is a pure abstract class and needs to be extended. As reference,
    00026 // it has been extended to drive 4 and 8 bit mode control, LCDs and I2C extension
    00027 // backpacks such as the I2CLCDextraIO using the PCF8574* I2C IO Expander ASIC.
    00028 //
    00029 // The functionality provided by this class and its base class is identical
    00030 // to the original functionality of the Arduino LiquidCrystal library.
    00031 //
    00032 // @version API 1.1.0
    00033 //
    00034 //
    00035 // @author F. Malpartida - fmalpartida@gmail.com
    00036 // ---------------------------------------------------------------------------
    00037 #ifndef _LCD_H_
    00038 #define _LCD_H_
    00039
    00040 #if (ARDUINO <  100)
    00041 #include <WProgram.h>
    00042 #else
    00043 #include <Arduino.h>
    00044 #endif
    00045
    00046 #include <inttypes.h>
    00047 #include <Print.h>
    00048
    00049
    00058 #ifdef __AVR__
    00059 #define FAST_MODE
    00060 #endif
    00061
    00071 inline static void waitUsec ( uint16_t uSec )
    00072 {
    00073 #ifndef FAST_MODE
    00074    delayMicroseconds ( uSec );
    00075 #endif // FAST_MODE
    00076 }
    00077
    00078
    00086 // LCD Commands
    00087 // ---------------------------------------------------------------------------
    00088 #define LCD_CLEARDISPLAY        0x01
    00089 #define LCD_RETURNHOME          0x02
    00090 #define LCD_ENTRYMODESET        0x04
    00091 #define LCD_DISPLAYCONTROL      0x08
    00092 #define LCD_CURSORSHIFT         0x10
    00093 #define LCD_FUNCTIONSET         0x20
    00094 #define LCD_SETCGRAMADDR        0x40
    00095 #define LCD_SETDDRAMADDR        0x80
    00096
    00097 // flags for display entry mode
    00098 // ---------------------------------------------------------------------------
    00099 #define LCD_ENTRYRIGHT          0x00
    00100 #define LCD_ENTRYLEFT           0x02
    00101 #define LCD_ENTRYSHIFTINCREMENT 0x01
    00102 #define LCD_ENTRYSHIFTDECREMENT 0x00
    00103
    00104 // flags for display on/off and cursor control
    00105 // ---------------------------------------------------------------------------
    00106 #define LCD_DISPLAYON           0x04
    00107 #define LCD_DISPLAYOFF          0x00
    00108 #define LCD_CURSORON            0x02
    00109 #define LCD_CURSOROFF           0x00
    00110 #define LCD_BLINKON             0x01
    00111 #define LCD_BLINKOFF            0x00
    00112
    00113 // flags for display/cursor shift
    00114 // ---------------------------------------------------------------------------
    00115 #define LCD_DISPLAYMOVE         0x08
    00116 #define LCD_CURSORMOVE          0x00
    00117 #define LCD_MOVERIGHT           0x04
    00118 #define LCD_MOVELEFT            0x00
    00119
    00120 // flags for function set
    00121 // ---------------------------------------------------------------------------
    00122 #define LCD_8BITMODE            0x10
    00123 #define LCD_4BITMODE            0x00
    00124 #define LCD_2LINE               0x08
    00125 #define LCD_1LINE               0x00
    00126 #define LCD_5x10DOTS            0x04
    00127 #define LCD_5x8DOTS             0x00
    00128
    00129
    00130 // Define COMMAND and DATA LCD Rs (used by send method).
    00131 // ---------------------------------------------------------------------------
    00132 #define COMMAND                 0
    00133 #define DATA                    1
    00134 #define FOUR_BITS               2
    00135
    00136
    00143 #define HOME_CLEAR_EXEC      2000
    00144
    00151 #define BACKLIGHT_OFF           0
    00152
    00159 #define BACKLIGHT_ON          255
    00160
    00161
    00167 typedef enum { POSITIVE, NEGATIVE } t_backlighPol;
    00168
    00169 class LCD : public Print
    00170 {
    00171 public:
    00172
    00179    LCD ( );
    00180
    00196    virtual void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS);
    00197
    00208    void clear();
    00209
    00221    void home();
    00222
    00231    void noDisplay();
    00232
    00242    void display();
    00243
    00250    void noBlink();
    00251
    00260    void blink();
    00261
    00268    void noCursor();
    00269
    00278    void cursor();
    00279
    00287    void scrollDisplayLeft();
    00288
    00296    void scrollDisplayRight();
    00297
    00309    void leftToRight();
    00310
    00322    void rightToLeft();
    00323
    00330    void moveCursorLeft();
    00331
    00332
    00339    void moveCursorRight();
    00340
    00354    void autoscroll();
    00355
    00364    void noAutoscroll();
    00365
    00382    void createChar(uint8_t location, uint8_t charmap[]);
    00383
    00393    void setCursor(uint8_t col, uint8_t row);
    00394
    00402    void backlight ( void );
    00403
    00411    void noBacklight ( void );
    00412
    00420    void on ( void );
    00421
    00429    void off ( void );
    00430
    00431    //
    00432    // virtual class methods
    00433    // --------------------------------------------------------------------------
    00444    virtual void setBacklightPin ( uint8_t value, t_backlighPol pol ) { };
    00445
    00463    virtual void setBacklight ( uint8_t value ) { };
    00464
    00476 #if (ARDUINO <  100)
    00477    virtual void write(uint8_t value);
    00478 #else
    00479    virtual size_t write(uint8_t value);
    00480 #endif
    00481
    00482 #if (ARDUINO <  100)
    00483    using Print::write;
    00484 #else
    00485    using Print::write;
    00486 #endif
    00487
    00488 protected:
    00489    // Internal LCD variables to control the LCD shared between all derived
    00490    // classes.
    00491    uint8_t _displayfunction;  // LCD_5x10DOTS or LCD_5x8DOTS, LCD_4BITMODE or
    00492                               // LCD_8BITMODE, LCD_1LINE or LCD_2LINE
    00493    uint8_t _displaycontrol;   // LCD base control command LCD on/off, blink, cursor
    00494                               // all commands are "ored" to its contents.
    00495    uint8_t _displaymode;      // Text entry mode to the LCD
    00496    uint8_t _numlines;         // Number of lines of the LCD, initialized with begin()
    00497    uint8_t _cols;             // Number of columns in the LCD
    00498    t_backlighPol _polarity;   // Backlight polarity
    00499
    00500 private:
    00513    void command(uint8_t value);
    00514
    00528 #if (ARDUINO <  100)
    00529    virtual void send(uint8_t value, uint8_t mode) { };
    00530 #else
    00531    virtual void send(uint8_t value, uint8_t mode) = 0;
    00532 #endif
    00533
    00534 };
    00535
    00536 #endif

All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines