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);
}
}
SerialLCD.h
- Committer:
- fossum_13
- Date:
- 2013-05-22
- Revision:
- 1:96f055419f71
- Parent:
- 0:df5850d83ee5
File content as of revision 1:96f055419f71:
#ifndef SerialLCD_h
#define SerialLCD_h
#include "mbed.h"
#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.
* @param tx Connected to rx pin of LCD
* @param type Type of LCD (Optional default 16x2)
*/
SerialLCD(PinName tx, uint8_t type = 3);
/** 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();
/** Clears the current line and resets
* the cursor to the beginning of the
* line.
*/
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 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 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();
/** 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
