diff options
author | David A. Mellis <d.mellis@arduino.cc> | 2008-04-19 03:31:36 +0000 |
---|---|---|
committer | David A. Mellis <d.mellis@arduino.cc> | 2008-04-19 03:31:36 +0000 |
commit | 2d5bc015fbd70befc08c2295630ff06770e9d7c8 (patch) | |
tree | 0b2b41ab905ce47067d3365861aced34f89caa9c | |
parent | e8465fbb4500ed3968e7a06c2d75a5b3f1841b8e (diff) |
Adding LiquidCrystal library.
-rwxr-xr-x | libraries/LiquidCrystal/LiquidCrystal.cpp | 128 | ||||
-rwxr-xr-x | libraries/LiquidCrystal/LiquidCrystal.h | 31 | ||||
-rw-r--r-- | libraries/LiquidCrystal/examples/HelloWorld/HelloWorld.pde | 12 | ||||
-rw-r--r-- | libraries/LiquidCrystal/examples/SerialDisplay/SerialDisplay.pde | 19 | ||||
-rwxr-xr-x | libraries/LiquidCrystal/keywords.txt | 23 |
5 files changed, 213 insertions, 0 deletions
diff --git a/libraries/LiquidCrystal/LiquidCrystal.cpp b/libraries/LiquidCrystal/LiquidCrystal.cpp new file mode 100755 index 0000000..c5acc85 --- /dev/null +++ b/libraries/LiquidCrystal/LiquidCrystal.cpp @@ -0,0 +1,128 @@ +#include "LiquidCrystal.h" + +#include <stdio.h> +#include <string.h> +#include <inttypes.h> +#include "WProgram.h" + +// When the display powers up, it is configured as follows: +// +// 1. Display clear +// 2. Function set: +// DL = 1; 8-bit interface data +// N = 0; 1-line display +// F = 0; 5x8 dot character font +// 3. Display on/off control: +// D = 0; Display off +// C = 0; Cursor off +// B = 0; Blinking off +// 4. Entry mode set: +// I/D = 1; Increment by 1 +// S = 0; No shift +// +// Note, however, that resetting the Arduino doesn't reset the LCD, so we +// can't assume that its in that state when a sketch starts (and the +// LiquidCrystal constructor is called). + +LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) : Print(baseWrite), + _four_bit_mode(0), _rs_pin(rs), _rw_pin(rw), _enable_pin(enable) +{ + _data_pins[0] = d0; + _data_pins[1] = d1; + _data_pins[2] = d2; + _data_pins[3] = d3; + _data_pins[4] = d4; + _data_pins[5] = d5; + _data_pins[6] = d6; + _data_pins[7] = d7; + + pinMode(_rs_pin, OUTPUT); + pinMode(_rw_pin, OUTPUT); + pinMode(_enable_pin, OUTPUT); + + for (int i = 0; i < 8; i++) + pinMode(_data_pins[i], OUTPUT); + + command(0x38); // function set: 8 bits, 1 line, 5x8 dots + command(0x0C); // display control: turn display on, cursor off, no blinking + command(0x06); // entry mode set: increment automatically, display shift, right shift + clear(); +} + +LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3) : Print(baseWrite), + _four_bit_mode(1), _rs_pin(rs), _rw_pin(rw), _enable_pin(enable) +{ + _data_pins[0] = d0; + _data_pins[1] = d1; + _data_pins[2] = d2; + _data_pins[3] = d3; + + pinMode(_rs_pin, OUTPUT); + pinMode(_rw_pin, OUTPUT); + pinMode(_enable_pin, OUTPUT); + + for (int i = 0; i < 4; i++) + pinMode(_data_pins[i], OUTPUT); + + command(0x28); // function set: 4 bits, 1 line, 5x8 dots + command(0x0C); // display control: turn display on, cursor off, no blinking + command(0x06); // entry mode set: increment automatically, display shift, right shift + clear(); +} + +void LiquidCrystal::clear() +{ + command(0x01); // clear display, set cursor position to zero + delayMicroseconds(2000); +} + +void LiquidCrystal::home() +{ + command(0x02); // set cursor position to zero + delayMicroseconds(2000); +} + +void LiquidCrystal::setCursor(int col, int row) +{ + int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 }; + command(0x80 | (col + row_offsets[row])); +} + +void LiquidCrystal::command(int value) { + write(value, LOW); +} + +void LiquidCrystal::write(int value, int mode) { + digitalWrite(_rs_pin, mode); + digitalWrite(_rw_pin, LOW); + + if (_four_bit_mode) { + for (int i = 0; i < 4; i++) { + digitalWrite(_data_pins[i], (value >> (i + 4)) & 0x01); + } + + digitalWrite(_enable_pin, HIGH); + digitalWrite(_enable_pin, LOW); + + for (int i = 0; i < 4; i++) { + digitalWrite(_data_pins[i], (value >> i) & 0x01); + } + + digitalWrite(_enable_pin, HIGH); + digitalWrite(_enable_pin, LOW); + } else { + for (int i = 0; i < 8; i++) { + digitalWrite(_data_pins[i], (value >> i) & 0x01); + } + + digitalWrite(_enable_pin, HIGH); + digitalWrite(_enable_pin, LOW); + } +} + +void baseWrite(uint8_t value, void *instance) { + ((LiquidCrystal *) instance)->write(value); +} diff --git a/libraries/LiquidCrystal/LiquidCrystal.h b/libraries/LiquidCrystal/LiquidCrystal.h new file mode 100755 index 0000000..c4746c5 --- /dev/null +++ b/libraries/LiquidCrystal/LiquidCrystal.h @@ -0,0 +1,31 @@ +#ifndef LiquidCrystal_h +#define LiquidCrystal_h + +#include <inttypes.h> +#include "Print.h" + +class LiquidCrystal : public Print { +public: + LiquidCrystal(uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t); + LiquidCrystal(uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, + uint8_t, uint8_t, uint8_t, uint8_t); + void clear(); + void home(); + void setCursor(int, int); + /* + void shiftDisplayLeft(); + void shiftDisplayRight(); + */ + void write(int, int = 1); + void command(int); +private: + uint8_t _four_bit_mode; + uint8_t _rs_pin; // LOW: command. HIGH: character. + uint8_t _rw_pin; // LOW: write to LCD. HIGH: read from LCD. + uint8_t _enable_pin; // activated by a HIGH pulse. + uint8_t _data_pins[8]; +}; + +void baseWrite(uint8_t, void *); + +#endif diff --git a/libraries/LiquidCrystal/examples/HelloWorld/HelloWorld.pde b/libraries/LiquidCrystal/examples/HelloWorld/HelloWorld.pde new file mode 100644 index 0000000..d514215 --- /dev/null +++ b/libraries/LiquidCrystal/examples/HelloWorld/HelloWorld.pde @@ -0,0 +1,12 @@ +#include <LiquidCrystal.h> + +LiquidCrystal lcd(12, 11, 2, 7, 8, 9, 10); + +void setup() +{ + lcd.print("hello, world!"); +} + +void loop() +{ +} diff --git a/libraries/LiquidCrystal/examples/SerialDisplay/SerialDisplay.pde b/libraries/LiquidCrystal/examples/SerialDisplay/SerialDisplay.pde new file mode 100644 index 0000000..c1f405a --- /dev/null +++ b/libraries/LiquidCrystal/examples/SerialDisplay/SerialDisplay.pde @@ -0,0 +1,19 @@ +#include <LiquidCrystal.h> + +LiquidCrystal lcd(12, 11, 2, 7, 8, 9, 10); + +void setup() +{ + Serial.begin(9600); +} + +void loop() +{ + if (Serial.available()) { + delay(100); + lcd.clear(); + while (Serial.available() > 0) { + lcd.write(Serial.read()); + } + } +} diff --git a/libraries/LiquidCrystal/keywords.txt b/libraries/LiquidCrystal/keywords.txt new file mode 100755 index 0000000..367ab1f --- /dev/null +++ b/libraries/LiquidCrystal/keywords.txt @@ -0,0 +1,23 @@ +####################################### +# Syntax Coloring Map For LiquidCrystal +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +LiquidCrystal KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### + +clear KEYWORD2 +home KEYWORD2 +print KEYWORD2 +setCursor KEYWORD2 + +####################################### +# Constants (LITERAL1) +####################################### + |