1 | #ifndef LiquidCrystal_h
|
---|
2 | #define LiquidCrystal_h
|
---|
3 |
|
---|
4 | #include <inttypes.h>
|
---|
5 | #include "Print.h"
|
---|
6 |
|
---|
7 | // commands
|
---|
8 | #define LCD_CLEARDISPLAY 0x01
|
---|
9 | #define LCD_RETURNHOME 0x02
|
---|
10 | #define LCD_ENTRYMODESET 0x04
|
---|
11 | #define LCD_DISPLAYCONTROL 0x08
|
---|
12 | #define LCD_CURSORSHIFT 0x10
|
---|
13 | #define LCD_FUNCTIONSET 0x20
|
---|
14 | #define LCD_SETCGRAMADDR 0x40
|
---|
15 | #define LCD_SETDDRAMADDR 0x80
|
---|
16 |
|
---|
17 | // flags for display entry mode
|
---|
18 | #define LCD_ENTRYRIGHT 0x00
|
---|
19 | #define LCD_ENTRYLEFT 0x02
|
---|
20 | #define LCD_ENTRYSHIFTINCREMENT 0x01
|
---|
21 | #define LCD_ENTRYSHIFTDECREMENT 0x00
|
---|
22 |
|
---|
23 | // flags for display on/off control
|
---|
24 | #define LCD_DISPLAYON 0x04
|
---|
25 | #define LCD_DISPLAYOFF 0x00
|
---|
26 | #define LCD_CURSORON 0x02
|
---|
27 | #define LCD_CURSOROFF 0x00
|
---|
28 | #define LCD_BLINKON 0x01
|
---|
29 | #define LCD_BLINKOFF 0x00
|
---|
30 |
|
---|
31 | // flags for display/cursor shift
|
---|
32 | #define LCD_DISPLAYMOVE 0x08
|
---|
33 | #define LCD_CURSORMOVE 0x00
|
---|
34 | #define LCD_MOVERIGHT 0x04
|
---|
35 | #define LCD_MOVELEFT 0x00
|
---|
36 |
|
---|
37 | // flags for function set
|
---|
38 | #define LCD_8BITMODE 0x10
|
---|
39 | #define LCD_4BITMODE 0x00
|
---|
40 | #define LCD_2LINE 0x08
|
---|
41 | #define LCD_1LINE 0x00
|
---|
42 | #define LCD_5x10DOTS 0x04
|
---|
43 | #define LCD_5x8DOTS 0x00
|
---|
44 |
|
---|
45 | class LiquidCrystal : public Print {
|
---|
46 | public:
|
---|
47 | LiquidCrystal(uint8_t rs, uint8_t enable,
|
---|
48 | uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
|
---|
49 | uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
|
---|
50 | LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
|
---|
51 | uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
|
---|
52 | uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
|
---|
53 | LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
|
---|
54 | uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);
|
---|
55 | LiquidCrystal(uint8_t rs, uint8_t enable,
|
---|
56 | uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);
|
---|
57 |
|
---|
58 | void init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable,
|
---|
59 | uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
|
---|
60 | uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
|
---|
61 |
|
---|
62 | void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS);
|
---|
63 |
|
---|
64 | void clear();
|
---|
65 | void home();
|
---|
66 |
|
---|
67 | void noDisplay();
|
---|
68 | void display();
|
---|
69 | void noBlink();
|
---|
70 | void blink();
|
---|
71 | void noCursor();
|
---|
72 | void cursor();
|
---|
73 | void scrollDisplayLeft();
|
---|
74 | void scrollDisplayRight();
|
---|
75 | void leftToRight();
|
---|
76 | void rightToLeft();
|
---|
77 | void autoscroll();
|
---|
78 | void noAutoscroll();
|
---|
79 |
|
---|
80 | void setRowOffsets(int row1, int row2, int row3, int row4);
|
---|
81 | void createChar(uint8_t, uint8_t[]);
|
---|
82 | void setCursor(uint8_t, uint8_t);
|
---|
83 | virtual size_t write(uint8_t);
|
---|
84 | void command(uint8_t);
|
---|
85 |
|
---|
86 | using Print::write;
|
---|
87 | private:
|
---|
88 | void send(uint8_t, uint8_t);
|
---|
89 | void write4bits(uint8_t);
|
---|
90 | void write8bits(uint8_t);
|
---|
91 | void pulseEnable();
|
---|
92 |
|
---|
93 | uint8_t _rs_pin; // LOW: command. HIGH: character.
|
---|
94 | uint8_t _rw_pin; // LOW: write to LCD. HIGH: read from LCD.
|
---|
95 | uint8_t _enable_pin; // activated by a HIGH pulse.
|
---|
96 | uint8_t _data_pins[8];
|
---|
97 |
|
---|
98 | uint8_t _displayfunction;
|
---|
99 | uint8_t _displaycontrol;
|
---|
100 | uint8_t _displaymode;
|
---|
101 |
|
---|
102 | uint8_t _initialized;
|
---|
103 |
|
---|
104 | uint8_t _numlines;
|
---|
105 | uint8_t _row_offsets[4];
|
---|
106 | };
|
---|
107 |
|
---|
108 | #endif
|
---|