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:
Tue Jan 29 20:49:33 2013 +0000
Revision:
8:03116f75b66e
Parent:
7:44f34c09bd37
Child:
9:0893d986e717
TextLCD Update to fix memoryaddress problems

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 6:e4cb7ddee0d3 2 * Copyright (c) 2007-2010, sford, http://mbed.org
wim 8:03116f75b66e 3 * 2013, WH, Updated LCD types and fixed lcd address issues
simon 1:ac48b187213c 4 *
simon 1:ac48b187213c 5 * Permission is hereby granted, free of charge, to any person obtaining a copy
simon 1:ac48b187213c 6 * of this software and associated documentation files (the "Software"), to deal
simon 1:ac48b187213c 7 * in the Software without restriction, including without limitation the rights
simon 1:ac48b187213c 8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
simon 1:ac48b187213c 9 * copies of the Software, and to permit persons to whom the Software is
simon 1:ac48b187213c 10 * furnished to do so, subject to the following conditions:
simon 2:227356c7d12c 11 *
simon 1:ac48b187213c 12 * The above copyright notice and this permission notice shall be included in
simon 1:ac48b187213c 13 * all copies or substantial portions of the Software.
simon 2:227356c7d12c 14 *
simon 1:ac48b187213c 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
simon 1:ac48b187213c 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
simon 1:ac48b187213c 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
simon 1:ac48b187213c 18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
simon 1:ac48b187213c 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
simon 1:ac48b187213c 20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
simon 1:ac48b187213c 21 * THE SOFTWARE.
simon 1:ac48b187213c 22 */
simon 1:ac48b187213c 23
simon 1:ac48b187213c 24 #ifndef MBED_TEXTLCD_H
simon 1:ac48b187213c 25 #define MBED_TEXTLCD_H
simon 1:ac48b187213c 26
simon 1:ac48b187213c 27 #include "mbed.h"
simon 2:227356c7d12c 28
simon 5:a53b3e2d6f1e 29 /** A TextLCD interface for driving 4-bit HD44780-based LCDs
simon 2:227356c7d12c 30 *
wim 8:03116f75b66e 31 * Currently supports 8x1, 8x2, 16x2, 16x4, 20x2, 20x4 and 24x2 panels
simon 2:227356c7d12c 32 *
simon 2:227356c7d12c 33 * @code
simon 2:227356c7d12c 34 * #include "mbed.h"
simon 2:227356c7d12c 35 * #include "TextLCD.h"
simon 5:a53b3e2d6f1e 36 *
simon 7:44f34c09bd37 37 * TextLCD lcd(p10, p12, p15, p16, p29, p30); // rs, e, d4-d7
simon 5:a53b3e2d6f1e 38 *
simon 2:227356c7d12c 39 * int main() {
simon 2:227356c7d12c 40 * lcd.printf("Hello World!\n");
simon 2:227356c7d12c 41 * }
simon 2:227356c7d12c 42 * @endcode
simon 2:227356c7d12c 43 */
wim 8:03116f75b66e 44
simon 1:ac48b187213c 45 class TextLCD : public Stream {
simon 1:ac48b187213c 46 public:
simon 1:ac48b187213c 47
simon 2:227356c7d12c 48 /** LCD panel format */
simon 1:ac48b187213c 49 enum LCDType {
wim 8:03116f75b66e 50 LCD8x1, /**< 8x1 LCD panel */
wim 8:03116f75b66e 51 LCD8x2, /**< 8x2 LCD panel */
wim 8:03116f75b66e 52 LCD16x2, /**< 16x2 LCD panel (default) */
wim 8:03116f75b66e 53 LCD16x2B, /**< 16x2 LCD panel alternate addressing */
wim 8:03116f75b66e 54 LCD16x4, /**< 16x4 LCD panel */
wim 8:03116f75b66e 55 LCD20x2, /**< 20x2 LCD panel */
wim 8:03116f75b66e 56 LCD20x4, /**< 20x4 LCD panel */
wim 8:03116f75b66e 57 LCD24x2 /**< 24x2 LCD panel */
simon 1:ac48b187213c 58 };
simon 1:ac48b187213c 59
simon 2:227356c7d12c 60 /** Create a TextLCD interface
simon 2:227356c7d12c 61 *
simon 2:227356c7d12c 62 * @param rs Instruction/data control line
simon 2:227356c7d12c 63 * @param e Enable line (clock)
simon 7:44f34c09bd37 64 * @param d4-d7 Data lines for using as a 4-bit interface
simon 2:227356c7d12c 65 * @param type Sets the panel size/addressing mode (default = LCD16x2)
simon 2:227356c7d12c 66 */
simon 7:44f34c09bd37 67 TextLCD(PinName rs, PinName e, PinName d4, PinName d5, PinName d6, PinName d7, LCDType type = LCD16x2);
simon 2:227356c7d12c 68
simon 2:227356c7d12c 69 #if DOXYGEN_ONLY
simon 2:227356c7d12c 70 /** Write a character to the LCD
simon 2:227356c7d12c 71 *
simon 2:227356c7d12c 72 * @param c The character to write to the display
simon 2:227356c7d12c 73 */
simon 2:227356c7d12c 74 int putc(int c);
simon 2:227356c7d12c 75
simon 2:227356c7d12c 76 /** Write a formated string to the LCD
simon 2:227356c7d12c 77 *
simon 2:227356c7d12c 78 * @param format A printf-style format string, followed by the
simon 2:227356c7d12c 79 * variables to use in formating the string.
simon 2:227356c7d12c 80 */
simon 2:227356c7d12c 81 int printf(const char* format, ...);
simon 2:227356c7d12c 82 #endif
simon 2:227356c7d12c 83
simon 2:227356c7d12c 84 /** Locate to a screen column and row
simon 2:227356c7d12c 85 *
simon 2:227356c7d12c 86 * @param column The horizontal position from the left, indexed from 0
simon 2:227356c7d12c 87 * @param row The vertical position from the top, indexed from 0
simon 2:227356c7d12c 88 */
simon 1:ac48b187213c 89 void locate(int column, int row);
simon 2:227356c7d12c 90
simon 2:227356c7d12c 91 /** Clear the screen and locate to 0,0 */
simon 1:ac48b187213c 92 void cls();
simon 2:227356c7d12c 93
simon 1:ac48b187213c 94 int rows();
simon 2:227356c7d12c 95 int columns();
simon 2:227356c7d12c 96
simon 1:ac48b187213c 97 protected:
simon 1:ac48b187213c 98
simon 1:ac48b187213c 99 // Stream implementation functions
simon 1:ac48b187213c 100 virtual int _putc(int value);
simon 1:ac48b187213c 101 virtual int _getc();
simon 1:ac48b187213c 102
wim 8:03116f75b66e 103 int address(int column, int row);
wim 8:03116f75b66e 104 int getAddress(int column, int row);
wim 8:03116f75b66e 105 void setAddress(int column, int row);
simon 2:227356c7d12c 106 void character(int column, int row, int c);
simon 1:ac48b187213c 107 void writeByte(int value);
simon 1:ac48b187213c 108 void writeCommand(int command);
simon 1:ac48b187213c 109 void writeData(int data);
simon 1:ac48b187213c 110
simon 1:ac48b187213c 111 DigitalOut _rs, _e;
simon 1:ac48b187213c 112 BusOut _d;
simon 1:ac48b187213c 113 LCDType _type;
simon 1:ac48b187213c 114
simon 1:ac48b187213c 115 int _column;
simon 1:ac48b187213c 116 int _row;
simon 1:ac48b187213c 117 };
simon 1:ac48b187213c 118
simon 1:ac48b187213c 119 #endif