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 #include "SerialLCD.h"
Phlaphead 0:df5850d83ee5 2
fossum_13 1:96f055419f71 3 SerialLCD::SerialLCD(PinName tx, uint8_t type) :
fossum_13 1:96f055419f71 4 Serial(tx, NC)
Phlaphead 0:df5850d83ee5 5 {
fossum_13 1:96f055419f71 6 // Init
Phlaphead 0:df5850d83ee5 7 baud(LCD_BAUD);
fossum_13 1:96f055419f71 8 setType(type);
fossum_13 1:96f055419f71 9
fossum_13 1:96f055419f71 10 _rowoffset = 0;
fossum_13 1:96f055419f71 11
fossum_13 1:96f055419f71 12 // Reset
fossum_13 1:96f055419f71 13 clear();
fossum_13 1:96f055419f71 14 setBrightness(30);
Phlaphead 0:df5850d83ee5 15 }
Phlaphead 0:df5850d83ee5 16
Phlaphead 0:df5850d83ee5 17 void SerialLCD::clear()
Phlaphead 0:df5850d83ee5 18 {
fossum_13 1:96f055419f71 19 command(LCD_CLEARDISPLAY);
fossum_13 1:96f055419f71 20 }
fossum_13 1:96f055419f71 21
fossum_13 1:96f055419f71 22 void SerialLCD::clearLine(uint8_t line)
fossum_13 1:96f055419f71 23 {
fossum_13 1:96f055419f71 24 if(line > 0 && line <= _numlines){
fossum_13 1:96f055419f71 25 setCursor(line, 1);
fossum_13 1:96f055419f71 26 printf(" ");
fossum_13 1:96f055419f71 27 setCursor(line, 1);
fossum_13 1:96f055419f71 28 }
fossum_13 1:96f055419f71 29 }
fossum_13 1:96f055419f71 30
fossum_13 1:96f055419f71 31 void SerialLCD::selectLine(uint8_t line)
fossum_13 1:96f055419f71 32 {
fossum_13 1:96f055419f71 33 if(line > 0 && line <= _numlines){
fossum_13 1:96f055419f71 34 setCursor(line, 1);
fossum_13 1:96f055419f71 35 }
fossum_13 1:96f055419f71 36 }
fossum_13 1:96f055419f71 37
fossum_13 1:96f055419f71 38 void SerialLCD::setBrightness(uint8_t num)
fossum_13 1:96f055419f71 39 {
fossum_13 1:96f055419f71 40 if(num >= 1 && num <= 30){
fossum_13 1:96f055419f71 41 specialCommand(LCD_BACKLIGHT | (num - 1));
fossum_13 1:96f055419f71 42 }
fossum_13 1:96f055419f71 43 }
fossum_13 1:96f055419f71 44
fossum_13 1:96f055419f71 45 void SerialLCD::home()
fossum_13 1:96f055419f71 46 {
fossum_13 1:96f055419f71 47 command(LCD_RETURNHOME);
fossum_13 1:96f055419f71 48 }
fossum_13 1:96f055419f71 49
fossum_13 1:96f055419f71 50 void SerialLCD::setSplash()
fossum_13 1:96f055419f71 51 {
fossum_13 1:96f055419f71 52 specialCommand(LCD_SETSPLASHSCREEN);
Phlaphead 0:df5850d83ee5 53 }
Phlaphead 0:df5850d83ee5 54
fossum_13 1:96f055419f71 55 void SerialLCD::setType(uint8_t type)
Phlaphead 0:df5850d83ee5 56 {
fossum_13 1:96f055419f71 57 /*
fossum_13 1:96f055419f71 58 3: type 2x16
fossum_13 1:96f055419f71 59 4: type 2x20
fossum_13 1:96f055419f71 60 5: type 4x16
fossum_13 1:96f055419f71 61 6: type 4x20
fossum_13 1:96f055419f71 62 */
fossum_13 1:96f055419f71 63 specialCommand(type);
fossum_13 1:96f055419f71 64 switch (type) {
fossum_13 1:96f055419f71 65 case 3:
fossum_13 1:96f055419f71 66 _numlines = LCD_2LINE;
fossum_13 1:96f055419f71 67 _numchars = LCD_16CHAR;
fossum_13 1:96f055419f71 68
fossum_13 1:96f055419f71 69 break;
fossum_13 1:96f055419f71 70 case 4:
fossum_13 1:96f055419f71 71 _numlines = LCD_2LINE;
fossum_13 1:96f055419f71 72 _numchars = LCD_20CHAR;
fossum_13 1:96f055419f71 73
fossum_13 1:96f055419f71 74 break;
fossum_13 1:96f055419f71 75 case 5:
fossum_13 1:96f055419f71 76 _numlines = LCD_4LINE;
fossum_13 1:96f055419f71 77 _numchars = LCD_16CHAR;
fossum_13 1:96f055419f71 78
fossum_13 1:96f055419f71 79 break;
fossum_13 1:96f055419f71 80 case 6:
fossum_13 1:96f055419f71 81 _numlines = LCD_4LINE;
fossum_13 1:96f055419f71 82 _numchars = LCD_20CHAR;
fossum_13 1:96f055419f71 83
fossum_13 1:96f055419f71 84 break;
fossum_13 1:96f055419f71 85
fossum_13 1:96f055419f71 86 default:
fossum_13 1:96f055419f71 87 _numlines = LCD_2LINE;
fossum_13 1:96f055419f71 88 _numchars = LCD_16CHAR;
fossum_13 1:96f055419f71 89 }
Phlaphead 0:df5850d83ee5 90 }
Phlaphead 0:df5850d83ee5 91
fossum_13 1:96f055419f71 92 void SerialLCD::toggleSplash()
fossum_13 1:96f055419f71 93 {
fossum_13 1:96f055419f71 94 specialCommand(LCD_SPLASHTOGGLE);
fossum_13 1:96f055419f71 95 }
fossum_13 1:96f055419f71 96
fossum_13 1:96f055419f71 97 void SerialLCD::leftToRight()
fossum_13 1:96f055419f71 98 {
fossum_13 1:96f055419f71 99 _displaymode |= LCD_ENTRYLEFT;
fossum_13 1:96f055419f71 100 command(LCD_ENTRYMODESET | _displaymode);
fossum_13 1:96f055419f71 101 }
fossum_13 1:96f055419f71 102
fossum_13 1:96f055419f71 103 void SerialLCD::rightToLeft()
Phlaphead 0:df5850d83ee5 104 {
fossum_13 1:96f055419f71 105 _displaymode &= ~LCD_ENTRYLEFT;
fossum_13 1:96f055419f71 106 command(LCD_ENTRYMODESET | _displaymode);
fossum_13 1:96f055419f71 107 }
fossum_13 1:96f055419f71 108
fossum_13 1:96f055419f71 109 void SerialLCD::blink()
fossum_13 1:96f055419f71 110 {
fossum_13 1:96f055419f71 111 _displaycontrol |= LCD_BLINKON;
fossum_13 1:96f055419f71 112 command(LCD_DISPLAYCONTROL | _displaycontrol);
fossum_13 1:96f055419f71 113 }
fossum_13 1:96f055419f71 114
fossum_13 1:96f055419f71 115 void SerialLCD::noBlink()
fossum_13 1:96f055419f71 116 {
fossum_13 1:96f055419f71 117 _displaycontrol &= ~LCD_BLINKON;
fossum_13 1:96f055419f71 118 command(LCD_DISPLAYCONTROL | _displaycontrol);
fossum_13 1:96f055419f71 119 }
fossum_13 1:96f055419f71 120
fossum_13 1:96f055419f71 121 void SerialLCD::cursor()
fossum_13 1:96f055419f71 122 {
fossum_13 1:96f055419f71 123 _displaycontrol |= LCD_CURSORON;
fossum_13 1:96f055419f71 124 command(LCD_DISPLAYCONTROL | _displaycontrol);
Phlaphead 0:df5850d83ee5 125 }
Phlaphead 0:df5850d83ee5 126
fossum_13 1:96f055419f71 127 void SerialLCD::noCursor()
fossum_13 1:96f055419f71 128 {
fossum_13 1:96f055419f71 129 _displaycontrol &= ~LCD_CURSORON;
fossum_13 1:96f055419f71 130 command(LCD_DISPLAYCONTROL | _displaycontrol);
fossum_13 1:96f055419f71 131 }
fossum_13 1:96f055419f71 132
fossum_13 1:96f055419f71 133 void SerialLCD::display()
fossum_13 1:96f055419f71 134 {
fossum_13 1:96f055419f71 135 _displaycontrol |= LCD_DISPLAYON;
fossum_13 1:96f055419f71 136 command(LCD_DISPLAYCONTROL | _displaycontrol);
fossum_13 1:96f055419f71 137 }
fossum_13 1:96f055419f71 138
fossum_13 1:96f055419f71 139 void SerialLCD::noDisplay()
fossum_13 1:96f055419f71 140 {
fossum_13 1:96f055419f71 141 _displaycontrol &= ~LCD_DISPLAYON;
fossum_13 1:96f055419f71 142 command(LCD_DISPLAYCONTROL | _displaycontrol);
fossum_13 1:96f055419f71 143 }
fossum_13 1:96f055419f71 144
fossum_13 1:96f055419f71 145 void SerialLCD::setCursor(uint8_t row, uint8_t col)
Phlaphead 0:df5850d83ee5 146 {
fossum_13 1:96f055419f71 147 int row_offsets[2][4] = {
fossum_13 1:96f055419f71 148 { 0x00, 0x40, 0x10, 0x50 },
fossum_13 1:96f055419f71 149 { 0x00, 0x40, 0x14, 0x54 }
fossum_13 1:96f055419f71 150 };
fossum_13 1:96f055419f71 151 if((row > 0 && row < 3) && (col > 0 && col < 17)){
fossum_13 1:96f055419f71 152 command(LCD_SETDDRAMADDR | ((col - 1) + row_offsets[_rowoffset][(row - 1)]));
fossum_13 1:96f055419f71 153 }
fossum_13 1:96f055419f71 154 }
fossum_13 1:96f055419f71 155
fossum_13 1:96f055419f71 156 void SerialLCD::createChar(uint8_t location, uint8_t charmap[])
fossum_13 1:96f055419f71 157 {
fossum_13 1:96f055419f71 158 location -= 1;
fossum_13 1:96f055419f71 159 location &= 0x07;
fossum_13 1:96f055419f71 160 for (int i=0; i<8; i++){
fossum_13 1:96f055419f71 161 command(LCD_SETCGRAMADDR | (location << 3) | i);
fossum_13 1:96f055419f71 162 putc(charmap[i]);
fossum_13 1:96f055419f71 163 }
fossum_13 1:96f055419f71 164 }
fossum_13 1:96f055419f71 165
fossum_13 1:96f055419f71 166 void SerialLCD::printCustomChar(uint8_t num)
fossum_13 1:96f055419f71 167 {
fossum_13 1:96f055419f71 168 putc((num - 1));
Phlaphead 0:df5850d83ee5 169 }
Phlaphead 0:df5850d83ee5 170
Phlaphead 0:df5850d83ee5 171 void SerialLCD::scrollLeft()
Phlaphead 0:df5850d83ee5 172 {
fossum_13 1:96f055419f71 173 command(0x18);
Phlaphead 0:df5850d83ee5 174 }
Phlaphead 0:df5850d83ee5 175
Phlaphead 0:df5850d83ee5 176 void SerialLCD::scrollRight()
Phlaphead 0:df5850d83ee5 177 {
fossum_13 1:96f055419f71 178 command(0x1C);
fossum_13 1:96f055419f71 179 }
fossum_13 1:96f055419f71 180
fossum_13 1:96f055419f71 181 // Private Functions
fossum_13 1:96f055419f71 182
fossum_13 1:96f055419f71 183 void SerialLCD::command(uint8_t value)
fossum_13 1:96f055419f71 184 {
Phlaphead 0:df5850d83ee5 185 putc(0xFE);
fossum_13 1:96f055419f71 186 putc(value);
fossum_13 1:96f055419f71 187 wait_ms(5);
Phlaphead 0:df5850d83ee5 188 }
fossum_13 1:96f055419f71 189
fossum_13 1:96f055419f71 190 void SerialLCD::specialCommand(uint8_t value)
fossum_13 1:96f055419f71 191 {
fossum_13 1:96f055419f71 192 putc(0x7C);
fossum_13 1:96f055419f71 193 putc(value);
fossum_13 1:96f055419f71 194 wait_ms(5);
fossum_13 1:96f055419f71 195 }