TextLCD
Revision 35:311be6444a39, committed 2014-10-10
- Comitter:
- wim
- Date:
- Fri Oct 10 15:47:56 2014 +0000
- Parent:
- 34:e5a0dcb43ecc
- Child:
- 36:9f5f86dfd44a
- Commit message:
- Added AC780 support, added I2C expander module types, fixed setBacklight() for inverted logic I2C expander modules. Fixed bug in LCD_SPI_N define.
Changed in this revision
--- a/TextLCD.cpp Sat Sep 27 12:38:27 2014 +0000 +++ b/TextLCD.cpp Fri Oct 10 15:47:56 2014 +0000 @@ -15,6 +15,7 @@ * 2014, v13: WH, Added support for controllers US2066/SSD1311 (OLED), added setUDCBlink() method for supported devices (eg SSD1803), fixed issue in setPower() * 2014, v14: WH, Added support for PT6314 (VFD), added setOrient() method for supported devices (eg SSD1803, US2066), added Double Height lines for supported devices, * added 16 UDCs for supported devices (eg PCF2103), moved UDC defines to TextLCD_UDC file, added TextLCD_Config.h for feature and footprint settings. + * 2014, v15: WH, Added AC780 support, added I2C expander modules, fixed setBacklight() for inverted logic modules. Fixed bug in LCD_SPI_N define * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -1574,12 +1575,23 @@ */ void TextLCD_Base::setBacklight(LCDBacklight backlightMode) { +#if (BACKLIGHT_INV==0) + // Positive Backlight control pin logic if (backlightMode == LightOn) { - this->_setBL(true); + this->_setBL(true); } else { this->_setBL(false); } +#else + // Inverted Backlight control pin logic + if (backlightMode == LightOn) { + this->_setBL(false); + } + else { + this->_setBL(true); + } +#endif } /** Set User Defined Characters @@ -1614,28 +1626,6 @@ } } - -#if(0) -/** Low level method to store user defined characters for current controller - * - * @param unsigned char c The Index of the UDC (0..7) for HD44780 clones - * @param char *udc_data The bitpatterns for the UDC (8 bytes of 5 significant bits) - */ -void TextLCD_Base::_setUDC(unsigned char c, char *udc_data) { - - // Select CG RAM for current LCD controller - _writeCommand(0x40 + ((c & 0x07) << 3)); //Set CG-RAM address, - //8 sequential locations needed per UDC - // Store UDC pattern - for (int i=0; i<8; i++) { - _writeData(*udc_data++); - } - - //Select DD RAM again for current LCD controller - int addr = getAddress(_column, _row); - _writeCommand(0x80 | addr); -} -#else /** Low level method to store user defined characters for current controller * * @param unsigned char c The Index of the UDC (0..7) for HD44780 clones and (0..15) for some more advanced controllers @@ -1673,7 +1663,6 @@ int addr = getAddress(_column, _row); _writeCommand(0x80 | addr); } -#endif /** Set UDC Blink * setUDCBlink method is supported by some compatible devices (eg SSD1803) @@ -2322,10 +2311,6 @@ // Used for mbed pins, I2C bus expander or SPI shiftregister void TextLCD_I2C::_setBL(bool value) { -#if (DFROBOT==1) - value = !value; // The DFRobot module uses PNP transistor to drive the Backlight. Reverse logic level. -#endif - if (value) { _lcd_bus |= D_LCD_BL; // Set BL bit }
--- a/TextLCD.h Sat Sep 27 12:38:27 2014 +0000 +++ b/TextLCD.h Fri Oct 10 15:47:56 2014 +0000 @@ -15,6 +15,7 @@ * 2014, v13: WH, Added support for controllers US2066/SSD1311 (OLED), added setUDCBlink() method for supported devices (eg SSD1803), fixed issue in setPower() * 2014, v14: WH, Added support for PT6314 (VFD), added setOrient() method for supported devices (eg SSD1803, US2066), added Double Height lines for supported devices, * added 16 UDCs for supported devices (eg PCF2103), moved UDC defines to TextLCD_UDC file, added TextLCD_Config.h for feature and footprint settings. + * 2014, v15: WH, Added AC780 support, added I2C expander modules, fixed setBacklight() for inverted logic modules. Fixed bug in LCD_SPI_N define * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -128,18 +129,22 @@ #define LCD_C_ICN 0x00040000 /*Icons */ #define LCD_C_PDN 0x00080000 /*Power Down */ - /** A TextLCD interface for driving 4-bit HD44780-based LCDs * * @brief Currently supports 8x1, 8x2, 12x2, 12x3, 12x4, 16x1, 16x2, 16x3, 16x4, 20x2, 20x4, 24x2, 24x4, 40x2 and 40x4 panels * Interface options include direct mbed pins, I2C portexpander (PCF8474/PCF8574A or MCP23008) or SPI bus shiftregister (74595) and some native I2C or SPI devices * */ -#if(LCD_PRINTF == 1) class TextLCD_Base : public Stream { -#else -class TextLCD_Base{ -#endif +//class TextLCD_Base{ + +//Unfortunately this #define selection breaks Doxygen !!! +//#if (LCD_PRINTF == 1) +//class TextLCD_Base : public Stream { +//#else +//class TextLCD_Base{ +//#endif + public: /** LCD panel format */ @@ -210,7 +215,7 @@ // SSD1803_5V = 15 | (LCD_C_PAR | LCD_C_SPI3_24 | LCD_C_I2C | LCD_C_BST | LCD_C_CTR | LCD_C_PDN), /**< SSD1803 3V3 with Booster, 4/8 bit, I2C, SPI3 */ US2066_3V3 = 16 | (LCD_C_PAR | LCD_C_SPI3_24 | LCD_C_I2C | LCD_C_CTR | LCD_C_PDN), /**< US2066/SSD1311 3V3, 4/8 bit, I2C, SPI3 */ PT6314 = 17 | (LCD_C_PAR | LCD_C_SPI3_16 | LCD_C_CTR), /**< PT6314 VFD, 4/8 bit, SPI3 */ -// AC780 = 18 | (LCD_C_PAR | LCD_C_SPI4 | LCD_C_I2C | LCD_C_PDN) /**< AC780/KS0066i 4/8 bit, SPI, I2C */ + AC780 = 18 | (LCD_C_PAR | LCD_C_SPI4 | LCD_C_I2C | LCD_C_PDN) /**< AC780/KS0066i 4/8 bit, SPI, I2C */ // WS0012 = 19 | (LCD_C_PAR | LCD_C_SPI3_10 | LCD_C_I2C | LCD_C_PDN) /**< WS0012 4/8 bit, SPI, I2C */ };
--- a/TextLCD_Config.h Sat Sep 27 12:38:27 2014 +0000 +++ b/TextLCD_Config.h Fri Oct 10 15:47:56 2014 +0000 @@ -1,6 +1,7 @@ /* mbed TextLCD Library, for a 4-bit LCD based on HD44780 * 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 * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -28,11 +29,12 @@ #define LCD_I2C 1 /* I2C Expander PCF8574/MCP23008 */ #define LCD_SPI 1 /* SPI Expander SN74595 */ #define LCD_I2C_N 1 /* Native I2C bus */ +#define LCD_SPI_N 1 /* Native SPI bus */ #define LCD_SPI_N_3_9 1 /* Native SPI bus */ #define LCD_SPI_N_3_10 1 /* Native SPI bus */ #define LCD_SPI_N_3_16 1 /* Native SPI bus */ #define LCD_SPI_N_3_24 1 /* Native SPI bus */ -#define LCD_SPI_N_4 1 /* Native SPI bus */ + //Select options to reduce memory footprint (multiple options allowed) #define LCD_UDC 1 /* Enable predefined UDC example*/ @@ -45,6 +47,9 @@ #define DEFAULT 1 #define ADAFRUIT 0 #define DFROBOT 0 +#define YWROBOT 0 +#define GYLCD 0 +#define SYDZ 0 //Select Hardware module (one option only) #if (DEFAULT==1) @@ -69,11 +74,15 @@ //Select I2C Portexpander type (one option only) #define PCF8574 1 #define MCP23008 0 + +//Inverted Backlight control +#define BACKLIGHT_INV 0 #endif #if (ADAFRUIT==1) //Definitions for Adafruit i2cspilcdbackpack mapping between serial port expander pins and LCD controller //This hardware supports both an I2C expander (MCP23008) and an SPI expander (74595) selectable by a jumper. +//Slaveaddress may be set by solderbridges (default 0x40). SDA/SCL has pullup Resistors onboard. //See http://www.ladyada.net/products/i2cspilcdbackpack // //Note: LCD RW pin must be kept LOW @@ -93,15 +102,53 @@ //Force I2C portexpander type #define PCF8574 0 #define MCP23008 1 + +//Inverted Backlight control +#define BACKLIGHT_INV 0 #endif #if (DFROBOT==1) //Definitions for DFROBOT LCD2004 Module mapping between serial port expander pins and LCD controller //This hardware uses PCF8574 and is different from earlier/different Arduino I2C LCD displays +//Slaveaddress hardwired to 0x4E. SDA/SCL has pullup Resistors onboard. +//See http://arduino-info.wikispaces.com/LCD-Blue-I2C +// +//Definitions for DFROBOT V1.1 +//This hardware uses PCF8574. Slaveaddress may be set by jumpers (default 0x40). +//SDA/SCL has pullup Resistors onboard and features a voltage level converter 3V3 <-> 5V. +//See http://www.dfrobot.com/index.php?route=product/product&product_id=135 +// +// +//Note: LCD RW pin must be kept LOW +// E2 is not available on default Arduino hardware and so it does not support LCD40x4 (second controller) +// BL is used to control backlight +#define D_LCD_PIN_RS 0 +#define D_LCD_PIN_RW 1 +#define D_LCD_PIN_E 2 +#define D_LCD_PIN_BL 3 +#define D_LCD_PIN_D4 4 +#define D_LCD_PIN_D5 5 +#define D_LCD_PIN_D6 6 +#define D_LCD_PIN_D7 7 + +#define D_LCD_PIN_E2 D_LCD_PIN_RW + +//Force I2C portexpander type +#define PCF8574 1 +#define MCP23008 0 + +//Inverted Backlight control +#define BACKLIGHT_INV 0 +#endif + +#if (YWROBOT==1) +//Definitions for YWROBOT LCM1602 V1 Module mapping between serial port expander pins and LCD controller. +//Very similar to DFROBOT. This hardware uses PCF8574. +//Slaveaddress may be set by solderbridges (default 0x4E). SDA/SCL has no pullup Resistors onboard. //See http://arduino-info.wikispaces.com/LCD-Blue-I2C // //Note: LCD RW pin must be kept LOW -// E2 is not available on default Arduino hardware and so it does not support LCD40x4 (second controller) +// E2 is not available on default hardware and so it does not support LCD40x4 (second controller) // BL is used to control backlight, reverse logic: Low turns on Backlight. This is handled in setBacklight() #define D_LCD_PIN_RS 0 #define D_LCD_PIN_RW 1 @@ -117,8 +164,66 @@ //Force I2C portexpander type #define PCF8574 1 #define MCP23008 0 + +//Inverted Backlight control +#define BACKLIGHT_INV 0 #endif +#if (GYLCD==1) +//Definitions for Arduino-IIC-LCD GY-LCD-V1 Module mapping between serial port expander pins and LCD controller. +//Very similar to DFROBOT. This hardware uses PCF8574. +//Slaveaddress may be set by solderbridges (default 0x4E). SDA/SCL has pullup Resistors onboard. +//See http://arduino-info.wikispaces.com/LCD-Blue-I2C +// +//Note: LCD RW pin must be kept LOW +// E2 is not available on default hardware and so it does not support LCD40x4 (second controller) +// BL is used to control backlight, reverse logic: Low turns on Backlight. This is handled in setBacklight() +#define D_LCD_PIN_D4 0 +#define D_LCD_PIN_D5 1 +#define D_LCD_PIN_D6 2 +#define D_LCD_PIN_D7 3 +#define D_LCD_PIN_EN 4 +#define D_LCD_PIN_RW 5 +#define D_LCD_PIN_RS 6 +#define D_LCD_PIN_BL 7 + +#define D_LCD_PIN_E2 D_LCD_PIN_RW + +//Force I2C portexpander type +#define PCF8574 1 +#define MCP23008 0 + +//Force Inverted Backlight control +#define BACKLIGHT_INV 1 +#endif + +#if (SYDZ==1) +//Definitions for SYDZ Module mapping between serial port expander pins and LCD controller. +//Very similar to DFROBOT. This hardware uses PCF8574A and uses inverted Backlight control +//Slaveaddress may be set by switches (default 0x40). SDA/SCL has pullup Resistors onboard. +//See ebay +// +//Note: LCD RW pin must be kept LOW +// E2 is not available on default hardware and so it does not support LCD40x4 (second controller) +// BL is used to control backlight, reverse logic: Low turns on Backlight. This is handled in setBacklight() +#define D_LCD_PIN_RS 0 +#define D_LCD_PIN_RW 1 +#define D_LCD_PIN_E 2 +#define D_LCD_PIN_BL 3 +#define D_LCD_PIN_D4 4 +#define D_LCD_PIN_D5 5 +#define D_LCD_PIN_D6 6 +#define D_LCD_PIN_D7 7 + +#define D_LCD_PIN_E2 D_LCD_PIN_RW + +//Force I2C portexpander type +#define PCF8574 1 +#define MCP23008 0 + +//Force Inverted Backlight control +#define BACKLIGHT_INV 1 +#endif //Bitpattern Defines for I2C PCF8574/PCF8574A, MCP23008 and SPI 74595 Bus expanders //