LCD
LiquidCrystal_I2C.h@0:f363e3d1f212, 2019-07-03 (annotated)
- Committer:
- firstsignupoftheweek
- Date:
- Wed Jul 03 09:51:08 2019 +0000
- Revision:
- 0:f363e3d1f212
LCD
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
firstsignupoftheweek | 0:f363e3d1f212 | 1 | #ifndef FDB_LIQUID_CRYSTAL_I2C_H |
firstsignupoftheweek | 0:f363e3d1f212 | 2 | #define FDB_LIQUID_CRYSTAL_I2C_H |
firstsignupoftheweek | 0:f363e3d1f212 | 3 | |
firstsignupoftheweek | 0:f363e3d1f212 | 4 | //#include <inttypes.h> |
firstsignupoftheweek | 0:f363e3d1f212 | 5 | //#include <Print.h> |
firstsignupoftheweek | 0:f363e3d1f212 | 6 | |
firstsignupoftheweek | 0:f363e3d1f212 | 7 | // commands |
firstsignupoftheweek | 0:f363e3d1f212 | 8 | #define LCD_CLEARDISPLAY 0x01 |
firstsignupoftheweek | 0:f363e3d1f212 | 9 | #define LCD_RETURNHOME 0x02 |
firstsignupoftheweek | 0:f363e3d1f212 | 10 | #define LCD_ENTRYMODESET 0x04 |
firstsignupoftheweek | 0:f363e3d1f212 | 11 | #define LCD_DISPLAYCONTROL 0x08 |
firstsignupoftheweek | 0:f363e3d1f212 | 12 | #define LCD_CURSORSHIFT 0x10 |
firstsignupoftheweek | 0:f363e3d1f212 | 13 | #define LCD_FUNCTIONSET 0x20 |
firstsignupoftheweek | 0:f363e3d1f212 | 14 | #define LCD_SETCGRAMADDR 0x40 |
firstsignupoftheweek | 0:f363e3d1f212 | 15 | #define LCD_SETDDRAMADDR 0x80 |
firstsignupoftheweek | 0:f363e3d1f212 | 16 | |
firstsignupoftheweek | 0:f363e3d1f212 | 17 | // flags for display entry mode |
firstsignupoftheweek | 0:f363e3d1f212 | 18 | #define LCD_ENTRYRIGHT 0x00 |
firstsignupoftheweek | 0:f363e3d1f212 | 19 | #define LCD_ENTRYLEFT 0x02 |
firstsignupoftheweek | 0:f363e3d1f212 | 20 | #define LCD_ENTRYSHIFTINCREMENT 0x01 |
firstsignupoftheweek | 0:f363e3d1f212 | 21 | #define LCD_ENTRYSHIFTDECREMENT 0x00 |
firstsignupoftheweek | 0:f363e3d1f212 | 22 | |
firstsignupoftheweek | 0:f363e3d1f212 | 23 | // flags for display on/off control |
firstsignupoftheweek | 0:f363e3d1f212 | 24 | #define LCD_DISPLAYON 0x04 |
firstsignupoftheweek | 0:f363e3d1f212 | 25 | #define LCD_DISPLAYOFF 0x00 |
firstsignupoftheweek | 0:f363e3d1f212 | 26 | #define LCD_CURSORON 0x02 |
firstsignupoftheweek | 0:f363e3d1f212 | 27 | #define LCD_CURSOROFF 0x00 |
firstsignupoftheweek | 0:f363e3d1f212 | 28 | #define LCD_BLINKON 0x01 |
firstsignupoftheweek | 0:f363e3d1f212 | 29 | #define LCD_BLINKOFF 0x00 |
firstsignupoftheweek | 0:f363e3d1f212 | 30 | |
firstsignupoftheweek | 0:f363e3d1f212 | 31 | // flags for display/cursor shift |
firstsignupoftheweek | 0:f363e3d1f212 | 32 | #define LCD_DISPLAYMOVE 0x08 |
firstsignupoftheweek | 0:f363e3d1f212 | 33 | #define LCD_CURSORMOVE 0x00 |
firstsignupoftheweek | 0:f363e3d1f212 | 34 | #define LCD_MOVERIGHT 0x04 |
firstsignupoftheweek | 0:f363e3d1f212 | 35 | #define LCD_MOVELEFT 0x00 |
firstsignupoftheweek | 0:f363e3d1f212 | 36 | |
firstsignupoftheweek | 0:f363e3d1f212 | 37 | // flags for function set |
firstsignupoftheweek | 0:f363e3d1f212 | 38 | #define LCD_8BITMODE 0x10 |
firstsignupoftheweek | 0:f363e3d1f212 | 39 | #define LCD_4BITMODE 0x00 |
firstsignupoftheweek | 0:f363e3d1f212 | 40 | #define LCD_2LINE 0x08 |
firstsignupoftheweek | 0:f363e3d1f212 | 41 | #define LCD_1LINE 0x00 |
firstsignupoftheweek | 0:f363e3d1f212 | 42 | #define LCD_5x10DOTS 0x04 |
firstsignupoftheweek | 0:f363e3d1f212 | 43 | #define LCD_5x8DOTS 0x00 |
firstsignupoftheweek | 0:f363e3d1f212 | 44 | |
firstsignupoftheweek | 0:f363e3d1f212 | 45 | // flags for backlight control |
firstsignupoftheweek | 0:f363e3d1f212 | 46 | #define LCD_BACKLIGHT 0x08 |
firstsignupoftheweek | 0:f363e3d1f212 | 47 | #define LCD_NOBACKLIGHT 0x00 |
firstsignupoftheweek | 0:f363e3d1f212 | 48 | |
firstsignupoftheweek | 0:f363e3d1f212 | 49 | #define En 0x04//B00000100 // Enable bit |
firstsignupoftheweek | 0:f363e3d1f212 | 50 | #define Rw 0x02 // B00000010 // Read/Write bit |
firstsignupoftheweek | 0:f363e3d1f212 | 51 | #define Rs 0x01 //B00000001 // Register select bit |
firstsignupoftheweek | 0:f363e3d1f212 | 52 | |
firstsignupoftheweek | 0:f363e3d1f212 | 53 | /** |
firstsignupoftheweek | 0:f363e3d1f212 | 54 | * This is the driver for the Liquid Crystal LCD displays that use the I2C bus. |
firstsignupoftheweek | 0:f363e3d1f212 | 55 | * |
firstsignupoftheweek | 0:f363e3d1f212 | 56 | * After creating an instance of this class, first call begin() before anything else. |
firstsignupoftheweek | 0:f363e3d1f212 | 57 | * The backlight is on by default, since that is the most likely operating mode in |
firstsignupoftheweek | 0:f363e3d1f212 | 58 | * most cases. |
firstsignupoftheweek | 0:f363e3d1f212 | 59 | */ |
firstsignupoftheweek | 0:f363e3d1f212 | 60 | class LiquidCrystal_I2C { |
firstsignupoftheweek | 0:f363e3d1f212 | 61 | public: |
firstsignupoftheweek | 0:f363e3d1f212 | 62 | /** |
firstsignupoftheweek | 0:f363e3d1f212 | 63 | * Constructor |
firstsignupoftheweek | 0:f363e3d1f212 | 64 | * |
firstsignupoftheweek | 0:f363e3d1f212 | 65 | * @param lcd_addr I2C slave address of the LCD display. Most likely printed on the |
firstsignupoftheweek | 0:f363e3d1f212 | 66 | * LCD circuit board, or look in the supplied LCD documentation. |
firstsignupoftheweek | 0:f363e3d1f212 | 67 | * @param lcd_cols Number of columns your LCD display has. |
firstsignupoftheweek | 0:f363e3d1f212 | 68 | * @param lcd_rows Number of rows your LCD display has. |
firstsignupoftheweek | 0:f363e3d1f212 | 69 | * @param charsize The size in dots that the display has, use LCD_5x10DOTS or LCD_5x8DOTS. |
firstsignupoftheweek | 0:f363e3d1f212 | 70 | */ |
firstsignupoftheweek | 0:f363e3d1f212 | 71 | LiquidCrystal_I2C(unsigned char lcd_addr, unsigned char lcd_cols, unsigned char lcd_rows, unsigned char charsize = LCD_5x8DOTS); |
firstsignupoftheweek | 0:f363e3d1f212 | 72 | |
firstsignupoftheweek | 0:f363e3d1f212 | 73 | /** |
firstsignupoftheweek | 0:f363e3d1f212 | 74 | * Set the LCD display in the correct begin state, must be called before anything else is done. |
firstsignupoftheweek | 0:f363e3d1f212 | 75 | */ |
firstsignupoftheweek | 0:f363e3d1f212 | 76 | void begin(); |
firstsignupoftheweek | 0:f363e3d1f212 | 77 | |
firstsignupoftheweek | 0:f363e3d1f212 | 78 | /** |
firstsignupoftheweek | 0:f363e3d1f212 | 79 | * Remove all the characters currently shown. Next print/write operation will start |
firstsignupoftheweek | 0:f363e3d1f212 | 80 | * from the first position on LCD display. |
firstsignupoftheweek | 0:f363e3d1f212 | 81 | */ |
firstsignupoftheweek | 0:f363e3d1f212 | 82 | void clear(); |
firstsignupoftheweek | 0:f363e3d1f212 | 83 | |
firstsignupoftheweek | 0:f363e3d1f212 | 84 | /** |
firstsignupoftheweek | 0:f363e3d1f212 | 85 | * Next print/write operation will will start from the first position on the LCD display. |
firstsignupoftheweek | 0:f363e3d1f212 | 86 | */ |
firstsignupoftheweek | 0:f363e3d1f212 | 87 | void home(); |
firstsignupoftheweek | 0:f363e3d1f212 | 88 | |
firstsignupoftheweek | 0:f363e3d1f212 | 89 | /** |
firstsignupoftheweek | 0:f363e3d1f212 | 90 | * Do not show any characters on the LCD display. Backlight state will remain unchanged. |
firstsignupoftheweek | 0:f363e3d1f212 | 91 | * Also all characters written on the display will return, when the display in enabled again. |
firstsignupoftheweek | 0:f363e3d1f212 | 92 | */ |
firstsignupoftheweek | 0:f363e3d1f212 | 93 | void noDisplay(); |
firstsignupoftheweek | 0:f363e3d1f212 | 94 | |
firstsignupoftheweek | 0:f363e3d1f212 | 95 | /** |
firstsignupoftheweek | 0:f363e3d1f212 | 96 | * Show the characters on the LCD display, this is the normal behaviour. This method should |
firstsignupoftheweek | 0:f363e3d1f212 | 97 | * only be used after noDisplay() has been used. |
firstsignupoftheweek | 0:f363e3d1f212 | 98 | */ |
firstsignupoftheweek | 0:f363e3d1f212 | 99 | void display(); |
firstsignupoftheweek | 0:f363e3d1f212 | 100 | |
firstsignupoftheweek | 0:f363e3d1f212 | 101 | /** |
firstsignupoftheweek | 0:f363e3d1f212 | 102 | * Do not blink the cursor indicator. |
firstsignupoftheweek | 0:f363e3d1f212 | 103 | */ |
firstsignupoftheweek | 0:f363e3d1f212 | 104 | void noBlink(); |
firstsignupoftheweek | 0:f363e3d1f212 | 105 | |
firstsignupoftheweek | 0:f363e3d1f212 | 106 | /** |
firstsignupoftheweek | 0:f363e3d1f212 | 107 | * Start blinking the cursor indicator. |
firstsignupoftheweek | 0:f363e3d1f212 | 108 | */ |
firstsignupoftheweek | 0:f363e3d1f212 | 109 | void blink(); |
firstsignupoftheweek | 0:f363e3d1f212 | 110 | |
firstsignupoftheweek | 0:f363e3d1f212 | 111 | /** |
firstsignupoftheweek | 0:f363e3d1f212 | 112 | * Do not show a cursor indicator. |
firstsignupoftheweek | 0:f363e3d1f212 | 113 | */ |
firstsignupoftheweek | 0:f363e3d1f212 | 114 | void noCursor(); |
firstsignupoftheweek | 0:f363e3d1f212 | 115 | |
firstsignupoftheweek | 0:f363e3d1f212 | 116 | /** |
firstsignupoftheweek | 0:f363e3d1f212 | 117 | * Show a cursor indicator, cursor can blink on not blink. Use the |
firstsignupoftheweek | 0:f363e3d1f212 | 118 | * methods blink() and noBlink() for changing cursor blink. |
firstsignupoftheweek | 0:f363e3d1f212 | 119 | */ |
firstsignupoftheweek | 0:f363e3d1f212 | 120 | void cursor(); |
firstsignupoftheweek | 0:f363e3d1f212 | 121 | |
firstsignupoftheweek | 0:f363e3d1f212 | 122 | void scrollDisplayLeft(); |
firstsignupoftheweek | 0:f363e3d1f212 | 123 | void scrollDisplayRight(); |
firstsignupoftheweek | 0:f363e3d1f212 | 124 | void printLeft(); |
firstsignupoftheweek | 0:f363e3d1f212 | 125 | void printRight(); |
firstsignupoftheweek | 0:f363e3d1f212 | 126 | void leftToRight(); |
firstsignupoftheweek | 0:f363e3d1f212 | 127 | void rightToLeft(); |
firstsignupoftheweek | 0:f363e3d1f212 | 128 | void shiftIncrement(); |
firstsignupoftheweek | 0:f363e3d1f212 | 129 | void shiftDecrement(); |
firstsignupoftheweek | 0:f363e3d1f212 | 130 | void noBacklight(); |
firstsignupoftheweek | 0:f363e3d1f212 | 131 | void backlight(); |
firstsignupoftheweek | 0:f363e3d1f212 | 132 | bool getBacklight(); |
firstsignupoftheweek | 0:f363e3d1f212 | 133 | void autoscroll(); |
firstsignupoftheweek | 0:f363e3d1f212 | 134 | void noAutoscroll(); |
firstsignupoftheweek | 0:f363e3d1f212 | 135 | void createChar(unsigned char, unsigned char[]); |
firstsignupoftheweek | 0:f363e3d1f212 | 136 | void setCursor(unsigned char, unsigned char); |
firstsignupoftheweek | 0:f363e3d1f212 | 137 | virtual int write(unsigned char); |
firstsignupoftheweek | 0:f363e3d1f212 | 138 | void command(unsigned char); |
firstsignupoftheweek | 0:f363e3d1f212 | 139 | |
firstsignupoftheweek | 0:f363e3d1f212 | 140 | inline void blink_on() { blink(); } |
firstsignupoftheweek | 0:f363e3d1f212 | 141 | inline void blink_off() { noBlink(); } |
firstsignupoftheweek | 0:f363e3d1f212 | 142 | inline void cursor_on() { cursor(); } |
firstsignupoftheweek | 0:f363e3d1f212 | 143 | inline void cursor_off() { noCursor(); } |
firstsignupoftheweek | 0:f363e3d1f212 | 144 | |
firstsignupoftheweek | 0:f363e3d1f212 | 145 | // Compatibility API function aliases |
firstsignupoftheweek | 0:f363e3d1f212 | 146 | void setBacklight(unsigned char new_val); // alias for backlight() and nobacklight() |
firstsignupoftheweek | 0:f363e3d1f212 | 147 | void load_custom_character(unsigned char char_num, unsigned char *rows); // alias for createChar() |
firstsignupoftheweek | 0:f363e3d1f212 | 148 | void printstr(const char[]); |
firstsignupoftheweek | 0:f363e3d1f212 | 149 | int print(const char* text); |
firstsignupoftheweek | 0:f363e3d1f212 | 150 | private: |
firstsignupoftheweek | 0:f363e3d1f212 | 151 | void send(unsigned char, unsigned char); |
firstsignupoftheweek | 0:f363e3d1f212 | 152 | void write4bits(unsigned char); |
firstsignupoftheweek | 0:f363e3d1f212 | 153 | void expanderWrite(unsigned char); |
firstsignupoftheweek | 0:f363e3d1f212 | 154 | void pulseEnable(unsigned char); |
firstsignupoftheweek | 0:f363e3d1f212 | 155 | unsigned char _addr; |
firstsignupoftheweek | 0:f363e3d1f212 | 156 | unsigned char _displayfunction; |
firstsignupoftheweek | 0:f363e3d1f212 | 157 | unsigned char _displaycontrol; |
firstsignupoftheweek | 0:f363e3d1f212 | 158 | unsigned char _displaymode; |
firstsignupoftheweek | 0:f363e3d1f212 | 159 | unsigned char _cols; |
firstsignupoftheweek | 0:f363e3d1f212 | 160 | unsigned char _rows; |
firstsignupoftheweek | 0:f363e3d1f212 | 161 | unsigned char _charsize; |
firstsignupoftheweek | 0:f363e3d1f212 | 162 | unsigned char _backlightval; |
firstsignupoftheweek | 0:f363e3d1f212 | 163 | }; |
firstsignupoftheweek | 0:f363e3d1f212 | 164 | |
firstsignupoftheweek | 0:f363e3d1f212 | 165 | #endif // FDB_LIQUID_CRYSTAL_I2C_H |