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 Robert Ellis

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);
    }
}
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