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@1:96f055419f71, 2013-05-22 (annotated)
- 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?
| User | Revision | Line number | New 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 |
