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:
wim
Date:
Fri Nov 06 18:59:27 2015 +0000
Revision:
41:111ca62e8a59
Parent:
39:e9c2319de9c5
Added setFont() support (for SSD1803, US2066, ST7070) and support for UTF-8 code (Cyrillic language), added SPLC792A controller.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wim 37:ce348c002929 1 /* mbed TextLCD Library, for LCDs based on HD44780 controllers
wim 34:e5a0dcb43ecc 2 * Copyright (c) 2014, WH
wim 34:e5a0dcb43ecc 3 * 2014, v01: WH, Extracted from TextLCD.h as of v14
wim 38:cbe275b0b647 4 * 2015, v02: WH, Added some UDC definitions and commented out several UDCs
wim 41:111ca62e8a59 5 * 2015, v03: WH, Added some UDC definitions
wim 34:e5a0dcb43ecc 6 *
wim 34:e5a0dcb43ecc 7 * Permission is hereby granted, free of charge, to any person obtaining a copy
wim 34:e5a0dcb43ecc 8 * of this software and associated documentation files (the "Software"), to deal
wim 34:e5a0dcb43ecc 9 * in the Software without restriction, including without limitation the rights
wim 34:e5a0dcb43ecc 10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
wim 34:e5a0dcb43ecc 11 * copies of the Software, and to permit persons to whom the Software is
wim 34:e5a0dcb43ecc 12 * furnished to do so, subject to the following conditions:
wim 34:e5a0dcb43ecc 13 *
wim 34:e5a0dcb43ecc 14 * The above copyright notice and this permission notice shall be included in
wim 34:e5a0dcb43ecc 15 * all copies or substantial portions of the Software.
wim 34:e5a0dcb43ecc 16 *
wim 34:e5a0dcb43ecc 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
wim 34:e5a0dcb43ecc 18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
wim 34:e5a0dcb43ecc 19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
wim 34:e5a0dcb43ecc 20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
wim 34:e5a0dcb43ecc 21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
wim 34:e5a0dcb43ecc 22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
wim 34:e5a0dcb43ecc 23 * THE SOFTWARE.
wim 34:e5a0dcb43ecc 24 */
wim 34:e5a0dcb43ecc 25 #ifndef MBED_TEXTLCDUDC_H
wim 34:e5a0dcb43ecc 26 #define MBED_TEXTLCDUDC_H
wim 34:e5a0dcb43ecc 27
wim 34:e5a0dcb43ecc 28 #include "TextLCD_Config.h"
wim 34:e5a0dcb43ecc 29
wim 34:e5a0dcb43ecc 30 /** Some sample User Defined Chars 5x7 dots */
wim 34:e5a0dcb43ecc 31 #if(LCD_UDC == 1)
wim 34:e5a0dcb43ecc 32 //extern const char udc_ae[]; //æ
wim 34:e5a0dcb43ecc 33 //extern const char udc_0e[]; //ø
wim 34:e5a0dcb43ecc 34 //extern const char udc_ao[]; //å
wim 34:e5a0dcb43ecc 35 //extern const char udc_AE[]; //Æ
wim 34:e5a0dcb43ecc 36 //extern const char udc_0E[]; //Ø
wim 34:e5a0dcb43ecc 37 //extern const char udc_Ao[]; //Å
wim 34:e5a0dcb43ecc 38 //extern const char udc_PO[]; //Padlock Open
wim 34:e5a0dcb43ecc 39 //extern const char udc_PC[]; //Padlock Closed
wim 34:e5a0dcb43ecc 40
wim 34:e5a0dcb43ecc 41 //extern const char udc_alpha[]; //alpha
wim 34:e5a0dcb43ecc 42 //extern const char udc_ohm[]; //ohm
wim 34:e5a0dcb43ecc 43 //extern const char udc_sigma[]; //sigma
wim 34:e5a0dcb43ecc 44 //extern const char udc_pi[]; //pi
wim 34:e5a0dcb43ecc 45 //extern const char udc_root[]; //root
wim 34:e5a0dcb43ecc 46
wim 34:e5a0dcb43ecc 47 extern const char udc_0[]; // |>
wim 34:e5a0dcb43ecc 48 extern const char udc_1[]; // <|
wim 34:e5a0dcb43ecc 49 extern const char udc_2[]; // |
wim 34:e5a0dcb43ecc 50 extern const char udc_3[]; // ||
wim 34:e5a0dcb43ecc 51 extern const char udc_4[]; // |||
wim 34:e5a0dcb43ecc 52 extern const char udc_5[]; // =
wim 34:e5a0dcb43ecc 53 extern const char udc_6[]; // checkerboard
wim 34:e5a0dcb43ecc 54 extern const char udc_7[]; // \
wim 34:e5a0dcb43ecc 55
wim 38:cbe275b0b647 56 //extern const char udc_degr[]; // Degree symbol
wim 34:e5a0dcb43ecc 57
wim 38:cbe275b0b647 58 //extern const char udc_TM_T[]; // Trademark T
wim 38:cbe275b0b647 59 //extern const char udc_TM_M[]; // Trademark M
wim 34:e5a0dcb43ecc 60
wim 34:e5a0dcb43ecc 61 //extern const char udc_Bat_Hi[]; // Battery Full
wim 34:e5a0dcb43ecc 62 //extern const char udc_Bat_Ha[]; // Battery Half
wim 34:e5a0dcb43ecc 63 //extern const char udc_Bat_Lo[]; // Battery Low
wim 34:e5a0dcb43ecc 64 extern const char udc_Bat_Hi[]; // Battery Full
wim 34:e5a0dcb43ecc 65 extern const char udc_Bat_Ha[]; // Battery Half
wim 34:e5a0dcb43ecc 66 extern const char udc_Bat_Lo[]; // Battery Low
wim 34:e5a0dcb43ecc 67 extern const char udc_AC[]; // AC Power
wim 34:e5a0dcb43ecc 68
wim 34:e5a0dcb43ecc 69 extern const char udc_smiley[]; // Smiley
wim 41:111ca62e8a59 70 //extern const char udc_droopy[]; // Droopey
wim 41:111ca62e8a59 71 //extern const char udc_note[]; // Note
wim 41:111ca62e8a59 72 //extern const char udc_note_off[]; // Note Off
wim 34:e5a0dcb43ecc 73
wim 34:e5a0dcb43ecc 74 //extern const char udc_bar_1[]; // Bar 1
wim 34:e5a0dcb43ecc 75 //extern const char udc_bar_2[]; // Bar 11
wim 34:e5a0dcb43ecc 76 //extern const char udc_bar_3[]; // Bar 111
wim 34:e5a0dcb43ecc 77 //extern const char udc_bar_4[]; // Bar 1111
wim 34:e5a0dcb43ecc 78 //extern const char udc_bar_5[]; // Bar 11111
wim 34:e5a0dcb43ecc 79
wim 34:e5a0dcb43ecc 80 //extern const char udc_ch_1[]; // Hor bars 4
wim 34:e5a0dcb43ecc 81 //extern const char udc_ch_2[]; // Hor bars 4 (inverted)
wim 34:e5a0dcb43ecc 82 //extern const char udc_ch_3[]; // Ver bars 3
wim 34:e5a0dcb43ecc 83 //extern const char udc_ch_4[]; // Ver bars 3 (inverted)
wim 34:e5a0dcb43ecc 84 //extern const char udc_ch_yr[]; // Year (kana)
wim 34:e5a0dcb43ecc 85 //extern const char udc_ch_mo[]; // Month (kana)
wim 34:e5a0dcb43ecc 86 //extern const char udc_ch_dy[]; // Day (kana)
wim 34:e5a0dcb43ecc 87 //extern const char udc_ch_mi[]; // minute (kana)
wim 38:cbe275b0b647 88
wim 38:cbe275b0b647 89 //extern const char udc_bell[];
wim 38:cbe275b0b647 90 //extern const char udc_note[];
wim 38:cbe275b0b647 91 //extern const char udc_clock[];
wim 38:cbe275b0b647 92 //extern const char udc_heart[];
wim 38:cbe275b0b647 93 //extern const char udc_duck[];
wim 38:cbe275b0b647 94 //extern const char udc_check[];
wim 38:cbe275b0b647 95 //extern const char udc_cross[];
wim 38:cbe275b0b647 96 //extern const char udc_retarrow[];
wim 39:e9c2319de9c5 97 //extern const char udc_OK[]; // Ok
wim 39:e9c2319de9c5 98 //extern const char udc_1_2[]; // 1/2
wim 39:e9c2319de9c5 99 //extern const char udc_Euro[]; // Euro symbol
wim 41:111ca62e8a59 100 //extern const char udc_key[]; // Key symbol
wim 38:cbe275b0b647 101
wim 38:cbe275b0b647 102 //extern const char udc_None[];
wim 38:cbe275b0b647 103 //extern const char udc_All[];
wim 34:e5a0dcb43ecc 104 #endif /* LCD_UDC Examples */
wim 34:e5a0dcb43ecc 105
wim 34:e5a0dcb43ecc 106 #endif // MBED_TEXTLCDUDC_H