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
Parent:
0:edfb85c53631
Child:
2:227356c7d12c

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
simon 1:ac48b187213c 1 /* mbed TextLCD Library, for a 4-bit LCD based on HD44780
simon 1:ac48b187213c 2 * Copyright (c) 2007-2010, sford
simon 1:ac48b187213c 3 *
simon 1:ac48b187213c 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
simon 1:ac48b187213c 5 * of this software and associated documentation files (the "Software"), to deal
simon 1:ac48b187213c 6 * in the Software without restriction, including without limitation the rights
simon 1:ac48b187213c 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
simon 1:ac48b187213c 8 * copies of the Software, and to permit persons to whom the Software is
simon 1:ac48b187213c 9 * furnished to do so, subject to the following conditions:
simon 1:ac48b187213c 10 *
simon 1:ac48b187213c 11 * The above copyright notice and this permission notice shall be included in
simon 1:ac48b187213c 12 * all copies or substantial portions of the Software.
simon 1:ac48b187213c 13 *
simon 1:ac48b187213c 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
simon 1:ac48b187213c 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
simon 1:ac48b187213c 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
simon 1:ac48b187213c 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
simon 1:ac48b187213c 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
simon 1:ac48b187213c 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
simon 1:ac48b187213c 20 * THE SOFTWARE.
simon 1:ac48b187213c 21 */
simon 1:ac48b187213c 22
simon 1:ac48b187213c 23 #ifndef MBED_TEXTLCD_H
simon 1:ac48b187213c 24 #define MBED_TEXTLCD_H
simon 1:ac48b187213c 25
simon 1:ac48b187213c 26 #include "mbed.h"
simon 1:ac48b187213c 27 class TextLCD : public Stream {
simon 1:ac48b187213c 28 public:
simon 1:ac48b187213c 29
simon 1:ac48b187213c 30 // the different LCDs and addressing modes
simon 1:ac48b187213c 31 /** Select the type of LCD */
simon 1:ac48b187213c 32 enum LCDType {
simon 1:ac48b187213c 33 LCD16x2
simon 1:ac48b187213c 34 , LCD16x2B
simon 1:ac48b187213c 35 , LCD20x2
simon 1:ac48b187213c 36 , LCD20x4
simon 1:ac48b187213c 37 };
simon 1:ac48b187213c 38
simon 1:ac48b187213c 39 TextLCD(PinName rs, PinName e, PinName d0, PinName d1, PinName d2, PinName d3, LCDType type = LCD16x2);
simon 1:ac48b187213c 40 // int putc(int c) inherited from Stream
simon 1:ac48b187213c 41 // int printf(...) inherited from Stream
simon 1:ac48b187213c 42 void character(int column, int row, int c);
simon 1:ac48b187213c 43 void locate(int column, int row);
simon 1:ac48b187213c 44 void cls();
simon 1:ac48b187213c 45
simon 1:ac48b187213c 46 int rows();
simon 1:ac48b187213c 47 int columns();
simon 1:ac48b187213c 48
simon 1:ac48b187213c 49
simon 1:ac48b187213c 50 protected:
simon 1:ac48b187213c 51
simon 1:ac48b187213c 52 // Stream implementation functions
simon 1:ac48b187213c 53 virtual int _putc(int value);
simon 1:ac48b187213c 54 virtual int _getc();
simon 1:ac48b187213c 55
simon 1:ac48b187213c 56 // internal tx functions
simon 1:ac48b187213c 57 void writeByte(int value);
simon 1:ac48b187213c 58 void writeCommand(int command);
simon 1:ac48b187213c 59 void writeData(int data);
simon 1:ac48b187213c 60 int address(int column, int row);
simon 1:ac48b187213c 61
simon 1:ac48b187213c 62 DigitalOut _rs, _e;
simon 1:ac48b187213c 63 BusOut _d;
simon 1:ac48b187213c 64 LCDType _type;
simon 1:ac48b187213c 65
simon 1:ac48b187213c 66 // current row/column
simon 1:ac48b187213c 67 int _column;
simon 1:ac48b187213c 68 int _row;
simon 1:ac48b187213c 69 };
simon 1:ac48b187213c 70
simon 1:ac48b187213c 71 #endif