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