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

Revision:
37:ce348c002929
Parent:
36:9f5f86dfd44a
Child:
38:cbe275b0b647
--- a/TextLCD_Config.h	Tue Nov 25 19:21:18 2014 +0000
+++ b/TextLCD_Config.h	Sun Mar 29 13:08:03 2015 +0000
@@ -1,8 +1,10 @@
-/* mbed TextLCD Library, for a 4-bit LCD based on HD44780
+/* mbed TextLCD Library, for LCDs based on HD44780 controllers
  * Copyright (c) 2014, WH
  *               2014, v01: WH, Extracted from TextLCD.h as of v14
  *               2014, v02: WH, Added AC780 support, added I2C expander modules, fixed setBacklight() for inverted logic modules. Fixed bug in LCD_SPI_N define
  *               2014, v03: WH, Added LCD_SPI_N_3_8 define for ST7070
+ *               2015, v04: WH, Added support for alternative fonttables (eg PCF21XX)
+ *               2015, v05: WH, Clean up low-level _writeCommand() and _writeData(), Added support for alt fonttables (eg PCF21XX), Added ST7066_ACM for ACM1602 module, fixed contrast for ST7032 
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to deal
@@ -40,10 +42,14 @@
 #define LCD_UDC        1           /* Enable predefined UDC example*/                
 #define LCD_PRINTF     1           /* Enable Stream implementation */                
 
+//Select option to activate default fonttable or alternatively use conversion for specific controller versions (eg PCF2119C)
+#define LCD_DEFAULT_FONT 1      
+
 //Pin Defines for I2C PCF8574/PCF8574A or MCP23008 and SPI 74595 bus expander interfaces
-//LCD and serial portexpanders should be wired accordingly 
+//Different commercially available LCD portexpanders use different wiring conventions.
+//LCD and serial portexpanders should be wired according to the tables below.
 //
-//Select Hardware module (one option only)
+//Select Serial Port Expander Hardware module (one option only)
 #define DEFAULT        1
 #define ADAFRUIT       0
 #define DFROBOT        0
@@ -51,7 +57,6 @@
 #define GYLCD          0
 #define SYDZ           0
 
-//Select Hardware module (one option only)
 #if (DEFAULT==1)
 //Definitions for default (WH) mapping between serial port expander pins and LCD controller
 //This hardware supports the I2C bus expander (PCF8574/PCF8574A or MCP23008) and SPI bus expander (74595) interfaces
@@ -226,6 +231,7 @@
 #endif
 
 //Bitpattern Defines for I2C PCF8574/PCF8574A, MCP23008 and SPI 74595 Bus expanders
+//Don't change!
 //
 #define D_LCD_D4       (1<<D_LCD_PIN_D4)
 #define D_LCD_D5       (1<<D_LCD_PIN_D5)
@@ -291,6 +297,9 @@
 #define ST7036_SA2     0x7C
 #define ST7036_SA3     0x7E
 
+/* ST7066_ACM I2C slave address, Added for ACM1602 module  */
+#define ST7066_SA0     0xA0
+
 /* PCF21XX I2C slave address */
 #define PCF21XX_SA0    0x74
 #define PCF21XX_SA1    0x76
@@ -324,7 +333,7 @@
 //ST7032 EastRising ERC1602FS-4 display
 //Contrast setting 6 significant bits
 //Voltage Multiplier setting 3 significant bits
-#define LCD_ST7032_CONTRAST 0x18
+#define LCD_ST7032_CONTRAST 0x28 
 #define LCD_ST7032_RAB      0x04
 
 //ST7036 EA DOGM1603 display