LCD

Dependents:   stofzuigrobot

Committer:
firstsignupoftheweek
Date:
Wed Jul 03 09:51:08 2019 +0000
Revision:
0:f363e3d1f212
LCD

Who changed what in which revision?

UserRevisionLine numberNew 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