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:
Sat Apr 18 11:33:02 2015 +0000
Revision:
38:cbe275b0b647
Parent:
37:ce348c002929
Child:
39:e9c2319de9c5
Fixed Adafruit I2C/SPI portexpander pinmappings, fixed SYDZ Backlight control

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 35:311be6444a39 4 * 2014, v02: WH, Added AC780 support, added I2C expander modules, fixed setBacklight() for inverted logic modules. Fixed bug in LCD_SPI_N define
wim 36:9f5f86dfd44a 5 * 2014, v03: WH, Added LCD_SPI_N_3_8 define for ST7070
wim 37:ce348c002929 6 * 2015, v04: WH, Added support for alternative fonttables (eg PCF21XX)
wim 37:ce348c002929 7 * 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
wim 38:cbe275b0b647 8 * 2015, v06: WH, Performance improvement I2C portexpander
wim 38:cbe275b0b647 9 * 2015, v07: WH, Fixed Adafruit I2C/SPI portexpander pinmappings, fixed SYDZ Backlight
wim 34:e5a0dcb43ecc 10 *
wim 34:e5a0dcb43ecc 11 * Permission is hereby granted, free of charge, to any person obtaining a copy
wim 34:e5a0dcb43ecc 12 * of this software and associated documentation files (the "Software"), to deal
wim 34:e5a0dcb43ecc 13 * in the Software without restriction, including without limitation the rights
wim 34:e5a0dcb43ecc 14 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
wim 34:e5a0dcb43ecc 15 * copies of the Software, and to permit persons to whom the Software is
wim 34:e5a0dcb43ecc 16 * furnished to do so, subject to the following conditions:
wim 34:e5a0dcb43ecc 17 *
wim 34:e5a0dcb43ecc 18 * The above copyright notice and this permission notice shall be included in
wim 34:e5a0dcb43ecc 19 * all copies or substantial portions of the Software.
wim 34:e5a0dcb43ecc 20 *
wim 34:e5a0dcb43ecc 21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
wim 34:e5a0dcb43ecc 22 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
wim 34:e5a0dcb43ecc 23 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
wim 34:e5a0dcb43ecc 24 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
wim 34:e5a0dcb43ecc 25 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
wim 34:e5a0dcb43ecc 26 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
wim 34:e5a0dcb43ecc 27 * THE SOFTWARE.
wim 34:e5a0dcb43ecc 28 */
wim 34:e5a0dcb43ecc 29 #ifndef MBED_TEXTLCDCONFIG_H
wim 34:e5a0dcb43ecc 30 #define MBED_TEXTLCDCONFIG_H
wim 34:e5a0dcb43ecc 31
wim 34:e5a0dcb43ecc 32 //Select hardware interface options to reduce memory footprint (multiple options allowed)
wim 34:e5a0dcb43ecc 33 #define LCD_I2C 1 /* I2C Expander PCF8574/MCP23008 */
wim 34:e5a0dcb43ecc 34 #define LCD_SPI 1 /* SPI Expander SN74595 */
wim 34:e5a0dcb43ecc 35 #define LCD_I2C_N 1 /* Native I2C bus */
wim 35:311be6444a39 36 #define LCD_SPI_N 1 /* Native SPI bus */
wim 36:9f5f86dfd44a 37 #define LCD_SPI_N_3_8 1 /* Native SPI bus */
wim 34:e5a0dcb43ecc 38 #define LCD_SPI_N_3_9 1 /* Native SPI bus */
wim 34:e5a0dcb43ecc 39 #define LCD_SPI_N_3_10 1 /* Native SPI bus */
wim 34:e5a0dcb43ecc 40 #define LCD_SPI_N_3_16 1 /* Native SPI bus */
wim 34:e5a0dcb43ecc 41 #define LCD_SPI_N_3_24 1 /* Native SPI bus */
wim 35:311be6444a39 42
wim 34:e5a0dcb43ecc 43 //Select options to reduce memory footprint (multiple options allowed)
wim 34:e5a0dcb43ecc 44 #define LCD_UDC 1 /* Enable predefined UDC example*/
wim 34:e5a0dcb43ecc 45 #define LCD_PRINTF 1 /* Enable Stream implementation */
wim 34:e5a0dcb43ecc 46
wim 37:ce348c002929 47 //Select option to activate default fonttable or alternatively use conversion for specific controller versions (eg PCF2119C)
wim 37:ce348c002929 48 #define LCD_DEFAULT_FONT 1
wim 37:ce348c002929 49
wim 34:e5a0dcb43ecc 50 //Pin Defines for I2C PCF8574/PCF8574A or MCP23008 and SPI 74595 bus expander interfaces
wim 37:ce348c002929 51 //Different commercially available LCD portexpanders use different wiring conventions.
wim 37:ce348c002929 52 //LCD and serial portexpanders should be wired according to the tables below.
wim 34:e5a0dcb43ecc 53 //
wim 37:ce348c002929 54 //Select Serial Port Expander Hardware module (one option only)
wim 34:e5a0dcb43ecc 55 #define DEFAULT 1
wim 34:e5a0dcb43ecc 56 #define ADAFRUIT 0
wim 34:e5a0dcb43ecc 57 #define DFROBOT 0
wim 35:311be6444a39 58 #define YWROBOT 0
wim 35:311be6444a39 59 #define GYLCD 0
wim 35:311be6444a39 60 #define SYDZ 0
wim 34:e5a0dcb43ecc 61
wim 34:e5a0dcb43ecc 62 #if (DEFAULT==1)
wim 34:e5a0dcb43ecc 63 //Definitions for default (WH) mapping between serial port expander pins and LCD controller
wim 34:e5a0dcb43ecc 64 //This hardware supports the I2C bus expander (PCF8574/PCF8574A or MCP23008) and SPI bus expander (74595) interfaces
wim 34:e5a0dcb43ecc 65 //See https://mbed.org/cookbook/Text-LCD-Enhanced
wim 34:e5a0dcb43ecc 66 //
wim 34:e5a0dcb43ecc 67 //Note: LCD RW pin must be connected to GND
wim 34:e5a0dcb43ecc 68 // E2 is used for LCD40x4 (second controller)
wim 34:e5a0dcb43ecc 69 // BL may be used to control backlight
wim 38:cbe275b0b647 70
wim 38:cbe275b0b647 71 //I2C bus expander (PCF8574/PCF8574A or MCP23008) interface
wim 38:cbe275b0b647 72 #define LCD_BUS_I2C_D4 (1 << 0)
wim 38:cbe275b0b647 73 #define LCD_BUS_I2C_D5 (1 << 1)
wim 38:cbe275b0b647 74 #define LCD_BUS_I2C_D6 (1 << 2)
wim 38:cbe275b0b647 75 #define LCD_BUS_I2C_D7 (1 << 3)
wim 38:cbe275b0b647 76 #define LCD_BUS_I2C_RS (1 << 4)
wim 38:cbe275b0b647 77 #define LCD_BUS_I2C_E (1 << 5)
wim 38:cbe275b0b647 78 #define LCD_BUS_I2C_E2 (1 << 6)
wim 38:cbe275b0b647 79 #define LCD_BUS_I2C_BL (1 << 7)
wim 34:e5a0dcb43ecc 80
wim 38:cbe275b0b647 81 #define LCD_BUS_I2C_RW (1 << 6)
wim 38:cbe275b0b647 82
wim 38:cbe275b0b647 83 //SPI bus expander (74595) interface, same as I2C
wim 38:cbe275b0b647 84 #define LCD_BUS_SPI_D4 LCD_BUS_I2C_D4
wim 38:cbe275b0b647 85 #define LCD_BUS_SPI_D5 LCD_BUS_I2C_D5
wim 38:cbe275b0b647 86 #define LCD_BUS_SPI_D6 LCD_BUS_I2C_D6
wim 38:cbe275b0b647 87 #define LCD_BUS_SPI_D7 LCD_BUS_I2C_D7
wim 38:cbe275b0b647 88 #define LCD_BUS_SPI_RS LCD_BUS_I2C_RS
wim 38:cbe275b0b647 89 #define LCD_BUS_SPI_E LCD_BUS_I2C_E
wim 38:cbe275b0b647 90 #define LCD_BUS_SPI_E2 LCD_BUS_I2C_E2
wim 38:cbe275b0b647 91 #define LCD_BUS_SPI_BL LCD_BUS_I2C_BL
wim 38:cbe275b0b647 92
wim 38:cbe275b0b647 93 #define LCD_BUS_SPI_RW LCD_BUS_I2C_RW
wim 34:e5a0dcb43ecc 94
wim 34:e5a0dcb43ecc 95 //Select I2C Portexpander type (one option only)
wim 34:e5a0dcb43ecc 96 #define PCF8574 1
wim 34:e5a0dcb43ecc 97 #define MCP23008 0
wim 35:311be6444a39 98
wim 35:311be6444a39 99 //Inverted Backlight control
wim 35:311be6444a39 100 #define BACKLIGHT_INV 0
wim 34:e5a0dcb43ecc 101 #endif
wim 34:e5a0dcb43ecc 102
wim 34:e5a0dcb43ecc 103 #if (ADAFRUIT==1)
wim 34:e5a0dcb43ecc 104 //Definitions for Adafruit i2cspilcdbackpack mapping between serial port expander pins and LCD controller
wim 34:e5a0dcb43ecc 105 //This hardware supports both an I2C expander (MCP23008) and an SPI expander (74595) selectable by a jumper.
wim 35:311be6444a39 106 //Slaveaddress may be set by solderbridges (default 0x40). SDA/SCL has pullup Resistors onboard.
wim 34:e5a0dcb43ecc 107 //See http://www.ladyada.net/products/i2cspilcdbackpack
wim 34:e5a0dcb43ecc 108 //
wim 34:e5a0dcb43ecc 109 //Note: LCD RW pin must be kept LOW
wim 34:e5a0dcb43ecc 110 // E2 is not available on this hardware and so it does not support LCD40x4 (second controller)
wim 34:e5a0dcb43ecc 111 // BL is used to control backlight
wim 38:cbe275b0b647 112 //Note: The pinmappings are different for the MCP23008 and the 74595!
wim 38:cbe275b0b647 113
wim 38:cbe275b0b647 114 //I2C bus expander (MCP23008) interface
wim 38:cbe275b0b647 115 #define LCD_BUS_I2C_0 (1 << 0)
wim 38:cbe275b0b647 116 #define LCD_BUS_I2C_RS (1 << 1)
wim 38:cbe275b0b647 117 #define LCD_BUS_I2C_E (1 << 2)
wim 38:cbe275b0b647 118 #define LCD_BUS_I2C_D4 (1 << 3)
wim 38:cbe275b0b647 119 #define LCD_BUS_I2C_D5 (1 << 4)
wim 38:cbe275b0b647 120 #define LCD_BUS_I2C_D6 (1 << 5)
wim 38:cbe275b0b647 121 #define LCD_BUS_I2C_D7 (1 << 6)
wim 38:cbe275b0b647 122 #define LCD_BUS_I2C_BL (1 << 7)
wim 34:e5a0dcb43ecc 123
wim 38:cbe275b0b647 124 #define LCD_BUS_I2C_E2 (1 << 0)
wim 38:cbe275b0b647 125 #define LCD_BUS_I2C_RW (1 << 0)
wim 38:cbe275b0b647 126
wim 38:cbe275b0b647 127 //SPI bus expander (74595) interface
wim 38:cbe275b0b647 128 #define LCD_BUS_SPI_0 (1 << 0)
wim 38:cbe275b0b647 129 #define LCD_BUS_SPI_RS (1 << 1)
wim 38:cbe275b0b647 130 #define LCD_BUS_SPI_E (1 << 2)
wim 38:cbe275b0b647 131 #define LCD_BUS_SPI_D7 (1 << 3)
wim 38:cbe275b0b647 132 #define LCD_BUS_SPI_D6 (1 << 4)
wim 38:cbe275b0b647 133 #define LCD_BUS_SPI_D5 (1 << 5)
wim 38:cbe275b0b647 134 #define LCD_BUS_SPI_D4 (1 << 6)
wim 38:cbe275b0b647 135 #define LCD_BUS_SPI_BL (1 << 7)
wim 38:cbe275b0b647 136
wim 38:cbe275b0b647 137 #define LCD_BUS_SPI_E2 (1 << 0)
wim 38:cbe275b0b647 138 #define LCD_BUS_SPI_RW (1 << 0)
wim 34:e5a0dcb43ecc 139
wim 34:e5a0dcb43ecc 140 //Force I2C portexpander type
wim 34:e5a0dcb43ecc 141 #define PCF8574 0
wim 34:e5a0dcb43ecc 142 #define MCP23008 1
wim 35:311be6444a39 143
wim 35:311be6444a39 144 //Inverted Backlight control
wim 35:311be6444a39 145 #define BACKLIGHT_INV 0
wim 34:e5a0dcb43ecc 146 #endif
wim 34:e5a0dcb43ecc 147
wim 34:e5a0dcb43ecc 148 #if (DFROBOT==1)
wim 34:e5a0dcb43ecc 149 //Definitions for DFROBOT LCD2004 Module mapping between serial port expander pins and LCD controller
wim 34:e5a0dcb43ecc 150 //This hardware uses PCF8574 and is different from earlier/different Arduino I2C LCD displays
wim 35:311be6444a39 151 //Slaveaddress hardwired to 0x4E. SDA/SCL has pullup Resistors onboard.
wim 35:311be6444a39 152 //See http://arduino-info.wikispaces.com/LCD-Blue-I2C
wim 35:311be6444a39 153 //
wim 35:311be6444a39 154 //Definitions for DFROBOT V1.1
wim 35:311be6444a39 155 //This hardware uses PCF8574. Slaveaddress may be set by jumpers (default 0x40).
wim 35:311be6444a39 156 //SDA/SCL has pullup Resistors onboard and features a voltage level converter 3V3 <-> 5V.
wim 35:311be6444a39 157 //See http://www.dfrobot.com/index.php?route=product/product&product_id=135
wim 35:311be6444a39 158 //
wim 35:311be6444a39 159 //
wim 35:311be6444a39 160 //Note: LCD RW pin must be kept LOW
wim 35:311be6444a39 161 // E2 is not available on default Arduino hardware and so it does not support LCD40x4 (second controller)
wim 35:311be6444a39 162 // BL is used to control backlight
wim 38:cbe275b0b647 163
wim 38:cbe275b0b647 164 //I2C bus expander PCF8574 interface
wim 38:cbe275b0b647 165 #define LCD_BUS_I2C_RS (1 << 0)
wim 38:cbe275b0b647 166 #define LCD_BUS_I2C_RW (1 << 1)
wim 38:cbe275b0b647 167 #define LCD_BUS_I2C_E (1 << 2)
wim 38:cbe275b0b647 168 #define LCD_BUS_I2C_BL (1 << 3)
wim 38:cbe275b0b647 169 #define LCD_BUS_I2C_D4 (1 << 4)
wim 38:cbe275b0b647 170 #define LCD_BUS_I2C_D5 (1 << 5)
wim 38:cbe275b0b647 171 #define LCD_BUS_I2C_D6 (1 << 6)
wim 38:cbe275b0b647 172 #define LCD_BUS_I2C_D7 (1 << 7)
wim 38:cbe275b0b647 173
wim 38:cbe275b0b647 174 #define LCD_BUS_I2C_E2 (1 << 1)
wim 35:311be6444a39 175
wim 38:cbe275b0b647 176 //SPI bus expander (74595) interface, same as I2C
wim 38:cbe275b0b647 177 #define LCD_BUS_SPI_RS LCD_BUS_I2C_RS
wim 38:cbe275b0b647 178 #define LCD_BUS_SPI_RW LCD_BUS_I2C_RW
wim 38:cbe275b0b647 179 #define LCD_BUS_SPI_E LCD_BUS_I2C_E
wim 38:cbe275b0b647 180 #define LCD_BUS_SPI_BL LCD_BUS_I2C_BL
wim 38:cbe275b0b647 181 #define LCD_BUS_SPI_D4 LCD_BUS_I2C_D4
wim 38:cbe275b0b647 182 #define LCD_BUS_SPI_D5 LCD_BUS_I2C_D5
wim 38:cbe275b0b647 183 #define LCD_BUS_SPI_D6 LCD_BUS_I2C_D6
wim 38:cbe275b0b647 184 #define LCD_BUS_SPI_D7 LCD_BUS_I2C_D7
wim 38:cbe275b0b647 185
wim 38:cbe275b0b647 186 #define LCD_BUS_SPI_E2 LCD_BUS_I2C_E2
wim 38:cbe275b0b647 187
wim 35:311be6444a39 188
wim 35:311be6444a39 189 //Force I2C portexpander type
wim 35:311be6444a39 190 #define PCF8574 1
wim 35:311be6444a39 191 #define MCP23008 0
wim 35:311be6444a39 192
wim 35:311be6444a39 193 //Inverted Backlight control
wim 35:311be6444a39 194 #define BACKLIGHT_INV 0
wim 35:311be6444a39 195 #endif
wim 35:311be6444a39 196
wim 35:311be6444a39 197 #if (YWROBOT==1)
wim 35:311be6444a39 198 //Definitions for YWROBOT LCM1602 V1 Module mapping between serial port expander pins and LCD controller.
wim 35:311be6444a39 199 //Very similar to DFROBOT. This hardware uses PCF8574.
wim 35:311be6444a39 200 //Slaveaddress may be set by solderbridges (default 0x4E). SDA/SCL has no pullup Resistors onboard.
wim 34:e5a0dcb43ecc 201 //See http://arduino-info.wikispaces.com/LCD-Blue-I2C
wim 34:e5a0dcb43ecc 202 //
wim 34:e5a0dcb43ecc 203 //Note: LCD RW pin must be kept LOW
wim 35:311be6444a39 204 // E2 is not available on default hardware and so it does not support LCD40x4 (second controller)
wim 34:e5a0dcb43ecc 205 // BL is used to control backlight, reverse logic: Low turns on Backlight. This is handled in setBacklight()
wim 38:cbe275b0b647 206
wim 38:cbe275b0b647 207 //I2C bus expander PCF8574 interface
wim 38:cbe275b0b647 208 #define LCD_BUS_I2C_RS (1 << 0)
wim 38:cbe275b0b647 209 #define LCD_BUS_I2C_RW (1 << 1)
wim 38:cbe275b0b647 210 #define LCD_BUS_I2C_E (1 << 2)
wim 38:cbe275b0b647 211 #define LCD_BUS_I2C_BL (1 << 3)
wim 38:cbe275b0b647 212 #define LCD_BUS_I2C_D4 (1 << 4)
wim 38:cbe275b0b647 213 #define LCD_BUS_I2C_D5 (1 << 5)
wim 38:cbe275b0b647 214 #define LCD_BUS_I2C_D6 (1 << 6)
wim 38:cbe275b0b647 215 #define LCD_BUS_I2C_D7 (1 << 7)
wim 34:e5a0dcb43ecc 216
wim 38:cbe275b0b647 217 #define LCD_BUS_I2C_E2 (1 << 1)
wim 38:cbe275b0b647 218
wim 38:cbe275b0b647 219 //SPI bus expander (74595) interface, same as I2C
wim 38:cbe275b0b647 220 #define LCD_BUS_SPI_RS LCD_BUS_I2C_RS
wim 38:cbe275b0b647 221 #define LCD_BUS_SPI_RW LCD_BUS_I2C_RW
wim 38:cbe275b0b647 222 #define LCD_BUS_SPI_E LCD_BUS_I2C_E
wim 38:cbe275b0b647 223 #define LCD_BUS_SPI_BL LCD_BUS_I2C_BL
wim 38:cbe275b0b647 224 #define LCD_BUS_SPI_D4 LCD_BUS_I2C_D4
wim 38:cbe275b0b647 225 #define LCD_BUS_SPI_D5 LCD_BUS_I2C_D5
wim 38:cbe275b0b647 226 #define LCD_BUS_SPI_D6 LCD_BUS_I2C_D6
wim 38:cbe275b0b647 227 #define LCD_BUS_SPI_D7 LCD_BUS_I2C_D7
wim 38:cbe275b0b647 228
wim 38:cbe275b0b647 229 #define LCD_BUS_SPI_E2 LCD_BUS_I2C_E2
wim 34:e5a0dcb43ecc 230
wim 34:e5a0dcb43ecc 231 //Force I2C portexpander type
wim 34:e5a0dcb43ecc 232 #define PCF8574 1
wim 34:e5a0dcb43ecc 233 #define MCP23008 0
wim 35:311be6444a39 234
wim 35:311be6444a39 235 //Inverted Backlight control
wim 35:311be6444a39 236 #define BACKLIGHT_INV 0
wim 34:e5a0dcb43ecc 237 #endif
wim 34:e5a0dcb43ecc 238
wim 35:311be6444a39 239 #if (GYLCD==1)
wim 35:311be6444a39 240 //Definitions for Arduino-IIC-LCD GY-LCD-V1 Module mapping between serial port expander pins and LCD controller.
wim 35:311be6444a39 241 //Very similar to DFROBOT. This hardware uses PCF8574.
wim 35:311be6444a39 242 //Slaveaddress may be set by solderbridges (default 0x4E). SDA/SCL has pullup Resistors onboard.
wim 35:311be6444a39 243 //See http://arduino-info.wikispaces.com/LCD-Blue-I2C
wim 35:311be6444a39 244 //
wim 35:311be6444a39 245 //Note: LCD RW pin must be kept LOW
wim 35:311be6444a39 246 // E2 is not available on default hardware and so it does not support LCD40x4 (second controller)
wim 35:311be6444a39 247 // BL is used to control backlight, reverse logic: Low turns on Backlight. This is handled in setBacklight()
wim 38:cbe275b0b647 248
wim 38:cbe275b0b647 249 //I2C bus expander PCF8574 interface
wim 38:cbe275b0b647 250 #define LCD_BUS_I2C_D4 (1 << 0)
wim 38:cbe275b0b647 251 #define LCD_BUS_I2C_D5 (1 << 1)
wim 38:cbe275b0b647 252 #define LCD_BUS_I2C_D6 (1 << 2)
wim 38:cbe275b0b647 253 #define LCD_BUS_I2C_D7 (1 << 3)
wim 38:cbe275b0b647 254 #define LCD_BUS_I2C_E (1 << 4)
wim 38:cbe275b0b647 255 #define LCD_BUS_I2C_RW (1 << 5)
wim 38:cbe275b0b647 256 #define LCD_BUS_I2C_RS (1 << 6)
wim 38:cbe275b0b647 257 #define LCD_BUS_I2C_BL (1 << 7)
wim 35:311be6444a39 258
wim 38:cbe275b0b647 259 #define LCD_BUS_I2C_E2 (1 << 5)
wim 38:cbe275b0b647 260
wim 38:cbe275b0b647 261 //SPI bus expander (74595) interface
wim 38:cbe275b0b647 262 #define LCD_BUS_SPI_D4 LCD_BUS_I2C_D4
wim 38:cbe275b0b647 263 #define LCD_BUS_SPI_D5 LCD_BUS_I2C_D5
wim 38:cbe275b0b647 264 #define LCD_BUS_SPI_D6 LCD_BUS_I2C_D6
wim 38:cbe275b0b647 265 #define LCD_BUS_SPI_D7 LCD_BUS_I2C_D7
wim 38:cbe275b0b647 266 #define LCD_BUS_SPI_E LCD_BUS_I2C_E
wim 38:cbe275b0b647 267 #define LCD_BUS_SPI_RW LCD_BUS_I2C_RW
wim 38:cbe275b0b647 268 #define LCD_BUS_SPI_RS LCD_BUS_I2C_RS
wim 38:cbe275b0b647 269 #define LCD_BUS_SPI_BL LCD_BUS_I2C_BL
wim 38:cbe275b0b647 270
wim 38:cbe275b0b647 271 #define LCD_BUS_SPI_E2 LCD_BUS_I2C_E2
wim 35:311be6444a39 272
wim 35:311be6444a39 273 //Force I2C portexpander type
wim 35:311be6444a39 274 #define PCF8574 1
wim 35:311be6444a39 275 #define MCP23008 0
wim 35:311be6444a39 276
wim 35:311be6444a39 277 //Force Inverted Backlight control
wim 35:311be6444a39 278 #define BACKLIGHT_INV 1
wim 35:311be6444a39 279 #endif
wim 35:311be6444a39 280
wim 35:311be6444a39 281 #if (SYDZ==1)
wim 35:311be6444a39 282 //Definitions for SYDZ Module mapping between serial port expander pins and LCD controller.
wim 38:cbe275b0b647 283 //Very similar to DFROBOT. This hardware uses PCF8574A.
wim 38:cbe275b0b647 284 //Slaveaddress may be set by switches (default 0x70). SDA/SCL has pullup Resistors onboard.
wim 35:311be6444a39 285 //See ebay
wim 35:311be6444a39 286 //
wim 35:311be6444a39 287 //Note: LCD RW pin must be kept LOW
wim 35:311be6444a39 288 // E2 is not available on default hardware and so it does not support LCD40x4 (second controller)
wim 38:cbe275b0b647 289 // BL is used to control backlight
wim 38:cbe275b0b647 290
wim 38:cbe275b0b647 291 //I2C bus expander PCF8574A interface
wim 38:cbe275b0b647 292 #define LCD_BUS_I2C_RS (1 << 0)
wim 38:cbe275b0b647 293 #define LCD_BUS_I2C_RW (1 << 1)
wim 38:cbe275b0b647 294 #define LCD_BUS_I2C_E (1 << 2)
wim 38:cbe275b0b647 295 #define LCD_BUS_I2C_BL (1 << 3)
wim 38:cbe275b0b647 296 #define LCD_BUS_I2C_D4 (1 << 4)
wim 38:cbe275b0b647 297 #define LCD_BUS_I2C_D5 (1 << 5)
wim 38:cbe275b0b647 298 #define LCD_BUS_I2C_D6 (1 << 6)
wim 38:cbe275b0b647 299 #define LCD_BUS_I2C_D7 (1 << 7)
wim 35:311be6444a39 300
wim 38:cbe275b0b647 301 #define LCD_BUS_I2C_E2 (1 << 1)
wim 38:cbe275b0b647 302
wim 38:cbe275b0b647 303 //SPI bus expander (74595) interface, same as I2C
wim 38:cbe275b0b647 304 #define LCD_BUS_SPI_RS LCD_BUS_I2C_RS
wim 38:cbe275b0b647 305 #define LCD_BUS_SPI_RW LCD_BUS_I2C_RW
wim 38:cbe275b0b647 306 #define LCD_BUS_SPI_E LCD_BUS_I2C_E
wim 38:cbe275b0b647 307 #define LCD_BUS_SPI_BL LCD_BUS_I2C_BL
wim 38:cbe275b0b647 308 #define LCD_BUS_SPI_D4 LCD_BUS_I2C_D4
wim 38:cbe275b0b647 309 #define LCD_BUS_SPI_D5 LCD_BUS_I2C_D5
wim 38:cbe275b0b647 310 #define LCD_BUS_SPI_D6 LCD_BUS_I2C_D6
wim 38:cbe275b0b647 311 #define LCD_BUS_SPI_D7 LCD_BUS_I2C_D7
wim 38:cbe275b0b647 312
wim 38:cbe275b0b647 313 #define LCD_BUS_SPI_E2 LCD_BUS_I2C_E2
wim 35:311be6444a39 314
wim 35:311be6444a39 315 //Force I2C portexpander type
wim 35:311be6444a39 316 #define PCF8574 1
wim 35:311be6444a39 317 #define MCP23008 0
wim 35:311be6444a39 318
wim 35:311be6444a39 319 //Force Inverted Backlight control
wim 38:cbe275b0b647 320 #define BACKLIGHT_INV 0
wim 35:311be6444a39 321 #endif
wim 34:e5a0dcb43ecc 322
wim 34:e5a0dcb43ecc 323 //Bitpattern Defines for I2C PCF8574/PCF8574A, MCP23008 and SPI 74595 Bus expanders
wim 37:ce348c002929 324 //Don't change!
wim 38:cbe275b0b647 325 #define LCD_BUS_I2C_MSK (LCD_BUS_I2C_D4 | LCD_BUS_I2C_D5 | LCD_BUS_I2C_D6 | LCD_BUS_I2C_D7)
wim 38:cbe275b0b647 326 #if (BACKLIGHT_INV == 1)
wim 38:cbe275b0b647 327 #define LCD_BUS_I2C_DEF (0x00 | LCD_BUS_I2C_BL)
wim 38:cbe275b0b647 328 #else
wim 38:cbe275b0b647 329 #define LCD_BUS_I2C_DEF 0x00
wim 38:cbe275b0b647 330 #endif
wim 34:e5a0dcb43ecc 331
wim 38:cbe275b0b647 332 #define LCD_BUS_SPI_MSK (LCD_BUS_SPI_D4 | LCD_BUS_SPI_D5 | LCD_BUS_SPI_D6 | LCD_BUS_SPI_D7)
wim 38:cbe275b0b647 333 #if (BACKLIGHT_INV == 1)
wim 38:cbe275b0b647 334 #define LCD_BUS_SPI_DEF (0x00 | LCD_BUS_SPI_BL)
wim 38:cbe275b0b647 335 #else
wim 38:cbe275b0b647 336 #define LCD_BUS_SPI_DEF 0x00
wim 38:cbe275b0b647 337 #endif
wim 38:cbe275b0b647 338
wim 34:e5a0dcb43ecc 339
wim 34:e5a0dcb43ecc 340 /* PCF8574/PCF8574A I2C portexpander slave address */
wim 34:e5a0dcb43ecc 341 #define PCF8574_SA0 0x40
wim 34:e5a0dcb43ecc 342 #define PCF8574_SA1 0x42
wim 34:e5a0dcb43ecc 343 #define PCF8574_SA2 0x44
wim 34:e5a0dcb43ecc 344 #define PCF8574_SA3 0x46
wim 34:e5a0dcb43ecc 345 #define PCF8574_SA4 0x48
wim 34:e5a0dcb43ecc 346 #define PCF8574_SA5 0x4A
wim 34:e5a0dcb43ecc 347 #define PCF8574_SA6 0x4C
wim 34:e5a0dcb43ecc 348 #define PCF8574_SA7 0x4E
wim 34:e5a0dcb43ecc 349
wim 34:e5a0dcb43ecc 350 #define PCF8574A_SA0 0x70
wim 34:e5a0dcb43ecc 351 #define PCF8574A_SA1 0x72
wim 34:e5a0dcb43ecc 352 #define PCF8574A_SA2 0x74
wim 34:e5a0dcb43ecc 353 #define PCF8574A_SA3 0x76
wim 34:e5a0dcb43ecc 354 #define PCF8574A_SA4 0x78
wim 34:e5a0dcb43ecc 355 #define PCF8574A_SA5 0x7A
wim 34:e5a0dcb43ecc 356 #define PCF8574A_SA6 0x7C
wim 34:e5a0dcb43ecc 357 #define PCF8574A_SA7 0x7E
wim 34:e5a0dcb43ecc 358
wim 34:e5a0dcb43ecc 359 /* MCP23008 I2C portexpander slave address */
wim 34:e5a0dcb43ecc 360 #define MCP23008_SA0 0x40
wim 34:e5a0dcb43ecc 361 #define MCP23008_SA1 0x42
wim 34:e5a0dcb43ecc 362 #define MCP23008_SA2 0x44
wim 34:e5a0dcb43ecc 363 #define MCP23008_SA3 0x46
wim 34:e5a0dcb43ecc 364 #define MCP23008_SA4 0x48
wim 34:e5a0dcb43ecc 365 #define MCP23008_SA5 0x4A
wim 34:e5a0dcb43ecc 366 #define MCP23008_SA6 0x4C
wim 34:e5a0dcb43ecc 367 #define MCP23008_SA7 0x4E
wim 34:e5a0dcb43ecc 368
wim 34:e5a0dcb43ecc 369 /* MCP23008 I2C portexpander internal registers */
wim 34:e5a0dcb43ecc 370 #define IODIR 0x00
wim 34:e5a0dcb43ecc 371 #define IPOL 0x01
wim 34:e5a0dcb43ecc 372 #define GPINTEN 0x02
wim 34:e5a0dcb43ecc 373 #define DEFVAL 0x03
wim 34:e5a0dcb43ecc 374 #define INTCON 0x04
wim 34:e5a0dcb43ecc 375 #define IOCON 0x05
wim 34:e5a0dcb43ecc 376 #define GPPU 0x06
wim 34:e5a0dcb43ecc 377 #define INTF 0x07
wim 34:e5a0dcb43ecc 378 #define INTCAP 0x08
wim 34:e5a0dcb43ecc 379 #define GPIO 0x09
wim 34:e5a0dcb43ecc 380 #define OLAT 0x0A
wim 34:e5a0dcb43ecc 381
wim 34:e5a0dcb43ecc 382 /* ST7032i I2C slave address */
wim 34:e5a0dcb43ecc 383 #define ST7032_SA 0x7C
wim 34:e5a0dcb43ecc 384
wim 34:e5a0dcb43ecc 385 /* ST7036i I2C slave address */
wim 34:e5a0dcb43ecc 386 #define ST7036_SA0 0x78
wim 34:e5a0dcb43ecc 387 #define ST7036_SA1 0x7A
wim 34:e5a0dcb43ecc 388 #define ST7036_SA2 0x7C
wim 34:e5a0dcb43ecc 389 #define ST7036_SA3 0x7E
wim 34:e5a0dcb43ecc 390
wim 37:ce348c002929 391 /* ST7066_ACM I2C slave address, Added for ACM1602 module */
wim 37:ce348c002929 392 #define ST7066_SA0 0xA0
wim 37:ce348c002929 393
wim 34:e5a0dcb43ecc 394 /* PCF21XX I2C slave address */
wim 34:e5a0dcb43ecc 395 #define PCF21XX_SA0 0x74
wim 34:e5a0dcb43ecc 396 #define PCF21XX_SA1 0x76
wim 34:e5a0dcb43ecc 397
wim 34:e5a0dcb43ecc 398 /* AIP31068 I2C slave address */
wim 34:e5a0dcb43ecc 399 #define AIP31068_SA 0x7C
wim 34:e5a0dcb43ecc 400
wim 34:e5a0dcb43ecc 401 /* SSD1803 I2C slave address */
wim 34:e5a0dcb43ecc 402 #define SSD1803_SA0 0x78
wim 34:e5a0dcb43ecc 403 #define SSD1803_SA1 0x7A
wim 34:e5a0dcb43ecc 404
wim 34:e5a0dcb43ecc 405 /* US2066/SSD1311 I2C slave address */
wim 34:e5a0dcb43ecc 406 #define US2066_SA0 0x78
wim 34:e5a0dcb43ecc 407 #define US2066_SA1 0x7A
wim 34:e5a0dcb43ecc 408
wim 34:e5a0dcb43ecc 409 /* AC780 I2C slave address */
wim 34:e5a0dcb43ecc 410 #define AC780_SA0 0x78
wim 34:e5a0dcb43ecc 411 #define AC780_SA1 0x7A
wim 34:e5a0dcb43ecc 412 #define AC780_SA2 0x7C
wim 34:e5a0dcb43ecc 413 #define AC780_SA3 0x7E
wim 34:e5a0dcb43ecc 414
wim 34:e5a0dcb43ecc 415 //Some native I2C controllers dont support ACK. Set define to '0' to allow code to proceed even without ACK
wim 34:e5a0dcb43ecc 416 //#define LCD_I2C_ACK 0
wim 34:e5a0dcb43ecc 417 #define LCD_I2C_ACK 1
wim 34:e5a0dcb43ecc 418
wim 34:e5a0dcb43ecc 419
wim 34:e5a0dcb43ecc 420 // Contrast setting, 6 significant bits (only supported for controllers with extended features)
wim 34:e5a0dcb43ecc 421 // Voltage Multiplier setting, 2 or 3 significant bits (only supported for controllers with extended features)
wim 34:e5a0dcb43ecc 422 #define LCD_DEF_CONTRAST 0x20
wim 34:e5a0dcb43ecc 423
wim 34:e5a0dcb43ecc 424 //ST7032 EastRising ERC1602FS-4 display
wim 34:e5a0dcb43ecc 425 //Contrast setting 6 significant bits
wim 34:e5a0dcb43ecc 426 //Voltage Multiplier setting 3 significant bits
wim 37:ce348c002929 427 #define LCD_ST7032_CONTRAST 0x28
wim 34:e5a0dcb43ecc 428 #define LCD_ST7032_RAB 0x04
wim 34:e5a0dcb43ecc 429
wim 34:e5a0dcb43ecc 430 //ST7036 EA DOGM1603 display
wim 34:e5a0dcb43ecc 431 //Contrast setting 6 significant bits
wim 34:e5a0dcb43ecc 432 //Voltage Multiplier setting 3 significant bits
wim 34:e5a0dcb43ecc 433 #define LCD_ST7036_CONTRAST 0x28
wim 34:e5a0dcb43ecc 434 #define LCD_ST7036_RAB 0x04
wim 34:e5a0dcb43ecc 435
wim 34:e5a0dcb43ecc 436 //SSD1803 EA DOGM204 display
wim 34:e5a0dcb43ecc 437 //Contrast setting 6 significant bits
wim 34:e5a0dcb43ecc 438 //Voltage Multiplier setting 3 significant bits
wim 34:e5a0dcb43ecc 439 #define LCD_SSD1_CONTRAST 0x28
wim 34:e5a0dcb43ecc 440 #define LCD_SSD1_RAB 0x06
wim 34:e5a0dcb43ecc 441
wim 34:e5a0dcb43ecc 442 //US2066/SSD1311 EastRising ER-OLEDM2002-4 display
wim 34:e5a0dcb43ecc 443 //Contrast setting 8 significant bits, use 6 for compatibility
wim 34:e5a0dcb43ecc 444 #define LCD_US20_CONTRAST 0x3F
wim 34:e5a0dcb43ecc 445 //#define LCD_US20_CONTRAST 0x1F
wim 34:e5a0dcb43ecc 446
wim 34:e5a0dcb43ecc 447 //PCF2113, PCF2119 display
wim 34:e5a0dcb43ecc 448 //Contrast setting 6 significant bits
wim 34:e5a0dcb43ecc 449 //Voltage Multiplier setting 2 significant bits
wim 34:e5a0dcb43ecc 450 #define LCD_PCF2_CONTRAST 0x20
wim 34:e5a0dcb43ecc 451 #define LCD_PCF2_S12 0x02
wim 34:e5a0dcb43ecc 452
wim 34:e5a0dcb43ecc 453 //PT6314 VFD display
wim 34:e5a0dcb43ecc 454 //Contrast setting 2 significant bits, use 6 for compatibility
wim 34:e5a0dcb43ecc 455 #define LCD_PT63_CONTRAST 0x3F
wim 34:e5a0dcb43ecc 456
wim 34:e5a0dcb43ecc 457
wim 34:e5a0dcb43ecc 458 #endif //MBED_TEXTLCDCONFIG_H