TextLCD library for controlling various LCD panels based on the HD44780 4-bit interface. Includes support for custom character bitmaps.

Dependents:   HD44780-LCD_with_Bluetooth

Fork of TextLCD by Simon Ford

Examples

Hello world in custom font

#include "mbed.h"
#include "TextLCD.h"

int main() {
    lcd=new TextLCD(D8, D9, D4, D5, D6, D7);


    char c_H[]={0x1b,0x1b,0x1b,0x1f,0x1b,0x1b,0x1b,0x1b};
    char c_e[]={0x0,0x0,0xe,0x1b,0x1f,0x18,0x18,0xf};
    char c_l[]={0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6};
    char c_o[]={0x0,0x0,0xe,0x1b,0x1b,0x1b,0x1b,0xe};
    char c_W[]={0x1b,0x1b,0x1b,0x1b,0x1f,0x1f,0x1f,0x1b};
    char c_r[]={0x0,0x0,0xe,0x1b,0x18,0x18,0x18,0x18};
    char c_d[]={0x3,0x3,0xf,0x1b,0x1b,0x1b,0x1b,0xf};

    lcd->defineChar(1, c_H);
    lcd->putc(1);
    lcd->defineChar(2, c_e);
    lcd->putc(2);
    lcd->defineChar(3, c_l);
    lcd->putc(3);
    lcd->putc(3);
    lcd->defineChar(4, c_o);
    lcd->putc(4);
    lcd->putc(32);
    lcd->defineChar(5, c_W);
    lcd->putc(5);
    lcd->putc(4);
    lcd->defineChar(6, c_r);
    lcd->putc(6);
    lcd->putc(3);
    lcd->defineChar(7, c_d);
    lcd->putc(7);

    while (1) {
    }
}

Animated busy indicator

This animation only uses 1 of the 8 custom character slots, and can be used like a regular character in the output and will automatically animate in-place. Any number of the animated characters can be displayed on the display at once using this animation technique.

#include "mbed.h"
#include "TextLCD.h"

int main() {
    lcd=new TextLCD(D8, D9, D4, D5, D6, D7);

    //The 7 animation characters
    char spin[]={   0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x0,
                    0x2,0x2,0x2,0x4,0x8,0x8,0x8,0x0,
                    0x1,0x2,0x2,0x4,0x8,0x8,0x10,0x0,
                    0x0,0x0,0x3,0x4,0x18,0x0,0x0,0x0,
                    0x0,0x0,0x0,0x1f,0x0,0x0,0x0,0x0,
                    0x0,0x0,0x18,0x4,0x3,0x0,0x0,0x0,
                    0x10,0x8,0x8,0x4,0x2,0x2,0x01,0x0
                };

    //Output text.
    lcd->printf("\1 Please  wait \1");
    
    //Animation loop
    int frame=0;
    while (1) {
        lcd->defineChar(1, spin+frame*8);
        frame=(frame+1)%(sizeof(spin)/8);
        wait(.14);
    }

Files at this revision

API Documentation at this revision

Comitter:
daneast
Date:
Tue Nov 04 03:06:01 2014 +0000
Parent:
8:308d188a2d3a
Commit message:
Add routine to define custom character bitmaps.

Changed in this revision

TextLCD.cpp Show annotated file Show diff for this revision Revisions of this file
TextLCD.h Show annotated file Show diff for this revision Revisions of this file
--- a/TextLCD.cpp	Thu Jan 02 21:07:01 2014 +0000
+++ b/TextLCD.cpp	Tue Nov 04 03:06:01 2014 +0000
@@ -64,6 +64,14 @@
     _row = row;
 }
 
+void TextLCD::defineChar(int index, char *data) {
+    if (index<0||index>7)
+        return;
+    writeCommand(0x40+index*8);
+    for (int i=0; i<8; i++)
+        writeData(*data++);
+}
+
 int TextLCD::_putc(int value) {
     if (value == '\n') {
         _column = 0;
--- a/TextLCD.h	Thu Jan 02 21:07:01 2014 +0000
+++ b/TextLCD.h	Tue Nov 04 03:06:01 2014 +0000
@@ -80,10 +80,17 @@
      * @param column  The horizontal position from the left, indexed from 0
      * @param row     The vertical position from the top, indexed from 0
      */
-    void locate(int column, int row);
+    void locate(int column, int row);    
 
     /** Clear the screen and locate to 0,0 */
     void cls();
+    
+    /** Defines a custom character bitmap
+     *
+     * @param index The index of the custom character slot (0-7)
+     * @param data  Array of 8 bytes defining the custom character.
+     */
+    void defineChar(int index, char *data);
 
     int rows();
     int columns();