Updated for more display types. Fixed memoryaddress confusion in address() method. Added new getAddress() method. Added support for UDCs, Backlight control and other features such as control through I2C and SPI port expanders and controllers with native I2C and SPI interfaces. Refactored to fix issue with pins that are default declared as NC.

Dependents:   GPSDevice TestTextLCD SD to Flash Data Transfer DrumMachine ... more

Fork of TextLCD by Simon Ford

Example

Hello World! for the TextLCD

#include "mbed.h"
#include "TextLCD.h"
 
// Host PC Communication channels
Serial pc(USBTX, USBRX); // tx, rx
 
// I2C Communication
I2C i2c_lcd(p28,p27); // SDA, SCL
 
// SPI Communication
SPI spi_lcd(p5, NC, p7); // MOSI, MISO, SCLK

//TextLCD lcd(p15, p16, p17, p18, p19, p20);                // RS, E, D4-D7, LCDType=LCD16x2, BL=NC, E2=NC, LCDTCtrl=HD44780
//TextLCD_SPI lcd(&spi_lcd, p8, TextLCD::LCD40x4);   // SPI bus, 74595 expander, CS pin, LCD Type  
TextLCD_I2C lcd(&i2c_lcd, 0x42, TextLCD::LCD20x4);  // I2C bus, PCF8574 Slaveaddress, LCD Type
//TextLCD_I2C lcd(&i2c_lcd, 0x42, TextLCD::LCD16x2, TextLCD::WS0010); // I2C bus, PCF8574 Slaveaddress, LCD Type, Device Type
//TextLCD_SPI_N lcd(&spi_lcd, p8, p9);               // SPI bus, CS pin, RS pin, LCDType=LCD16x2, BL=NC, LCDTCtrl=ST7032_3V3   
//TextLCD_I2C_N lcd(&i2c_lcd, ST7032_SA, TextLCD::LCD16x2, NC, TextLCD::ST7032_3V3); // I2C bus, Slaveaddress, LCD Type, BL=NC, LCDTCtrl=ST7032_3V3  

int main() {
    pc.printf("LCD Test. Columns=%d, Rows=%d\n\r", lcd.columns(), lcd.rows());
    
    for (int row=0; row<lcd.rows(); row++) {
      int col=0;
      
      pc.printf("MemAddr(Col=%d, Row=%d)=0x%02X\n\r", col, row, lcd.getAddress(col, row));      
//      lcd.putc('-');
      lcd.putc('0' + row);      
      
      for (col=1; col<lcd.columns()-1; col++) {    
        lcd.putc('*');
      }
 
      pc.printf("MemAddr(Col=%d, Row=%d)=0x%02X\n\r", col, row, lcd.getAddress(col, row));      
      lcd.putc('+');
        
    }    
    
// Show cursor as blinking character
    lcd.setCursor(TextLCD::CurOff_BlkOn);
 
// Set and show user defined characters. A maximum of 8 UDCs are supported by the HD44780.
// They are defined by a 5x7 bitpattern. 
    lcd.setUDC(0, (char *) udc_0);  // Show |>
    lcd.putc(0);    
    lcd.setUDC(1, (char *) udc_1);  // Show <|
    lcd.putc(1);    

}

Handbook page

More info is here

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 }