Mercurial > code > home > repos > homeauto
comparison service/busyboxArduino/LiquidCrystal_V1.2.1/LiquidCrystal/LCD.h @ 154:58c47bfe0ce5
add LiquidCrystal_V1.2.1 lib
Ignore-this: ddfe8b0c1d6e19f210684520859d5a57
author | drewp@bigasterisk.com |
---|---|
date | Sat, 03 Jan 2015 23:35:16 -0800 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
153:f8c5ec994768 | 154:58c47bfe0ce5 |
---|---|
1 // --------------------------------------------------------------------------- | |
2 // Created by Francisco Malpartida on 20/08/11. | |
3 // Copyright 2011 - Under creative commons license 3.0: | |
4 // Attribution-ShareAlike CC BY-SA | |
5 // | |
6 // This software is furnished "as is", without technical support, and with no | |
7 // warranty, express or implied, as to its usefulness for any purpose. | |
8 // | |
9 // Thread Safe: No | |
10 // Extendable: Yes | |
11 // | |
12 // @file LCD.h | |
13 // This file implements a basic liquid crystal library that comes as standard | |
14 // in the Arduino SDK. | |
15 // | |
16 // @brief | |
17 // This is a basic implementation of the LiquidCrystal library of the | |
18 // Arduino SDK. This library is a refactored version of the one supplied | |
19 // in the Arduino SDK in such a way that it simplifies its extension | |
20 // to support other mechanism to communicate to LCDs such as I2C, Serial, SR, | |
21 // The original library has been reworked in such a way that this will be | |
22 // the base class implementing all generic methods to command an LCD based | |
23 // on the Hitachi HD44780 and compatible chipsets. | |
24 // | |
25 // This base class is a pure abstract class and needs to be extended. As reference, | |
26 // it has been extended to drive 4 and 8 bit mode control, LCDs and I2C extension | |
27 // backpacks such as the I2CLCDextraIO using the PCF8574* I2C IO Expander ASIC. | |
28 // | |
29 // The functionality provided by this class and its base class is identical | |
30 // to the original functionality of the Arduino LiquidCrystal library. | |
31 // | |
32 // @version API 1.1.0 | |
33 // | |
34 // | |
35 // @author F. Malpartida - fmalpartida@gmail.com | |
36 // --------------------------------------------------------------------------- | |
37 #ifndef _LCD_H_ | |
38 #define _LCD_H_ | |
39 | |
40 #if (ARDUINO < 100) | |
41 #include <WProgram.h> | |
42 #else | |
43 #include <Arduino.h> | |
44 #endif | |
45 | |
46 #include <inttypes.h> | |
47 #include <Print.h> | |
48 | |
49 | |
50 /*! | |
51 @defined | |
52 @abstract Enables disables fast waits for write operations for LCD | |
53 @discussion If defined, the library will avoid doing un-necessary waits. | |
54 this can be done, because the time taken by Arduino's slow digitalWrite | |
55 operations. If fast digitalIO operations, comment this line out or undefine | |
56 the mode. | |
57 */ | |
58 #ifdef __AVR__ | |
59 #define FAST_MODE | |
60 #endif | |
61 | |
62 /*! | |
63 @function | |
64 @abstract waits for a given time in microseconds (compilation dependent). | |
65 @discussion Waits for a given time defined in microseconds depending on | |
66 the FAST_MODE define. If the FAST_MODE is defined the call will return | |
67 inmediatelly. | |
68 @param uSec[in] time in microseconds. | |
69 @result None | |
70 */ | |
71 inline static void waitUsec ( uint16_t uSec ) | |
72 { | |
73 #ifndef FAST_MODE | |
74 delayMicroseconds ( uSec ); | |
75 #endif // FAST_MODE | |
76 } | |
77 | |
78 | |
79 /*! | |
80 @defined | |
81 @abstract All these definitions shouldn't be used unless you are writing | |
82 a driver. | |
83 @discussion All these definitions are for driver implementation only and | |
84 shouldn't be used by applications. | |
85 */ | |
86 // LCD Commands | |
87 // --------------------------------------------------------------------------- | |
88 #define LCD_CLEARDISPLAY 0x01 | |
89 #define LCD_RETURNHOME 0x02 | |
90 #define LCD_ENTRYMODESET 0x04 | |
91 #define LCD_DISPLAYCONTROL 0x08 | |
92 #define LCD_CURSORSHIFT 0x10 | |
93 #define LCD_FUNCTIONSET 0x20 | |
94 #define LCD_SETCGRAMADDR 0x40 | |
95 #define LCD_SETDDRAMADDR 0x80 | |
96 | |
97 // flags for display entry mode | |
98 // --------------------------------------------------------------------------- | |
99 #define LCD_ENTRYRIGHT 0x00 | |
100 #define LCD_ENTRYLEFT 0x02 | |
101 #define LCD_ENTRYSHIFTINCREMENT 0x01 | |
102 #define LCD_ENTRYSHIFTDECREMENT 0x00 | |
103 | |
104 // flags for display on/off and cursor control | |
105 // --------------------------------------------------------------------------- | |
106 #define LCD_DISPLAYON 0x04 | |
107 #define LCD_DISPLAYOFF 0x00 | |
108 #define LCD_CURSORON 0x02 | |
109 #define LCD_CURSOROFF 0x00 | |
110 #define LCD_BLINKON 0x01 | |
111 #define LCD_BLINKOFF 0x00 | |
112 | |
113 // flags for display/cursor shift | |
114 // --------------------------------------------------------------------------- | |
115 #define LCD_DISPLAYMOVE 0x08 | |
116 #define LCD_CURSORMOVE 0x00 | |
117 #define LCD_MOVERIGHT 0x04 | |
118 #define LCD_MOVELEFT 0x00 | |
119 | |
120 // flags for function set | |
121 // --------------------------------------------------------------------------- | |
122 #define LCD_8BITMODE 0x10 | |
123 #define LCD_4BITMODE 0x00 | |
124 #define LCD_2LINE 0x08 | |
125 #define LCD_1LINE 0x00 | |
126 #define LCD_5x10DOTS 0x04 | |
127 #define LCD_5x8DOTS 0x00 | |
128 | |
129 | |
130 // Define COMMAND and DATA LCD Rs (used by send method). | |
131 // --------------------------------------------------------------------------- | |
132 #define COMMAND 0 | |
133 #define DATA 1 | |
134 #define FOUR_BITS 2 | |
135 | |
136 | |
137 /*! | |
138 @defined | |
139 @abstract Defines the duration of the home and clear commands | |
140 @discussion This constant defines the time it takes for the home and clear | |
141 commands in the LCD - Time in microseconds. | |
142 */ | |
143 #define HOME_CLEAR_EXEC 2000 | |
144 | |
145 /*! | |
146 @defined | |
147 @abstract Backlight off constant declaration | |
148 @discussion Used in combination with the setBacklight to swith off the | |
149 LCD backlight. @set setBacklight | |
150 */ | |
151 #define BACKLIGHT_OFF 0 | |
152 | |
153 /*! | |
154 @defined | |
155 @abstract Backlight on constant declaration | |
156 @discussion Used in combination with the setBacklight to swith on the | |
157 LCD backlight. @set setBacklight | |
158 */ | |
159 #define BACKLIGHT_ON 255 | |
160 | |
161 | |
162 /*! | |
163 @typedef | |
164 @abstract Define backlight control polarity | |
165 @discussion Backlight control polarity. @see setBacklightPin. | |
166 */ | |
167 typedef enum { POSITIVE, NEGATIVE } t_backlighPol; | |
168 | |
169 class LCD : public Print | |
170 { | |
171 public: | |
172 | |
173 /*! | |
174 @method | |
175 @abstract LiquidCrystal abstract constructor. | |
176 @discussion LiquidCrystal class abstract constructor needed to create | |
177 the base abstract class. | |
178 */ | |
179 LCD ( ); | |
180 | |
181 /*! | |
182 @function | |
183 @abstract LCD initialization. | |
184 @discussion Initializes the LCD to a given size (col, row). This methods | |
185 initializes the LCD, therefore, it MUST be called prior to using any other | |
186 method from this class. | |
187 | |
188 This method is abstract, a base implementation is available common to all LCD | |
189 drivers. Should it not be compatible with some other LCD driver, a derived | |
190 implementation should be done on the driver specif class. | |
191 | |
192 @param cols[in] the number of columns that the display has | |
193 @param rows[in] the number of rows that the display has | |
194 @param charsize[in] character size, default==LCD_5x8DOTS | |
195 */ | |
196 virtual void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS); | |
197 | |
198 /*! | |
199 @function | |
200 @abstract Clears the LCD. | |
201 @discussion Clears the LCD screen and positions the cursor in the upper-left | |
202 corner. | |
203 | |
204 This operation is time consuming for the LCD. | |
205 | |
206 @param none | |
207 */ | |
208 void clear(); | |
209 | |
210 /*! | |
211 @function | |
212 @abstract Sets the cursor to the upper-left corner. | |
213 @discussion Positions the cursor in the upper-left of the LCD. | |
214 That is, use that location in outputting subsequent text to the display. | |
215 To also clear the display, use the clear() function instead. | |
216 | |
217 This operation is time consuming for the LCD. | |
218 | |
219 @param none | |
220 */ | |
221 void home(); | |
222 | |
223 /*! | |
224 @function | |
225 @abstract Turns off the LCD display. | |
226 @discussion Turns off the LCD display, without losing the text currently | |
227 being displayed on it. | |
228 | |
229 @param none | |
230 */ | |
231 void noDisplay(); | |
232 | |
233 /*! | |
234 @function | |
235 @abstract Turns on the LCD display. | |
236 @discussion Turns on the LCD display, after it's been turned off with | |
237 noDisplay(). This will restore the text (and cursor location) that was on | |
238 the display prior to calling noDisplay(). | |
239 | |
240 @param none | |
241 */ | |
242 void display(); | |
243 | |
244 /*! | |
245 @function | |
246 @abstract Turns off the blinking of the LCD cursor. | |
247 | |
248 @param none | |
249 */ | |
250 void noBlink(); | |
251 | |
252 /*! | |
253 @function | |
254 @abstract Display the cursor of the LCD. | |
255 @discussion Display the blinking LCD cursor. If used in combination with | |
256 the cursor() function, the result will depend on the particular display. | |
257 | |
258 @param none | |
259 */ | |
260 void blink(); | |
261 | |
262 /*! | |
263 @function | |
264 @abstract Hides the LCD cursor. | |
265 | |
266 @param none | |
267 */ | |
268 void noCursor(); | |
269 | |
270 /*! | |
271 @function | |
272 @abstract Display the LCD cursor. | |
273 @discussion Display the LCD cursor: an underscore (line) at the location | |
274 where the next character will be written. | |
275 | |
276 @param none | |
277 */ | |
278 void cursor(); | |
279 | |
280 /*! | |
281 @function | |
282 @abstract Scrolls the contents of the display (text and cursor) one space | |
283 to the left. | |
284 | |
285 @param none | |
286 */ | |
287 void scrollDisplayLeft(); | |
288 | |
289 /*! | |
290 @function | |
291 @abstract Scrolls the contents of the display (text and cursor) one space | |
292 to the right. | |
293 | |
294 @param none | |
295 */ | |
296 void scrollDisplayRight(); | |
297 | |
298 /*! | |
299 @function | |
300 @abstract Set the direction for text written to the LCD to left-to-right. | |
301 @discussion Set the direction for text written to the LCD to left-to-right. | |
302 All subsequent characters written to the display will go from left to right, | |
303 but does not affect previously-output text. | |
304 | |
305 This is the default configuration. | |
306 | |
307 @param none | |
308 */ | |
309 void leftToRight(); | |
310 | |
311 /*! | |
312 @function | |
313 @abstract Set the direction for text written to the LCD to right-to-left. | |
314 @discussion Set the direction for text written to the LCD to right-to-left. | |
315 All subsequent characters written to the display will go from right to left, | |
316 but does not affect previously-output text. | |
317 | |
318 left-to-right is the default configuration. | |
319 | |
320 @param none | |
321 */ | |
322 void rightToLeft(); | |
323 | |
324 /*! | |
325 @function | |
326 @abstract Moves the cursor one space to the left. | |
327 @discussion | |
328 @param none | |
329 */ | |
330 void moveCursorLeft(); | |
331 | |
332 | |
333 /*! | |
334 @function | |
335 @abstract Moves the cursor one space to the right. | |
336 | |
337 @param none | |
338 */ | |
339 void moveCursorRight(); | |
340 | |
341 /*! | |
342 @function | |
343 @abstract Turns on automatic scrolling of the LCD. | |
344 @discussion Turns on automatic scrolling of the LCD. This causes each | |
345 character output to the display to push previous characters over by one | |
346 space. If the current text direction is left-to-right (the default), | |
347 the display scrolls to the left; if the current direction is right-to-left, | |
348 the display scrolls to the right. | |
349 This has the effect of outputting each new character to the same location on | |
350 the LCD. | |
351 | |
352 @param none | |
353 */ | |
354 void autoscroll(); | |
355 | |
356 /*! | |
357 @function | |
358 @abstract Turns off automatic scrolling of the LCD. | |
359 @discussion Turns off automatic scrolling of the LCD, this is the default | |
360 configuration of the LCD. | |
361 | |
362 @param none | |
363 */ | |
364 void noAutoscroll(); | |
365 | |
366 /*! | |
367 @function | |
368 @abstract Creates a custom character for use on the LCD. | |
369 @discussion Create a custom character (glyph) for use on the LCD. | |
370 Most chipsets only support up to eight characters of 5x8 pixels. Therefore, | |
371 this methods has been limited to locations (numbered 0 to 7). | |
372 | |
373 The appearance of each custom character is specified by an array of eight | |
374 bytes, one for each row. The five least significant bits of each byte | |
375 determine the pixels in that row. To display a custom character on screen, | |
376 write()/print() its number, i.e. lcd.print (char(x)); // Where x is 0..7. | |
377 | |
378 @param location[in] LCD memory location of the character to create | |
379 (0 to 7) | |
380 @param charmap[in] the bitmap array representing each row of the character. | |
381 */ | |
382 void createChar(uint8_t location, uint8_t charmap[]); | |
383 | |
384 /*! | |
385 @function | |
386 @abstract Position the LCD cursor. | |
387 @discussion Sets the position of the LCD cursor. Set the location at which | |
388 subsequent text written to the LCD will be displayed. | |
389 | |
390 @param col[in] LCD column | |
391 @param row[in] LCD row - line. | |
392 */ | |
393 void setCursor(uint8_t col, uint8_t row); | |
394 | |
395 /*! | |
396 @function | |
397 @abstract Switch-on the LCD backlight. | |
398 @discussion Switch-on the LCD backlight. | |
399 The setBacklightPin has to be called before setting the backlight for | |
400 this method to work. @see setBacklightPin. | |
401 */ | |
402 void backlight ( void ); | |
403 | |
404 /*! | |
405 @function | |
406 @abstract Switch-off the LCD backlight. | |
407 @discussion Switch-off the LCD backlight. | |
408 The setBacklightPin has to be called before setting the backlight for | |
409 this method to work. @see setBacklightPin. | |
410 */ | |
411 void noBacklight ( void ); | |
412 | |
413 /*! | |
414 @function | |
415 @abstract Switch on the LCD module. | |
416 @discussion Switch on the LCD module, it will switch on the LCD controller | |
417 and the backlight. This method has the same effect of calling display and | |
418 backlight. @see display, @see backlight | |
419 */ | |
420 void on ( void ); | |
421 | |
422 /*! | |
423 @function | |
424 @abstract Switch off the LCD module. | |
425 @discussion Switch off the LCD module, it will switch off the LCD controller | |
426 and the backlight. This method has the same effect of calling noDisplay and | |
427 noBacklight. @see display, @see backlight | |
428 */ | |
429 void off ( void ); | |
430 | |
431 // | |
432 // virtual class methods | |
433 // -------------------------------------------------------------------------- | |
434 /*! | |
435 @function | |
436 @abstract Sets the pin to control the backlight. | |
437 @discussion Sets the pin in the device to control the backlight. | |
438 This method is device dependent and can be programmed on each subclass. An | |
439 empty function call is provided that does nothing. | |
440 | |
441 @param value: pin associated to backlight control. | |
442 @param pol: backlight polarity control (POSITIVE, NEGATIVE) | |
443 */ | |
444 virtual void setBacklightPin ( uint8_t value, t_backlighPol pol ) { }; | |
445 | |
446 /*! | |
447 @function | |
448 @abstract Sets the pin to control the backlight. | |
449 @discussion Sets the pin in the device to control the backlight. The behaviour | |
450 of this method is very dependent on the device. Some controllers support | |
451 dimming some don't. Please read the actual header file for each individual | |
452 device. The setBacklightPin method has to be called before setting the backlight | |
453 or the adequate backlight control constructor. | |
454 @see setBacklightPin. | |
455 | |
456 NOTE: The prefered methods to control the backlight are "backlight" and | |
457 "noBacklight". | |
458 | |
459 @param 0..255 - the value is very dependent on the LCD. However, | |
460 BACKLIGHT_OFF will be interpreted as off and BACKLIGHT_ON will drive the | |
461 backlight on. | |
462 */ | |
463 virtual void setBacklight ( uint8_t value ) { }; | |
464 | |
465 /*! | |
466 @function | |
467 @abstract Writes to the LCD. | |
468 @discussion This method writes character to the LCD in the current cursor | |
469 position. | |
470 | |
471 This is the virtual write method, implemented in the Print class, therefore | |
472 all Print class methods will end up calling this method. | |
473 | |
474 @param value[in] Value to write to the LCD. | |
475 */ | |
476 #if (ARDUINO < 100) | |
477 virtual void write(uint8_t value); | |
478 #else | |
479 virtual size_t write(uint8_t value); | |
480 #endif | |
481 | |
482 #if (ARDUINO < 100) | |
483 using Print::write; | |
484 #else | |
485 using Print::write; | |
486 #endif | |
487 | |
488 protected: | |
489 // Internal LCD variables to control the LCD shared between all derived | |
490 // classes. | |
491 uint8_t _displayfunction; // LCD_5x10DOTS or LCD_5x8DOTS, LCD_4BITMODE or | |
492 // LCD_8BITMODE, LCD_1LINE or LCD_2LINE | |
493 uint8_t _displaycontrol; // LCD base control command LCD on/off, blink, cursor | |
494 // all commands are "ored" to its contents. | |
495 uint8_t _displaymode; // Text entry mode to the LCD | |
496 uint8_t _numlines; // Number of lines of the LCD, initialized with begin() | |
497 uint8_t _cols; // Number of columns in the LCD | |
498 t_backlighPol _polarity; // Backlight polarity | |
499 | |
500 private: | |
501 /*! | |
502 @function | |
503 @abstract Send a command to the LCD. | |
504 @discussion This method sends a command to the LCD by setting the Register | |
505 select line of the LCD. | |
506 | |
507 This command shouldn't be used to drive the LCD, only to implement any other | |
508 feature that is not available on this library. | |
509 | |
510 @param value[in] Command value to send to the LCD (COMMAND, DATA or | |
511 FOUR_BITS). | |
512 */ | |
513 void command(uint8_t value); | |
514 | |
515 /*! | |
516 @function | |
517 @abstract Send a particular value to the LCD. | |
518 @discussion Sends a particular value to the LCD. This is a pure abstract | |
519 method, therefore, it is implementation dependent of each derived class how | |
520 to physically write to the LCD. | |
521 | |
522 Users should never call this method. | |
523 | |
524 @param value[in] Value to send to the LCD. | |
525 @result mode LOW - write to the LCD CGRAM, HIGH - write a command to | |
526 the LCD. | |
527 */ | |
528 #if (ARDUINO < 100) | |
529 virtual void send(uint8_t value, uint8_t mode) { }; | |
530 #else | |
531 virtual void send(uint8_t value, uint8_t mode) = 0; | |
532 #endif | |
533 | |
534 }; | |
535 | |
536 #endif |