193 lines
4.2 KiB
C++
Executable File
193 lines
4.2 KiB
C++
Executable File
/*
|
|
LCD03.h - Arduino library for I2C LCD03 display from Robot Electronics
|
|
see http://www.robot-electronics.co.uk/htm/Lcd03tech.htm
|
|
Copyright (c) 2013 Ben Arblaster. All right reserved.
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Lesser General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2.1 of the License, or (at your option) any later version.
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
License along with this library; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
#ifndef LCD03_h
|
|
#define LCD03_h
|
|
|
|
#include <inttypes.h>
|
|
#include <Wire.h>
|
|
#include "Print.h"
|
|
|
|
// default i2c address
|
|
#define I2C_ADDR 0xC6
|
|
|
|
// registers
|
|
#define REG_COMMAND 0x00
|
|
#define REG_KEYPADLOW 0x01
|
|
#define REG_KEYPADHIGH 0x02
|
|
#define REG_VERSION 0x03
|
|
|
|
// commands
|
|
#define LCD_NOOP 0x00
|
|
#define LCD_CURSORHOME 0x01
|
|
#define LCD_CURSORPOS 0x02
|
|
#define LCD_CURSORPOSXY 0x03
|
|
#define LCD_CURSOROFF 0x04
|
|
#define LCD_CURSORON 0x05
|
|
#define LCD_CURSORBLINK 0x06
|
|
#define LCD_BACKSPACE 0x08
|
|
#define LCD_TAB 0x09
|
|
#define LCD_CURSORDOWN 0x0A
|
|
#define LCD_CURSORUP 0x0B
|
|
#define LCD_CLEARDISPLAY 0x0C
|
|
#define LCD_LINEFEED 0x0D
|
|
#define LCD_CLEARCOLUMN 0x11
|
|
#define LCD_TABSET 0x12
|
|
#define LCD_BACKLIGHTON 0x13
|
|
#define LCD_BACKLIGHTOFF 0x14
|
|
#define LCD_CUSTOMCHAR 0x1B
|
|
|
|
// custom chars
|
|
#define LCD_CUSTOMCHAR_BASE 0x80
|
|
#define LCD_CUSTOMCHAR_MASK 0b11100000
|
|
|
|
// keypad values
|
|
#define KEYPAD_1 0x01
|
|
#define KEYPAD_2 0x02
|
|
#define KEYPAD_3 0x04
|
|
#define KEYPAD_4 0x08
|
|
#define KEYPAD_5 0x10
|
|
#define KEYPAD_6 0x20
|
|
#define KEYPAD_7 0x40
|
|
#define KEYPAD_8 0x80
|
|
#define KEYPAD_9 0x100
|
|
#define KEYPAD_STAR 0x200
|
|
#define KEYPAD_0 0x400
|
|
#define KEYPAD_HASH 0x800
|
|
|
|
class LCD03 : public Print {
|
|
public:
|
|
// Constructors
|
|
#ifdef ARDUINO_ARCH_esp8266
|
|
LCD03(char i2c_address=I2C_ADDR, uint8_t sda_pin=SDA, uint8_t scl_pin=SCL);
|
|
#else
|
|
LCD03(char i2c_address=I2C_ADDR);
|
|
#endif
|
|
// LiquidCrystal compatible functions
|
|
void begin(uint8_t cols, uint8_t rows);
|
|
void clear();
|
|
void home();
|
|
void setCursor(uint8_t);
|
|
void setCursor(uint8_t, uint8_t);
|
|
size_t write(uint8_t);
|
|
size_t write(const uint8_t *buffer, size_t size);
|
|
void cursor();
|
|
void noCursor();
|
|
void blink();
|
|
void noBlink();
|
|
void display();
|
|
void noDisplay();
|
|
void createChar(uint8_t, uint8_t[]);
|
|
|
|
// Unimplemented LiquidCrystal functions
|
|
//void scrollDisplayLeft();
|
|
//void scrollDisplayRight();
|
|
//void autoscroll();
|
|
//void noAutoscroll();
|
|
//void leftToRight();
|
|
//void rightToLeft();
|
|
|
|
// LCD03 extras
|
|
void newLine();
|
|
void cursorDown();
|
|
void cursorUp();
|
|
void clearColumn();
|
|
void backspace();
|
|
void tab();
|
|
void tabSet(uint8_t);
|
|
void backlight();
|
|
void noBacklight();
|
|
uint8_t bufferFreeBytes();
|
|
uint16_t readKeypad();
|
|
|
|
private:
|
|
char _i2c_address;
|
|
|
|
void send(uint8_t);
|
|
};
|
|
|
|
inline void LCD03::clear() {
|
|
send(LCD_CLEARDISPLAY);
|
|
}
|
|
|
|
inline void LCD03::backlight() {
|
|
send(LCD_BACKLIGHTON);
|
|
}
|
|
|
|
inline void LCD03::noBacklight() {
|
|
send(LCD_BACKLIGHTOFF);
|
|
}
|
|
|
|
// provided for compatibility with LiquidCrystal - only backlight is switched
|
|
inline void LCD03::display() {
|
|
send(LCD_BACKLIGHTON);
|
|
}
|
|
|
|
// provided for compatibility with LiquidCrystal - only backlight is switched
|
|
inline void LCD03::noDisplay() {
|
|
send(LCD_BACKLIGHTOFF);
|
|
}
|
|
|
|
inline void LCD03::home() {
|
|
send(LCD_CURSORHOME);
|
|
}
|
|
|
|
inline void LCD03::noBlink() {
|
|
send(LCD_CURSORON);
|
|
}
|
|
|
|
inline void LCD03::blink() {
|
|
send(LCD_CURSORBLINK);
|
|
}
|
|
|
|
inline void LCD03::noCursor() {
|
|
send(LCD_CURSOROFF);
|
|
}
|
|
|
|
inline void LCD03::cursor() {
|
|
send(LCD_CURSORON);
|
|
}
|
|
|
|
inline void LCD03::newLine() {
|
|
send(LCD_LINEFEED);
|
|
}
|
|
|
|
inline void LCD03::cursorDown() {
|
|
send(LCD_CURSORDOWN);
|
|
}
|
|
|
|
inline void LCD03::cursorUp() {
|
|
send(LCD_CURSORUP);
|
|
}
|
|
|
|
inline void LCD03::clearColumn() {
|
|
send(LCD_CLEARCOLUMN);
|
|
}
|
|
|
|
inline void LCD03::backspace() {
|
|
send(LCD_BACKSPACE);
|
|
}
|
|
|
|
inline void LCD03::tab() {
|
|
send(LCD_TAB);
|
|
}
|
|
|
|
#endif
|
|
|