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);
    }
}
Committer:
fossum_13
Date:
Wed May 22 02:10:44 2013 +0000
Revision:
1:96f055419f71
Parent:
0:df5850d83ee5
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Phlaphead 0:df5850d83ee5 1 #ifndef SerialLCD_h
Phlaphead 0:df5850d83ee5 2 #define SerialLCD_h
Phlaphead 0:df5850d83ee5 3
Phlaphead 0:df5850d83ee5 4 #include "mbed.h"
Phlaphead 0:df5850d83ee5 5
Phlaphead 0:df5850d83ee5 6 #define LCD_BAUD 9600
Phlaphead 0:df5850d83ee5 7
fossum_13 1:96f055419f71 8 // Commands
fossum_13 1:96f055419f71 9 #define LCD_BACKLIGHT 0x80
fossum_13 1:96f055419f71 10 #define LCD_CLEARDISPLAY 0x01
fossum_13 1:96f055419f71 11 #define LCD_CURSORSHIFT 0x10
fossum_13 1:96f055419f71 12 #define LCD_DISPLAYCONTROL 0x08
fossum_13 1:96f055419f71 13 #define LCD_ENTRYMODESET 0x04
fossum_13 1:96f055419f71 14 #define LCD_FUNCTIONSET 0x20
fossum_13 1:96f055419f71 15 #define LCD_SETCGRAMADDR 0x40
fossum_13 1:96f055419f71 16 #define LCD_SETDDRAMADDR 0x80
fossum_13 1:96f055419f71 17 #define LCD_SETSPLASHSCREEN 0x0A
fossum_13 1:96f055419f71 18 #define LCD_SPLASHTOGGLE 0x09
fossum_13 1:96f055419f71 19 #define LCD_RETURNHOME 0x02
fossum_13 1:96f055419f71 20
fossum_13 1:96f055419f71 21 // Flags for display entry mode
fossum_13 1:96f055419f71 22 #define LCD_ENTRYRIGHT 0x00
fossum_13 1:96f055419f71 23 #define LCD_ENTRYLEFT 0x02
fossum_13 1:96f055419f71 24
fossum_13 1:96f055419f71 25 // Flags for display on/off control
fossum_13 1:96f055419f71 26 #define LCD_BLINKON 0x01
fossum_13 1:96f055419f71 27 #define LCD_CURSORON 0x02
fossum_13 1:96f055419f71 28 #define LCD_DISPLAYON 0x04
fossum_13 1:96f055419f71 29
fossum_13 1:96f055419f71 30 // Flags for display size
fossum_13 1:96f055419f71 31 #define LCD_2LINE 0x02
fossum_13 1:96f055419f71 32 #define LCD_4LINE 0x04
fossum_13 1:96f055419f71 33 #define LCD_16CHAR 0x10
fossum_13 1:96f055419f71 34 #define LCD_20CHAR 0x14
fossum_13 1:96f055419f71 35
fossum_13 1:96f055419f71 36 // Flags for setting display size
fossum_13 1:96f055419f71 37 #define LCD_SET2LINE 0x06
fossum_13 1:96f055419f71 38 #define LCD_SET4LINE 0x05
fossum_13 1:96f055419f71 39 #define LCD_SET16CHAR 0x04
fossum_13 1:96f055419f71 40 #define LCD_SET20CHAR 0x03
fossum_13 1:96f055419f71 41
fossum_13 1:96f055419f71 42 // LCD Types
fossum_13 1:96f055419f71 43 #define LCD_2X16 3
fossum_13 1:96f055419f71 44 #define LCD_2X20 4
fossum_13 1:96f055419f71 45 #define LCD_4X16 5
fossum_13 1:96f055419f71 46 #define LCD_4X20 6
fossum_13 1:96f055419f71 47
Phlaphead 0:df5850d83ee5 48 /**
Phlaphead 0:df5850d83ee5 49 * SparkFun SerLCD v2.5 Controller
fossum_13 1:96f055419f71 50 *
fossum_13 1:96f055419f71 51 * Copied from the Arduino.cc SerLCD library.
fossum_13 1:96f055419f71 52 * @see http://playground.arduino.cc/Code/SerLCD
Phlaphead 0:df5850d83ee5 53 */
Phlaphead 0:df5850d83ee5 54 class SerialLCD : public Serial
Phlaphead 0:df5850d83ee5 55 {
Phlaphead 0:df5850d83ee5 56 public:
fossum_13 1:96f055419f71 57 /** Constructor.
Phlaphead 0:df5850d83ee5 58 * @param tx Connected to rx pin of LCD
fossum_13 1:96f055419f71 59 * @param type Type of LCD (Optional default 16x2)
Phlaphead 0:df5850d83ee5 60 */
fossum_13 1:96f055419f71 61 SerialLCD(PinName tx, uint8_t type = 3);
Phlaphead 0:df5850d83ee5 62
fossum_13 1:96f055419f71 63 /** Blinks the cursor. This blinks the whole
fossum_13 1:96f055419f71 64 * box or just the cursor bar.
fossum_13 1:96f055419f71 65 */
fossum_13 1:96f055419f71 66 void blink();
fossum_13 1:96f055419f71 67
fossum_13 1:96f055419f71 68 /** Clears the whole LCD and sets the
fossum_13 1:96f055419f71 69 * cursor to the first row, first column.
Phlaphead 0:df5850d83ee5 70 */
Phlaphead 0:df5850d83ee5 71 void clear();
fossum_13 1:96f055419f71 72 /** Clears the current line and resets
fossum_13 1:96f055419f71 73 * the cursor to the beginning of the
fossum_13 1:96f055419f71 74 * line.
Phlaphead 0:df5850d83ee5 75 */
fossum_13 1:96f055419f71 76 void clearLine(uint8_t);
fossum_13 1:96f055419f71 77 /** Creates a custom character for the
fossum_13 1:96f055419f71 78 * LCD.
fossum_13 1:96f055419f71 79 * @param location Location to store the char (1-8)
fossum_13 1:96f055419f71 80 * @param data Byte array containing the enabled pixel bits
fossum_13 1:96f055419f71 81 * @code
fossum_13 1:96f055419f71 82 * #include <NewSoftSerial.h>
fossum_13 1:96f055419f71 83 * #include <serLCD.h>
fossum_13 1:96f055419f71 84 *
fossum_13 1:96f055419f71 85 * // Set pin to the LCD's rxPin
fossum_13 1:96f055419f71 86 * int pin = 2;
fossum_13 1:96f055419f71 87 *
fossum_13 1:96f055419f71 88 * serLCD lcd(pin);
fossum_13 1:96f055419f71 89 *
fossum_13 1:96f055419f71 90 * byte bars[8][8] = {
fossum_13 1:96f055419f71 91 * {B00000,B00000,B00000,B00000,B00000,B00000,B00000,B11111},
fossum_13 1:96f055419f71 92 * {B00000,B00000,B00000,B00000,B00000,B00000,B11111,B11111},
fossum_13 1:96f055419f71 93 * {B00000,B00000,B00000,B00000,B00000,B11111,B11111,B11111},
fossum_13 1:96f055419f71 94 * {B00000,B00000,B00000,B00000,B11111,B11111,B11111,B11111},
fossum_13 1:96f055419f71 95 * {B00000,B00000,B00000,B11111,B11111,B11111,B11111,B11111},
fossum_13 1:96f055419f71 96 * {B00000,B00000,B11111,B11111,B11111,B11111,B11111,B11111},
fossum_13 1:96f055419f71 97 * {B00000,B11111,B11111,B11111,B11111,B11111,B11111,B11111},
fossum_13 1:96f055419f71 98 * {B11111,B11111,B11111,B11111,B11111,B11111,B11111,B11111}
fossum_13 1:96f055419f71 99 * };
fossum_13 1:96f055419f71 100 *
fossum_13 1:96f055419f71 101 * void main() {
fossum_13 1:96f055419f71 102 * for (int i=1; i < 9; i++){
fossum_13 1:96f055419f71 103 * lcd.createChar(i, bars[i-1]);
fossum_13 1:96f055419f71 104 * }
fossum_13 1:96f055419f71 105 * for (int i=1; i < 9; i++){
fossum_13 1:96f055419f71 106 * lcd.printCustomChar(i);
fossum_13 1:96f055419f71 107 * }
fossum_13 1:96f055419f71 108 * while(1);
fossum_13 1:96f055419f71 109 * }
fossum_13 1:96f055419f71 110 *
fossum_13 1:96f055419f71 111 * @endcode
Phlaphead 0:df5850d83ee5 112 */
fossum_13 1:96f055419f71 113 void createChar(uint8_t, uint8_t[]);
fossum_13 1:96f055419f71 114 /** Display the LCD cursor: an underscore (line) at the
fossum_13 1:96f055419f71 115 * position to which the next character will be written.
fossum_13 1:96f055419f71 116 * This does not define if it blinks or not.
fossum_13 1:96f055419f71 117 */
fossum_13 1:96f055419f71 118 void cursor();
fossum_13 1:96f055419f71 119 /** Turns on the LCD display, after it's been turned off
fossum_13 1:96f055419f71 120 * with noDisplay(). This will restore the text (and
fossum_13 1:96f055419f71 121 * cursor) that was on the display.
fossum_13 1:96f055419f71 122 */
fossum_13 1:96f055419f71 123 void display();
fossum_13 1:96f055419f71 124 /** Positions the cursor in the upper-left of the LCD.
fossum_13 1:96f055419f71 125 */
fossum_13 1:96f055419f71 126 void home();
fossum_13 1:96f055419f71 127 /** Set the direction for text written to the LCD to
fossum_13 1:96f055419f71 128 * left-to-right, the default. This means that subsequent
fossum_13 1:96f055419f71 129 * characters written to the display will go from left to
fossum_13 1:96f055419f71 130 * right, but does not affect previously-output text.
fossum_13 1:96f055419f71 131 */
fossum_13 1:96f055419f71 132 void leftToRight();
fossum_13 1:96f055419f71 133 /** Turns off the blinking LCD cursor.
Phlaphead 0:df5850d83ee5 134 */
fossum_13 1:96f055419f71 135 void noBlink();
fossum_13 1:96f055419f71 136 /** Hides the LCD cursor.
fossum_13 1:96f055419f71 137 */
fossum_13 1:96f055419f71 138 void noCursor();
fossum_13 1:96f055419f71 139 /** Turns off the LCD display, without losing the text
fossum_13 1:96f055419f71 140 * currently shown on it.
fossum_13 1:96f055419f71 141 */
fossum_13 1:96f055419f71 142 void noDisplay();
fossum_13 1:96f055419f71 143 /** Print a custom character (gylph) on to the LCD. Up
fossum_13 1:96f055419f71 144 * to eight characters of 5x8 pixels are supported
fossum_13 1:96f055419f71 145 * (numbered 1 to 8). The custom characters are designed
fossum_13 1:96f055419f71 146 * by the createChar() command.
fossum_13 1:96f055419f71 147 * @param location Which character to print (1 to 8), created by createChar()
fossum_13 1:96f055419f71 148 */
fossum_13 1:96f055419f71 149 void printCustomChar(uint8_t);
fossum_13 1:96f055419f71 150 /** Set the direction for text written to the LCD to
fossum_13 1:96f055419f71 151 * right-to-left (the default is left-to-right). This
fossum_13 1:96f055419f71 152 * means that subsequent characters written to the
fossum_13 1:96f055419f71 153 * display will go from right to left, but does not
fossum_13 1:96f055419f71 154 * affect previously-output text.
fossum_13 1:96f055419f71 155 */
fossum_13 1:96f055419f71 156 void rightToLeft();
fossum_13 1:96f055419f71 157 /** Scrolls the text on the LCD one position to the left.
Phlaphead 0:df5850d83ee5 158 */
Phlaphead 0:df5850d83ee5 159 void scrollLeft();
fossum_13 1:96f055419f71 160 /** Scrolls the text on the LCD one position to the right.
Phlaphead 0:df5850d83ee5 161 */
Phlaphead 0:df5850d83ee5 162 void scrollRight();
fossum_13 1:96f055419f71 163 /** Moves the cursor to the beginning of selected line.
fossum_13 1:96f055419f71 164 * Line numbers start with 1. Valid line numbers are 1-4.
fossum_13 1:96f055419f71 165 * @param line Line number to go to
fossum_13 1:96f055419f71 166 */
fossum_13 1:96f055419f71 167 void selectLine(uint8_t line);
fossum_13 1:96f055419f71 168 /** Sets the backlight brightness based on input value.
fossum_13 1:96f055419f71 169 * Values range from 1-30.
fossum_13 1:96f055419f71 170 * @params brightness 1 = Off -> 30 = Full Brightness
fossum_13 1:96f055419f71 171 */
fossum_13 1:96f055419f71 172 void setBrightness(uint8_t num);
fossum_13 1:96f055419f71 173 /** Position the LCD cursor.
fossum_13 1:96f055419f71 174 * @param row Row position of the cursor (1 being the first row)
fossum_13 1:96f055419f71 175 * @param col Column position the cursor (1 being the first column)
fossum_13 1:96f055419f71 176 */
fossum_13 1:96f055419f71 177 void setCursor(uint8_t row, uint8_t col);
fossum_13 1:96f055419f71 178 /** Saves the first 2 lines of text that are currently
fossum_13 1:96f055419f71 179 * printed on the LCD screen to memory as the new splash screen.
fossum_13 1:96f055419f71 180 * @code
fossum_13 1:96f055419f71 181 * void setup()
fossum_13 1:96f055419f71 182 * {
fossum_13 1:96f055419f71 183 * lcd.print(" New ");
fossum_13 1:96f055419f71 184 * lcd.print(" Splash Screen! ");
fossum_13 1:96f055419f71 185 * lcd.setSplash();
fossum_13 1:96f055419f71 186 * }
fossum_13 1:96f055419f71 187 * @endcode
fossum_13 1:96f055419f71 188 */
fossum_13 1:96f055419f71 189 void setSplash();
fossum_13 1:96f055419f71 190 /** The SerLCD firmware v2.5 supports setting different types
fossum_13 1:96f055419f71 191 * of LCD's. This function allows to easily set the type of LCD.
fossum_13 1:96f055419f71 192 *
fossum_13 1:96f055419f71 193 * The function expects a parameter value of 3 - 6:
fossum_13 1:96f055419f71 194 * Defines:
fossum_13 1:96f055419f71 195 * LCD_2X16(3) - 2x16 LCD
fossum_13 1:96f055419f71 196 * LCD_2X20(4) - 2x20 LCD
fossum_13 1:96f055419f71 197 * LCD_4X16(5) - 4x16 LCD
fossum_13 1:96f055419f71 198 * LCD_4X20(6) - 4x20 LCD
fossum_13 1:96f055419f71 199 *
fossum_13 1:96f055419f71 200 * After changing the settings, the value is written to the EEPROM
fossum_13 1:96f055419f71 201 * so the SerialLCD will remember it even after a power-off.
fossum_13 1:96f055419f71 202 */
fossum_13 1:96f055419f71 203 void setType(uint8_t type);
fossum_13 1:96f055419f71 204 /** Toggles the splash screen on/off.
fossum_13 1:96f055419f71 205 */
fossum_13 1:96f055419f71 206 void toggleSplash();
Phlaphead 0:df5850d83ee5 207
fossum_13 1:96f055419f71 208 private:
fossum_13 1:96f055419f71 209 void command(uint8_t);
fossum_13 1:96f055419f71 210 void specialCommand(uint8_t);
fossum_13 1:96f055419f71 211
fossum_13 1:96f055419f71 212 uint8_t _displayfunction;
fossum_13 1:96f055419f71 213 uint8_t _displaycontrol;
fossum_13 1:96f055419f71 214 uint8_t _displaymode;
fossum_13 1:96f055419f71 215 uint8_t _numlines;
fossum_13 1:96f055419f71 216 uint8_t _numchars;
fossum_13 1:96f055419f71 217 uint8_t _rowoffset;
Phlaphead 0:df5850d83ee5 218 };
Phlaphead 0:df5850d83ee5 219
Phlaphead 0:df5850d83ee5 220 #endif