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.cpp
- Committer:
- fossum_13
- Date:
- 2013-05-22
- Revision:
- 1:96f055419f71
- Parent:
- 0:df5850d83ee5
File content as of revision 1:96f055419f71:
#include "SerialLCD.h" SerialLCD::SerialLCD(PinName tx, uint8_t type) : Serial(tx, NC) { // Init baud(LCD_BAUD); setType(type); _rowoffset = 0; // Reset clear(); setBrightness(30); } void SerialLCD::clear() { command(LCD_CLEARDISPLAY); } void SerialLCD::clearLine(uint8_t line) { if(line > 0 && line <= _numlines){ setCursor(line, 1); printf(" "); setCursor(line, 1); } } void SerialLCD::selectLine(uint8_t line) { if(line > 0 && line <= _numlines){ setCursor(line, 1); } } void SerialLCD::setBrightness(uint8_t num) { if(num >= 1 && num <= 30){ specialCommand(LCD_BACKLIGHT | (num - 1)); } } void SerialLCD::home() { command(LCD_RETURNHOME); } void SerialLCD::setSplash() { specialCommand(LCD_SETSPLASHSCREEN); } void SerialLCD::setType(uint8_t type) { /* 3: type 2x16 4: type 2x20 5: type 4x16 6: type 4x20 */ specialCommand(type); switch (type) { case 3: _numlines = LCD_2LINE; _numchars = LCD_16CHAR; break; case 4: _numlines = LCD_2LINE; _numchars = LCD_20CHAR; break; case 5: _numlines = LCD_4LINE; _numchars = LCD_16CHAR; break; case 6: _numlines = LCD_4LINE; _numchars = LCD_20CHAR; break; default: _numlines = LCD_2LINE; _numchars = LCD_16CHAR; } } void SerialLCD::toggleSplash() { specialCommand(LCD_SPLASHTOGGLE); } void SerialLCD::leftToRight() { _displaymode |= LCD_ENTRYLEFT; command(LCD_ENTRYMODESET | _displaymode); } void SerialLCD::rightToLeft() { _displaymode &= ~LCD_ENTRYLEFT; command(LCD_ENTRYMODESET | _displaymode); } void SerialLCD::blink() { _displaycontrol |= LCD_BLINKON; command(LCD_DISPLAYCONTROL | _displaycontrol); } void SerialLCD::noBlink() { _displaycontrol &= ~LCD_BLINKON; command(LCD_DISPLAYCONTROL | _displaycontrol); } void SerialLCD::cursor() { _displaycontrol |= LCD_CURSORON; command(LCD_DISPLAYCONTROL | _displaycontrol); } void SerialLCD::noCursor() { _displaycontrol &= ~LCD_CURSORON; command(LCD_DISPLAYCONTROL | _displaycontrol); } void SerialLCD::display() { _displaycontrol |= LCD_DISPLAYON; command(LCD_DISPLAYCONTROL | _displaycontrol); } void SerialLCD::noDisplay() { _displaycontrol &= ~LCD_DISPLAYON; command(LCD_DISPLAYCONTROL | _displaycontrol); } void SerialLCD::setCursor(uint8_t row, uint8_t col) { int row_offsets[2][4] = { { 0x00, 0x40, 0x10, 0x50 }, { 0x00, 0x40, 0x14, 0x54 } }; if((row > 0 && row < 3) && (col > 0 && col < 17)){ command(LCD_SETDDRAMADDR | ((col - 1) + row_offsets[_rowoffset][(row - 1)])); } } void SerialLCD::createChar(uint8_t location, uint8_t charmap[]) { location -= 1; location &= 0x07; for (int i=0; i<8; i++){ command(LCD_SETCGRAMADDR | (location << 3) | i); putc(charmap[i]); } } void SerialLCD::printCustomChar(uint8_t num) { putc((num - 1)); } void SerialLCD::scrollLeft() { command(0x18); } void SerialLCD::scrollRight() { command(0x1C); } // Private Functions void SerialLCD::command(uint8_t value) { putc(0xFE); putc(value); wait_ms(5); } void SerialLCD::specialCommand(uint8_t value) { putc(0x7C); putc(value); wait_ms(5); }