SparkFun SerLCD v2.5 controller; Copied from the Arduino.cc SerLCD library; http://playground.arduino.cc/Code/SerLCD
Dependents: ForEhab Serial_HelloWorld_Mbed ForOfek
Fork of LCDSerial by
Test Code
#include "mbed.h" #include "SerialLCD.h" SerialLCD lcd(PTC4); uint8_t smiley[8] = { 0x00, 0x11, 0x00, 0x00, 0x11, 0x0E, 0x00 }; int main() { lcd.clear(); while(true) { /// Test code /// lcd.clearLine(1); lcd.printf("Full Bright Test"); lcd.setBrightness(30); wait(3); lcd.clearLine(1); lcd.printf("Blink Test"); lcd.setCursor(2, 1); lcd.printf("Blinking"); lcd.blink(); wait(3); lcd.clearLine(1); lcd.printf("Clear Test"); wait(2); lcd.clear(); wait(3); lcd.clearLine(1); lcd.printf("New Char Test"); lcd.setCursor(2, 1); lcd.createChar(1, smiley); lcd.printCustomChar(1); wait(3); lcd.clearLine(1); lcd.printf("Cursor Test"); lcd.setCursor(2, 1); lcd.cursor(); wait(3); lcd.clearLine(1); lcd.printf("Display Test"); lcd.noDisplay(); wait(2); lcd.display(); wait(3); lcd.clearLine(1); lcd.printf("Home Test"); lcd.setCursor(2, 1); lcd.home(); lcd.printf("Got home"); wait(3); lcd.leftToRight(); lcd.clearLine(1); lcd.printf("LeftToRight Test"); wait(3); lcd.clearLine(1); lcd.printf("noBlink Test"); lcd.setCursor(2, 1); lcd.noBlink(); wait(3); lcd.clearLine(1); lcd.printf("noCursor Test"); lcd.setCursor(2, 1); lcd.noCursor(); wait(3); lcd.rightToLeft(); lcd.clearLine(1); lcd.printf("rightToLeft Test"); wait(3); lcd.clearLine(1); lcd.printf("Half Bright Test"); lcd.setBrightness(15); wait(3); } }
Diff: SerialLCD.h
- Revision:
- 1:96f055419f71
- Parent:
- 0:df5850d83ee5
--- a/SerialLCD.h Sun Feb 13 15:16:20 2011 +0000 +++ b/SerialLCD.h Wed May 22 02:10:44 2013 +0000 @@ -3,55 +3,218 @@ #include "mbed.h" -#define LCD_WIDTH 16 #define LCD_BAUD 9600 +// Commands +#define LCD_BACKLIGHT 0x80 +#define LCD_CLEARDISPLAY 0x01 +#define LCD_CURSORSHIFT 0x10 +#define LCD_DISPLAYCONTROL 0x08 +#define LCD_ENTRYMODESET 0x04 +#define LCD_FUNCTIONSET 0x20 +#define LCD_SETCGRAMADDR 0x40 +#define LCD_SETDDRAMADDR 0x80 +#define LCD_SETSPLASHSCREEN 0x0A +#define LCD_SPLASHTOGGLE 0x09 +#define LCD_RETURNHOME 0x02 + +// Flags for display entry mode +#define LCD_ENTRYRIGHT 0x00 +#define LCD_ENTRYLEFT 0x02 + +// Flags for display on/off control +#define LCD_BLINKON 0x01 +#define LCD_CURSORON 0x02 +#define LCD_DISPLAYON 0x04 + +// Flags for display size +#define LCD_2LINE 0x02 +#define LCD_4LINE 0x04 +#define LCD_16CHAR 0x10 +#define LCD_20CHAR 0x14 + +// Flags for setting display size +#define LCD_SET2LINE 0x06 +#define LCD_SET4LINE 0x05 +#define LCD_SET16CHAR 0x04 +#define LCD_SET20CHAR 0x03 + +// LCD Types +#define LCD_2X16 3 +#define LCD_2X20 4 +#define LCD_4X16 5 +#define LCD_4X20 6 + /** * SparkFun SerLCD v2.5 Controller + * + * Copied from the Arduino.cc SerLCD library. + * @see http://playground.arduino.cc/Code/SerLCD */ class SerialLCD : public Serial { public: - - /** - * Constructor. + /** Constructor. * @param tx Connected to rx pin of LCD - * @param rx Not connected but needs to be specified for serial interface. + * @param type Type of LCD (Optional default 16x2) */ - SerialLCD(PinName tx, PinName rx); + SerialLCD(PinName tx, uint8_t type = 3); - /** - * Clear the LCD. + /** Blinks the cursor. This blinks the whole + * box or just the cursor bar. + */ + void blink(); + + /** Clears the whole LCD and sets the + * cursor to the first row, first column. */ void clear(); - - /** - * Set backlight brightness; + /** Clears the current line and resets + * the cursor to the beginning of the + * line. */ - void setBacklight(int brightness); - - /** - * Set cursor position. + void clearLine(uint8_t); + /** Creates a custom character for the + * LCD. + * @param location Location to store the char (1-8) + * @param data Byte array containing the enabled pixel bits + * @code + * #include <NewSoftSerial.h> + * #include <serLCD.h> + * + * // Set pin to the LCD's rxPin + * int pin = 2; + * + * serLCD lcd(pin); + * + * byte bars[8][8] = { + * {B00000,B00000,B00000,B00000,B00000,B00000,B00000,B11111}, + * {B00000,B00000,B00000,B00000,B00000,B00000,B11111,B11111}, + * {B00000,B00000,B00000,B00000,B00000,B11111,B11111,B11111}, + * {B00000,B00000,B00000,B00000,B11111,B11111,B11111,B11111}, + * {B00000,B00000,B00000,B11111,B11111,B11111,B11111,B11111}, + * {B00000,B00000,B11111,B11111,B11111,B11111,B11111,B11111}, + * {B00000,B11111,B11111,B11111,B11111,B11111,B11111,B11111}, + * {B11111,B11111,B11111,B11111,B11111,B11111,B11111,B11111} + * }; + * + * void main() { + * for (int i=1; i < 9; i++){ + * lcd.createChar(i, bars[i-1]); + * } + * for (int i=1; i < 9; i++){ + * lcd.printCustomChar(i); + * } + * while(1); + * } + * + * @endcode */ - void setPosition(int row, int col); - - /** - * Make LCD text visible or invisible. + void createChar(uint8_t, uint8_t[]); + /** Display the LCD cursor: an underscore (line) at the + * position to which the next character will be written. + * This does not define if it blinks or not. + */ + void cursor(); + /** Turns on the LCD display, after it's been turned off + * with noDisplay(). This will restore the text (and + * cursor) that was on the display. + */ + void display(); + /** Positions the cursor in the upper-left of the LCD. + */ + void home(); + /** Set the direction for text written to the LCD to + * left-to-right, the default. This means that subsequent + * characters written to the display will go from left to + * right, but does not affect previously-output text. + */ + void leftToRight(); + /** Turns off the blinking LCD cursor. */ - void setVisible(bool visible); - - /** - * Start scrolling to the left. + void noBlink(); + /** Hides the LCD cursor. + */ + void noCursor(); + /** Turns off the LCD display, without losing the text + * currently shown on it. + */ + void noDisplay(); + /** Print a custom character (gylph) on to the LCD. Up + * to eight characters of 5x8 pixels are supported + * (numbered 1 to 8). The custom characters are designed + * by the createChar() command. + * @param location Which character to print (1 to 8), created by createChar() + */ + void printCustomChar(uint8_t); + /** Set the direction for text written to the LCD to + * right-to-left (the default is left-to-right). This + * means that subsequent characters written to the + * display will go from right to left, but does not + * affect previously-output text. + */ + void rightToLeft(); + /** Scrolls the text on the LCD one position to the left. */ void scrollLeft(); - - /** - * Start scrolling to the right. + /** Scrolls the text on the LCD one position to the right. */ void scrollRight(); + /** Moves the cursor to the beginning of selected line. + * Line numbers start with 1. Valid line numbers are 1-4. + * @param line Line number to go to + */ + void selectLine(uint8_t line); + /** Sets the backlight brightness based on input value. + * Values range from 1-30. + * @params brightness 1 = Off -> 30 = Full Brightness + */ + void setBrightness(uint8_t num); + /** Position the LCD cursor. + * @param row Row position of the cursor (1 being the first row) + * @param col Column position the cursor (1 being the first column) + */ + void setCursor(uint8_t row, uint8_t col); + /** Saves the first 2 lines of text that are currently + * printed on the LCD screen to memory as the new splash screen. + * @code + * void setup() + * { + * lcd.print(" New "); + * lcd.print(" Splash Screen! "); + * lcd.setSplash(); + * } + * @endcode + */ + void setSplash(); + /** The SerLCD firmware v2.5 supports setting different types + * of LCD's. This function allows to easily set the type of LCD. + * + * The function expects a parameter value of 3 - 6: + * Defines: + * LCD_2X16(3) - 2x16 LCD + * LCD_2X20(4) - 2x20 LCD + * LCD_4X16(5) - 4x16 LCD + * LCD_4X20(6) - 4x20 LCD + * + * After changing the settings, the value is written to the EEPROM + * so the SerialLCD will remember it even after a power-off. + */ + void setType(uint8_t type); + /** Toggles the splash screen on/off. + */ + void toggleSplash(); - +private: + void command(uint8_t); + void specialCommand(uint8_t); + + uint8_t _displayfunction; + uint8_t _displaycontrol; + uint8_t _displaymode; + uint8_t _numlines; + uint8_t _numchars; + uint8_t _rowoffset; }; - #endif