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);
    }
Committer:
simon
Date:
Thu May 27 13:44:15 2010 +0000
Revision:
1:ac48b187213c

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
simon 1:ac48b187213c 1 // Write to all HD44780 TextLCD RAM locations, sford
simon 1:ac48b187213c 2 //
simon 1:ac48b187213c 3 // A quick hack to write to all the display RAM locations
simon 1:ac48b187213c 4 // in an HD44780 display, to identify which location maps
simon 1:ac48b187213c 5 // to which character.
simon 1:ac48b187213c 6 //
simon 1:ac48b187213c 7 // Instructions:
simon 1:ac48b187213c 8 // - Change TextLCD pinout as appropriate so it works
simon 1:ac48b187213c 9 // - Run, and it should fill the screen with characters
simon 1:ac48b187213c 10 // - Identify what characters are at the start of each row
simon 1:ac48b187213c 11 //
simon 1:ac48b187213c 12 // To determine what address each line starts at, you subtract the
simon 1:ac48b187213c 13 // ascii code for '0'(48) from the character at the start of each line
simon 1:ac48b187213c 14 // - see http://www.asciitable.com/
simon 1:ac48b187213c 15 //
simon 1:ac48b187213c 16 // e.g.
simon 1:ac48b187213c 17 // +----------------+
simon 1:ac48b187213c 18 // |0123456789:;<=>?| first char = '0' (48)
simon 1:ac48b187213c 19 // |XYZ.... | first char = 'X' (88)
simon 1:ac48b187213c 20 // +----------------+
simon 1:ac48b187213c 21 //
simon 1:ac48b187213c 22 // So in this case, the RAM offsets are 0 and 40
simon 1:ac48b187213c 23
simon 1:ac48b187213c 24 #include "mbed.h"
simon 1:ac48b187213c 25 #include "TextLCD.h"
simon 1:ac48b187213c 26 DigitalOut zero(p11);
simon 1:ac48b187213c 27 TextLCD lcd(p10, p12, p15, p16, p29, p30, TextLCD::LCD16x2B);
simon 1:ac48b187213c 28
simon 1:ac48b187213c 29 int main() {
simon 1:ac48b187213c 30 lcd.printf("hithere");
simon 1:ac48b187213c 31 wait(1);
simon 1:ac48b187213c 32 lcd.putc('i');
simon 1:ac48b187213c 33 wait(1);
simon 1:ac48b187213c 34 lcd.cls();
simon 1:ac48b187213c 35 wait(1);
simon 1:ac48b187213c 36 lcd.locate(4, 1);
simon 1:ac48b187213c 37 wait(1);
simon 1:ac48b187213c 38 lcd.printf("jdlkjfksj");
simon 1:ac48b187213c 39 for(int i=0; i<30; i++) {
simon 1:ac48b187213c 40 lcd.putc('A' + i);
simon 1:ac48b187213c 41 wait(0.3);
simon 1:ac48b187213c 42 }
simon 1:ac48b187213c 43 }