1
TextLCD.h@37:ce348c002929, 2015-03-29 (annotated)
- Committer:
- wim
- Date:
- Sun Mar 29 13:08:03 2015 +0000
- Revision:
- 37:ce348c002929
- Parent:
- 36:9f5f86dfd44a
- Child:
- 38:cbe275b0b647
Cleaned up low level command and data write operations to improve speed of I2C expander versions (PCF8574 and MCP23008). Added initial support for controllers with alternative fonttables.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
wim | 37:ce348c002929 | 1 | /* mbed TextLCD Library, for LCDs based on HD44780 controllers |
simon | 6:e4cb7ddee0d3 | 2 | * Copyright (c) 2007-2010, sford, http://mbed.org |
wim | 13:24506ba22480 | 3 | * 2013, v01: WH, Added LCD types, fixed LCD address issues, added Cursor and UDCs |
wim | 15:b70ebfffb258 | 4 | * 2013, v02: WH, Added I2C and SPI bus interfaces |
wim | 15:b70ebfffb258 | 5 | * 2013, v03: WH, Added support for LCD40x4 which uses 2 controllers |
wim | 17:652ab113bc2e | 6 | * 2013, v04: WH, Added support for Display On/Off, improved 4bit bootprocess |
wim | 18:bd65dc10f27f | 7 | * 2013, v05: WH, Added support for 8x2B, added some UDCs |
wim | 19:c747b9e2e7b8 | 8 | * 2013, v06: WH, Added support for devices that use internal DC/DC converters |
wim | 20:e0da005a777f | 9 | * 2013, v07: WH, Added support for backlight and include portdefinitions for LCD2004 Module from DFROBOT |
wim | 21:9eb628d9e164 | 10 | * 2014, v08: WH, Refactored in Base and Derived Classes to deal with mbed lib change regarding 'NC' defined DigitalOut pins |
wim | 25:6162b31128c9 | 11 | * 2014, v09: WH/EO, Added Class for Native SPI controllers such as ST7032 |
wim | 26:bd897a001012 | 12 | * 2014, v10: WH, Added Class for Native I2C controllers such as ST7032i, Added support for MCP23008 I2C portexpander, Added support for Adafruit module |
wim | 30:033048611c01 | 13 | * 2014, v11: WH, Added support for native I2C controllers such as PCF21XX, Improved the _initCtrl() method to deal with differences between all supported controllers |
wim | 32:59c4b8f648d4 | 14 | * 2014, v12: WH, Added support for native I2C controller PCF2119 and native I2C/SPI controllers SSD1803, ST7036, added setContrast method (by JH1PJL) for supported devices (eg ST7032i) |
wim | 34:e5a0dcb43ecc | 15 | * 2014, v13: WH, Added support for controllers US2066/SSD1311 (OLED), added setUDCBlink() method for supported devices (eg SSD1803), fixed issue in setPower() |
wim | 34:e5a0dcb43ecc | 16 | * 2014, v14: WH, Added support for PT6314 (VFD), added setOrient() method for supported devices (eg SSD1803, US2066), added Double Height lines for supported devices, |
wim | 34:e5a0dcb43ecc | 17 | * added 16 UDCs for supported devices (eg PCF2103), moved UDC defines to TextLCD_UDC file, added TextLCD_Config.h for feature and footprint settings. |
wim | 35:311be6444a39 | 18 | * 2014, v15: WH, Added AC780 support, added I2C expander modules, fixed setBacklight() for inverted logic modules. Fixed bug in LCD_SPI_N define |
wim | 36:9f5f86dfd44a | 19 | * 2014, v16: WH, Added ST7070 and KS0073 support, added setIcon(), clrIcon() and setInvert() method for supported devices |
wim | 37:ce348c002929 | 20 | * 2015, v17: WH, Clean up low-level _writeCommand() and _writeData(), Added support for alternative fonttables (eg PCF21XX), Added ST7066_ACM controller for ACM1602 module |
simon | 1:ac48b187213c | 21 | * |
simon | 1:ac48b187213c | 22 | * Permission is hereby granted, free of charge, to any person obtaining a copy |
simon | 1:ac48b187213c | 23 | * of this software and associated documentation files (the "Software"), to deal |
simon | 1:ac48b187213c | 24 | * in the Software without restriction, including without limitation the rights |
simon | 1:ac48b187213c | 25 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
simon | 1:ac48b187213c | 26 | * copies of the Software, and to permit persons to whom the Software is |
simon | 1:ac48b187213c | 27 | * furnished to do so, subject to the following conditions: |
simon | 2:227356c7d12c | 28 | * |
simon | 1:ac48b187213c | 29 | * The above copyright notice and this permission notice shall be included in |
simon | 1:ac48b187213c | 30 | * all copies or substantial portions of the Software. |
simon | 2:227356c7d12c | 31 | * |
simon | 1:ac48b187213c | 32 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
simon | 1:ac48b187213c | 33 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
simon | 1:ac48b187213c | 34 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
simon | 1:ac48b187213c | 35 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
simon | 1:ac48b187213c | 36 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
simon | 1:ac48b187213c | 37 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
simon | 1:ac48b187213c | 38 | * THE SOFTWARE. |
simon | 1:ac48b187213c | 39 | */ |
simon | 1:ac48b187213c | 40 | |
simon | 1:ac48b187213c | 41 | #ifndef MBED_TEXTLCD_H |
simon | 1:ac48b187213c | 42 | #define MBED_TEXTLCD_H |
simon | 1:ac48b187213c | 43 | |
simon | 1:ac48b187213c | 44 | #include "mbed.h" |
wim | 34:e5a0dcb43ecc | 45 | #include "TextLCD_Config.h" |
wim | 34:e5a0dcb43ecc | 46 | #include "TextLCD_UDC.h" |
simon | 2:227356c7d12c | 47 | |
simon | 5:a53b3e2d6f1e | 48 | /** A TextLCD interface for driving 4-bit HD44780-based LCDs |
simon | 2:227356c7d12c | 49 | * |
wim | 34:e5a0dcb43ecc | 50 | * Currently supports 8x1, 8x2, 12x3, 12x4, 16x1, 16x2, 16x3, 16x4, 20x2, 20x4, 24x1, 24x2, 24x4, 40x2 and 40x4 panels. |
wim | 27:22d5086f6ba6 | 51 | * Interface options include direct mbed pins, I2C portexpander (PCF8474/PCF8574A or MCP23008) or SPI bus shiftregister (74595). |
wim | 34:e5a0dcb43ecc | 52 | * Supports some controllers with native I2C or SPI interface. Supports some controllers that provide internal DC/DC converters for VLCD or VLED. |
wim | 34:e5a0dcb43ecc | 53 | * Supports some controllers that feature programmable contrast control, powerdown, blinking UDCs and/or top/down orientation modes. |
simon | 2:227356c7d12c | 54 | * |
simon | 2:227356c7d12c | 55 | * @code |
simon | 2:227356c7d12c | 56 | * #include "mbed.h" |
simon | 2:227356c7d12c | 57 | * #include "TextLCD.h" |
simon | 5:a53b3e2d6f1e | 58 | * |
wim | 16:c276b75e6585 | 59 | * // I2C Communication |
wim | 16:c276b75e6585 | 60 | * I2C i2c_lcd(p28,p27); // SDA, SCL |
wim | 16:c276b75e6585 | 61 | * |
wim | 16:c276b75e6585 | 62 | * // SPI Communication |
wim | 16:c276b75e6585 | 63 | * SPI spi_lcd(p5, NC, p7); // MOSI, MISO, SCLK |
wim | 16:c276b75e6585 | 64 | * |
wim | 22:35742ec80c24 | 65 | * //TextLCD lcd(p15, p16, p17, p18, p19, p20); // RS, E, D4-D7, LCDType=LCD16x2, BL=NC, E2=NC, LCDTCtrl=HD44780 |
wim | 28:30fa94f7341c | 66 | * //TextLCD_SPI lcd(&spi_lcd, p8, TextLCD::LCD40x4); // SPI bus, 74595 expander, CS pin, LCD Type |
wim | 34:e5a0dcb43ecc | 67 | * TextLCD_I2C lcd(&i2c_lcd, 0x42, TextLCD::LCD20x4); // I2C bus, PCF8574 Slaveaddress, LCD Type |
wim | 34:e5a0dcb43ecc | 68 | * //TextLCD_I2C lcd(&i2c_lcd, 0x42, TextLCD::LCD16x2, TextLCD::WS0010); // I2C bus, PCF8574 Slaveaddress, LCD Type, Device Type (OLED) |
wim | 27:22d5086f6ba6 | 69 | * //TextLCD_SPI_N lcd(&spi_lcd, p8, p9); // SPI bus, CS pin, RS pin, LCDType=LCD16x2, BL=NC, LCDTCtrl=ST7032_3V3 |
wim | 34:e5a0dcb43ecc | 70 | * //TextLCD_I2C_N lcd(&i2c_lcd, ST7032_SA, TextLCD::LCD16x2, NC, TextLCD::ST7032_3V3); // I2C bus, Slaveaddress, LCD Type, BL=NC, LCDTCtrl=ST7032_3V3 |
wim | 34:e5a0dcb43ecc | 71 | * //TextLCD_SPI_N_3_24 lcd(&spi_lcd, p8, TextLCD::LCD20x4D, NC, TextLCD::SSD1803_3V3); // SPI bus, CS pin, LCDType=LCD20x4D, BL=NC, LCDTCtrl=SSD1803 |
wim | 34:e5a0dcb43ecc | 72 | * //TextLCD_SPI_N_3_24 lcd(&spi_lcd, p8, TextLCD::LCD20x2, NC, TextLCD::US2066_3V3); // SPI bus, CS pin, LCDType=LCD20x2, BL=NC, LCDTCtrl=US2066 (OLED) |
wim | 34:e5a0dcb43ecc | 73 | * |
simon | 2:227356c7d12c | 74 | * int main() { |
wim | 16:c276b75e6585 | 75 | * lcd.printf("Hello World!\n"); |
simon | 2:227356c7d12c | 76 | * } |
simon | 2:227356c7d12c | 77 | * @endcode |
simon | 2:227356c7d12c | 78 | */ |
wim | 8:03116f75b66e | 79 | |
wim | 34:e5a0dcb43ecc | 80 | //The TextLCD_Config.h file selects hardware interface options to reduce memory footprint |
wim | 34:e5a0dcb43ecc | 81 | //and provides Pin Defines for I2C PCF8574/PCF8574A or MCP23008 and SPI 74595 bus expander interfaces. |
wim | 34:e5a0dcb43ecc | 82 | //The LCD and serial portexpanders should be wired accordingly. |
wim | 32:59c4b8f648d4 | 83 | |
wim | 30:033048611c01 | 84 | /* LCD Type information on Rows, Columns and Variant. This information is encoded in |
wim | 30:033048611c01 | 85 | * an int and used for the LCDType enumerators in order to simplify code maintenance */ |
wim | 30:033048611c01 | 86 | // Columns encoded in b7..b0 |
wim | 30:033048611c01 | 87 | #define LCD_T_COL_MSK 0x000000FF |
wim | 32:59c4b8f648d4 | 88 | #define LCD_T_C6 0x00000006 |
wim | 30:033048611c01 | 89 | #define LCD_T_C8 0x00000008 |
wim | 30:033048611c01 | 90 | #define LCD_T_C10 0x0000000A |
wim | 30:033048611c01 | 91 | #define LCD_T_C12 0x0000000C |
wim | 30:033048611c01 | 92 | #define LCD_T_C16 0x00000010 |
wim | 30:033048611c01 | 93 | #define LCD_T_C20 0x00000014 |
wim | 30:033048611c01 | 94 | #define LCD_T_C24 0x00000018 |
wim | 30:033048611c01 | 95 | #define LCD_T_C32 0x00000020 |
wim | 30:033048611c01 | 96 | #define LCD_T_C40 0x00000028 |
wim | 30:033048611c01 | 97 | |
wim | 30:033048611c01 | 98 | // Rows encoded in b15..b8 |
wim | 30:033048611c01 | 99 | #define LCD_T_ROW_MSK 0x0000FF00 |
wim | 30:033048611c01 | 100 | #define LCD_T_R1 0x00000100 |
wim | 30:033048611c01 | 101 | #define LCD_T_R2 0x00000200 |
wim | 30:033048611c01 | 102 | #define LCD_T_R3 0x00000300 |
wim | 30:033048611c01 | 103 | #define LCD_T_R4 0x00000400 |
wim | 30:033048611c01 | 104 | |
wim | 30:033048611c01 | 105 | // Addressing mode encoded in b19..b16 |
wim | 30:033048611c01 | 106 | #define LCD_T_ADR_MSK 0x000F0000 |
wim | 32:59c4b8f648d4 | 107 | #define LCD_T_A 0x00000000 /*Mode A Default 1, 2 or 4 line display */ |
wim | 32:59c4b8f648d4 | 108 | #define LCD_T_B 0x00010000 /*Mode B, Alternate 8x2 (actually 16x1 display) */ |
wim | 32:59c4b8f648d4 | 109 | #define LCD_T_C 0x00020000 /*Mode C, Alternate 16x1 (actually 8x2 display) */ |
wim | 32:59c4b8f648d4 | 110 | #define LCD_T_D 0x00030000 /*Mode D, Alternate 3 or 4 line display (12x4, 20x4, 24x4) */ |
wim | 32:59c4b8f648d4 | 111 | #define LCD_T_D1 0x00040000 /*Mode D1, Alternate 3 out of 4 line display (12x3, 20x3, 24x3) */ |
wim | 32:59c4b8f648d4 | 112 | #define LCD_T_E 0x00050000 /*Mode E, 40x4 display (actually two 40x2) */ |
wim | 32:59c4b8f648d4 | 113 | #define LCD_T_F 0x00060000 /*Mode F, 16x3 display (actually 24x2) */ |
wim | 32:59c4b8f648d4 | 114 | #define LCD_T_G 0x00070000 /*Mode G, 16x3 display */ |
wim | 30:033048611c01 | 115 | |
wim | 30:033048611c01 | 116 | /* LCD Ctrl information on interface support and features. This information is encoded in |
wim | 30:033048611c01 | 117 | * an int and used for the LCDCtrl enumerators in order to simplify code maintenance */ |
wim | 30:033048611c01 | 118 | // Interface encoded in b31..b24 |
wim | 30:033048611c01 | 119 | #define LCD_C_BUS_MSK 0xFF000000 |
wim | 32:59c4b8f648d4 | 120 | #define LCD_C_PAR 0x01000000 /*Parallel 4 or 8 bit data, E pin, RS pin, RW=GND */ |
wim | 36:9f5f86dfd44a | 121 | #define LCD_C_SPI3_8 0x02000000 /*SPI 3 line (MOSI, SCL, CS pins), 8 bits (Count Command initiates Data transfer) */ |
wim | 36:9f5f86dfd44a | 122 | #define LCD_C_SPI3_9 0x04000000 /*SPI 3 line (MOSI, SCL, CS pins), 9 bits (RS + 8 Data) */ |
wim | 36:9f5f86dfd44a | 123 | #define LCD_C_SPI3_10 0x08000000 /*SPI 3 line (MOSI, SCL, CS pins), 10 bits (RS, RW + 8 Data) */ |
wim | 36:9f5f86dfd44a | 124 | #define LCD_C_SPI3_16 0x10000000 /*SPI 3 line (MOSI, SCL, CS pins), 16 bits (RS, RW + 8 Data) */ |
wim | 36:9f5f86dfd44a | 125 | #define LCD_C_SPI3_24 0x20000000 /*SPI 3 line (MOSI, SCL, CS pins), 24 bits (RS, RW + 8 Data) */ |
wim | 36:9f5f86dfd44a | 126 | #define LCD_C_SPI4 0x40000000 /*SPI 4 line (MOSI, SCL, CS, RS pin), RS pin + 8 Data */ |
wim | 36:9f5f86dfd44a | 127 | #define LCD_C_I2C 0x80000000 /*I2C (SDA, SCL pin), 8 control bits (Co, RS, RW) + 8 Data */ |
wim | 30:033048611c01 | 128 | // Features encoded in b23..b16 |
wim | 30:033048611c01 | 129 | #define LCD_C_FTR_MSK 0x00FF0000 |
wim | 30:033048611c01 | 130 | #define LCD_C_BST 0x00010000 /*Booster */ |
wim | 32:59c4b8f648d4 | 131 | #define LCD_C_CTR 0x00020000 /*Contrast Control */ |
wim | 32:59c4b8f648d4 | 132 | #define LCD_C_ICN 0x00040000 /*Icons */ |
wim | 32:59c4b8f648d4 | 133 | #define LCD_C_PDN 0x00080000 /*Power Down */ |
wim | 37:ce348c002929 | 134 | // Fonttable encoded in b15..b12 |
wim | 37:ce348c002929 | 135 | #define LCD_C_FNT_MSK 0x0000F000 |
wim | 37:ce348c002929 | 136 | #define LCD_C_FT0 0x00000000 /*Default */ |
wim | 37:ce348c002929 | 137 | #define LCD_C_FT1 0x00001000 /*Font1 */ |
wim | 37:ce348c002929 | 138 | #define LCD_C_FT2 0x00002000 /*Font2 */ |
wim | 32:59c4b8f648d4 | 139 | |
wim | 11:9ec02df863a1 | 140 | /** A TextLCD interface for driving 4-bit HD44780-based LCDs |
wim | 11:9ec02df863a1 | 141 | * |
wim | 33:900a94bc7585 | 142 | * @brief Currently supports 8x1, 8x2, 12x2, 12x3, 12x4, 16x1, 16x2, 16x3, 16x4, 20x2, 20x4, 24x2, 24x4, 40x2 and 40x4 panels |
wim | 37:ce348c002929 | 143 | * Interface options include direct mbed pins, I2C portexpander (PCF8474/PCF8574A or MCP23008) or |
wim | 37:ce348c002929 | 144 | * SPI bus shiftregister (74595) or native I2C or SPI interfaces for some supported devices. |
wim | 11:9ec02df863a1 | 145 | */ |
wim | 21:9eb628d9e164 | 146 | class TextLCD_Base : public Stream { |
wim | 37:ce348c002929 | 147 | //class TextLCD_Base { |
wim | 35:311be6444a39 | 148 | |
wim | 37:ce348c002929 | 149 | //Unfortunately the following #define selection breaks Doxygen !!! |
wim | 37:ce348c002929 | 150 | //Add it manually when you want to disable the Stream inheritance |
wim | 35:311be6444a39 | 151 | //#if (LCD_PRINTF == 1) |
wim | 35:311be6444a39 | 152 | //class TextLCD_Base : public Stream { |
wim | 35:311be6444a39 | 153 | //#else |
wim | 37:ce348c002929 | 154 | //class TextLCD_Base { |
wim | 35:311be6444a39 | 155 | //#endif |
wim | 35:311be6444a39 | 156 | |
simon | 1:ac48b187213c | 157 | public: |
simon | 1:ac48b187213c | 158 | |
simon | 2:227356c7d12c | 159 | /** LCD panel format */ |
wim | 33:900a94bc7585 | 160 | // The commented out types exist but have not yet been tested with the library |
simon | 1:ac48b187213c | 161 | enum LCDType { |
wim | 32:59c4b8f648d4 | 162 | // LCD6x1 = (LCD_T_A | LCD_T_C6 | LCD_T_R1), /**< 6x1 LCD panel */ |
wim | 32:59c4b8f648d4 | 163 | // LCD6x2 = (LCD_T_A | LCD_T_C6 | LCD_T_R2), /**< 6x2 LCD panel */ |
wim | 30:033048611c01 | 164 | LCD8x1 = (LCD_T_A | LCD_T_C8 | LCD_T_R1), /**< 8x1 LCD panel */ |
wim | 30:033048611c01 | 165 | LCD8x2 = (LCD_T_A | LCD_T_C8 | LCD_T_R2), /**< 8x2 LCD panel */ |
wim | 30:033048611c01 | 166 | LCD8x2B = (LCD_T_D | LCD_T_C8 | LCD_T_R2), /**< 8x2 LCD panel (actually 16x1) */ |
wim | 34:e5a0dcb43ecc | 167 | LCD12x1 = (LCD_T_A | LCD_T_C12 | LCD_T_R1), /**< 12x1 LCD panel */ |
wim | 30:033048611c01 | 168 | LCD12x2 = (LCD_T_A | LCD_T_C12 | LCD_T_R2), /**< 12x2 LCD panel */ |
wim | 36:9f5f86dfd44a | 169 | LCD12x3D = (LCD_T_D | LCD_T_C12 | LCD_T_R3), /**< 12x3 LCD panel, special mode PCF21XX, KS0073 */ |
wim | 36:9f5f86dfd44a | 170 | LCD12x3D1 = (LCD_T_D1 | LCD_T_C12 | LCD_T_R3), /**< 12x3 LCD panel, special mode PCF21XX, KS0073 */ |
wim | 32:59c4b8f648d4 | 171 | // LCD12x3G = (LCD_T_G | LCD_T_C12 | LCD_T_R3), /**< 12x3 LCD panel, special mode ST7036 */ |
wim | 30:033048611c01 | 172 | LCD12x4 = (LCD_T_A | LCD_T_C12 | LCD_T_R4), /**< 12x4 LCD panel */ |
wim | 36:9f5f86dfd44a | 173 | LCD12x4D = (LCD_T_B | LCD_T_C12 | LCD_T_R4), /**< 12x4 LCD panel, special mode PCF21XX, KS0073 */ |
wim | 30:033048611c01 | 174 | LCD16x1 = (LCD_T_A | LCD_T_C16 | LCD_T_R1), /**< 16x1 LCD panel */ |
wim | 30:033048611c01 | 175 | LCD16x1C = (LCD_T_C | LCD_T_C16 | LCD_T_R1), /**< 16x1 LCD panel (actually 8x2) */ |
wim | 30:033048611c01 | 176 | LCD16x2 = (LCD_T_A | LCD_T_C16 | LCD_T_R2), /**< 16x2 LCD panel (default) */ |
wim | 30:033048611c01 | 177 | // LCD16x2B = (LCD_T_B | LCD_T_C16 | LCD_T_R2), /**< 16x2 LCD panel, alternate addressing, wrong.. */ |
wim | 32:59c4b8f648d4 | 178 | LCD16x3D = (LCD_T_D | LCD_T_C16 | LCD_T_R3), /**< 16x3 LCD panel, special mode SSD1803 */ |
wim | 32:59c4b8f648d4 | 179 | // LCD16x3D1 = (LCD_T_D1 | LCD_T_C16 | LCD_T_R3), /**< 16x3 LCD panel, special mode SSD1803 */ |
wim | 32:59c4b8f648d4 | 180 | LCD16x3F = (LCD_T_F | LCD_T_C16 | LCD_T_R3), /**< 16x3 LCD panel (actually 24x2) */ |
wim | 32:59c4b8f648d4 | 181 | LCD16x3G = (LCD_T_G | LCD_T_C16 | LCD_T_R3), /**< 16x3 LCD panel, special mode ST7036 */ |
wim | 30:033048611c01 | 182 | LCD16x4 = (LCD_T_A | LCD_T_C16 | LCD_T_R4), /**< 16x4 LCD panel */ |
wim | 32:59c4b8f648d4 | 183 | // LCD16x4D = (LCD_T_D | LCD_T_C16 | LCD_T_R4), /**< 16x4 LCD panel, special mode SSD1803 */ |
wim | 34:e5a0dcb43ecc | 184 | LCD20x1 = (LCD_T_A | LCD_T_C20 | LCD_T_R1), /**< 20x1 LCD panel */ |
wim | 30:033048611c01 | 185 | LCD20x2 = (LCD_T_A | LCD_T_C20 | LCD_T_R2), /**< 20x2 LCD panel */ |
wim | 32:59c4b8f648d4 | 186 | // LCD20x3 = (LCD_T_A | LCD_T_C20 | LCD_T_R3), /**< 20x3 LCD panel */ |
wim | 32:59c4b8f648d4 | 187 | // LCD20x3D = (LCD_T_D | LCD_T_C20 | LCD_T_R3), /**< 20x3 LCD panel, special mode SSD1803 */ |
wim | 32:59c4b8f648d4 | 188 | // LCD20x3D1 = (LCD_T_D1 | LCD_T_C20 | LCD_T_R3), /**< 20x3 LCD panel, special mode SSD1803 */ |
wim | 30:033048611c01 | 189 | LCD20x4 = (LCD_T_A | LCD_T_C20 | LCD_T_R4), /**< 20x4 LCD panel */ |
wim | 32:59c4b8f648d4 | 190 | LCD20x4D = (LCD_T_D | LCD_T_C20 | LCD_T_R4), /**< 20x4 LCD panel, special mode SSD1803 */ |
wim | 30:033048611c01 | 191 | LCD24x1 = (LCD_T_A | LCD_T_C24 | LCD_T_R1), /**< 24x1 LCD panel */ |
wim | 30:033048611c01 | 192 | LCD24x2 = (LCD_T_A | LCD_T_C24 | LCD_T_R2), /**< 24x2 LCD panel */ |
wim | 32:59c4b8f648d4 | 193 | // LCD24x3D = (LCD_T_D | LCD_T_C24 | LCD_T_R3), /**< 24x3 LCD panel */ |
wim | 32:59c4b8f648d4 | 194 | // LCD24x3D1 = (LCD_T_D | LCD_T_C24 | LCD_T_R3), /**< 24x3 LCD panel */ |
wim | 30:033048611c01 | 195 | LCD24x4D = (LCD_T_D | LCD_T_C24 | LCD_T_R4), /**< 24x4 LCD panel, special mode KS0078 */ |
wim | 33:900a94bc7585 | 196 | // LCD32x1 = (LCD_T_A | LCD_T_C32 | LCD_T_R1), /**< 32x1 LCD panel */ |
wim | 33:900a94bc7585 | 197 | // LCD32x1C = (LCD_T_C | LCD_T_C32 | LCD_T_R1), /**< 32x1 LCD panel (actually 16x2) */ |
wim | 32:59c4b8f648d4 | 198 | // LCD32x2 = (LCD_T_A | LCD_T_C32 | LCD_T_R2), /**< 32x2 LCD panel */ |
wim | 32:59c4b8f648d4 | 199 | // LCD32x4 = (LCD_T_A | LCD_T_C32 | LCD_T_R4), /**< 32x4 LCD panel */ |
wim | 30:033048611c01 | 200 | // LCD40x1 = (LCD_T_A | LCD_T_C40 | LCD_T_R1), /**< 40x1 LCD panel */ |
wim | 33:900a94bc7585 | 201 | // LCD40x1C = (LCD_T_C | LCD_T_C40 | LCD_T_R1), /**< 40x1 LCD panel (actually 20x2) */ |
wim | 30:033048611c01 | 202 | LCD40x2 = (LCD_T_A | LCD_T_C40 | LCD_T_R2), /**< 40x2 LCD panel */ |
wim | 30:033048611c01 | 203 | LCD40x4 = (LCD_T_E | LCD_T_C40 | LCD_T_R4) /**< 40x4 LCD panel, Two controller version */ |
wim | 30:033048611c01 | 204 | }; |
wim | 30:033048611c01 | 205 | |
wim | 30:033048611c01 | 206 | |
wim | 30:033048611c01 | 207 | /** LCD Controller Device */ |
wim | 30:033048611c01 | 208 | enum LCDCtrl { |
wim | 37:ce348c002929 | 209 | HD44780 = 0 | LCD_C_PAR, /**< HD44780 or full equivalent (default) */ |
wim | 37:ce348c002929 | 210 | AC780 = 1 | (LCD_C_PAR | LCD_C_SPI4 | LCD_C_I2C | LCD_C_PDN), /**< AC780/KS0066i 4/8 bit, SPI, I2C */ |
wim | 37:ce348c002929 | 211 | AIP31068 = 2 | (LCD_C_SPI3_9 | LCD_C_I2C | LCD_C_BST), /**< AIP31068 I2C, SPI3 */ |
wim | 37:ce348c002929 | 212 | KS0073 = 3 | (LCD_C_PAR | LCD_C_SPI3_24 | LCD_C_PDN), /**< KS0073 4/8 bit, SPI3 */ |
wim | 37:ce348c002929 | 213 | KS0078 = 4 | (LCD_C_PAR | LCD_C_SPI3_24 | LCD_C_PDN), /**< KS0078 24x4 support, 4/8 bit, SPI3 */ |
wim | 37:ce348c002929 | 214 | PCF2103_3V3 = 5 | (LCD_C_PAR | LCD_C_I2C), /**< PCF2103 3V3 no Booster, 4/8 bit, I2C */ |
wim | 37:ce348c002929 | 215 | PCF2113_3V3 = 6 | (LCD_C_PAR | LCD_C_I2C | LCD_C_BST | LCD_C_CTR), /**< PCF2113 3V3 with Booster, 4/8 bit, I2C */ |
wim | 37:ce348c002929 | 216 | PCF2116_3V3 = 7 | (LCD_C_PAR | LCD_C_I2C | LCD_C_BST), /**< PCF2116 3V3 with Booster, 4/8 bit, I2C */ |
wim | 37:ce348c002929 | 217 | PCF2116_5V = 8 | (LCD_C_PAR | LCD_C_I2C), /**< PCF2116 5V no Booster, 4/8 bit, I2C */ |
wim | 37:ce348c002929 | 218 | PCF2116C_5V = 9 | (LCD_C_PAR | LCD_C_I2C | LCD_C_BST) | LCD_C_FT1, /**< PCF2116C 3V3 with Booster, 4/8 bit, I2C */ |
wim | 37:ce348c002929 | 219 | PCF2119_3V3 = 10 | (LCD_C_PAR | LCD_C_I2C | LCD_C_BST | LCD_C_CTR), /**< PCF2119 3V3 with Booster, 4/8 bit, I2C */ |
wim | 37:ce348c002929 | 220 | // PCF2119C_3V3 = 11 | (LCD_C_PAR | LCD_C_I2C | LCD_C_BST | LCD_C_CTR), LCD_C_FT1, /**< PCF2119K 3V3 with Booster, 4/8 bit, I2C */ |
wim | 37:ce348c002929 | 221 | // PCF2119_5V = 12 | (LCD_C_PAR | LCD_C_I2C), /**< PCF2119 5V no Booster, 4/8 bit, I2C */ |
wim | 37:ce348c002929 | 222 | PT6314 = 13 | (LCD_C_PAR | LCD_C_SPI3_16 | LCD_C_CTR), /**< PT6314 VFD, 4/8 bit, SPI3 */ |
wim | 37:ce348c002929 | 223 | SSD1803_3V3 = 14 | (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 */ |
wim | 37:ce348c002929 | 224 | // 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 */ |
wim | 37:ce348c002929 | 225 | ST7032_3V3 = 16 | (LCD_C_PAR | LCD_C_SPI4 | LCD_C_I2C | LCD_C_BST | LCD_C_CTR), /**< ST7032 3V3 with Booster, 4/8 bit, SPI4, I2C */ |
wim | 37:ce348c002929 | 226 | ST7032_5V = 17 | (LCD_C_PAR | LCD_C_SPI4 | LCD_C_I2C | LCD_C_CTR), /**< ST7032 5V no Booster, 4/8 bit, SPI4, I2C */ |
wim | 37:ce348c002929 | 227 | ST7036_3V3 = 18 | (LCD_C_PAR | LCD_C_SPI4 | LCD_C_I2C | LCD_C_BST | LCD_C_CTR), /**< ST7036 3V3 with Booster, 4/8 bit, SPI4, I2C */ |
wim | 37:ce348c002929 | 228 | ST7036_5V = 19 | (LCD_C_PAR | LCD_C_SPI4 | LCD_C_I2C | LCD_C_BST | LCD_C_CTR), /**< ST7036 5V no Booster, 4/8 bit, SPI4, I2C */ |
wim | 37:ce348c002929 | 229 | ST7066_ACM = 20 | (LCD_C_PAR | LCD_C_I2C), /**< ST7066 4/8 bit, I2C on ACM1602 using a PIC */ |
wim | 37:ce348c002929 | 230 | ST7070 = 21 | (LCD_C_PAR | LCD_C_SPI3_8 | LCD_C_SPI4), /**< ST7070 4/8 bit, SPI3 */ |
wim | 37:ce348c002929 | 231 | US2066_3V3 = 22 | (LCD_C_PAR | LCD_C_SPI3_24 | LCD_C_I2C | LCD_C_CTR | LCD_C_PDN), /**< US2066/SSD1311 3V3, 4/8 bit, I2C, SPI3 */ |
wim | 37:ce348c002929 | 232 | WS0010 = 23 | (LCD_C_PAR | LCD_C_SPI3_10 | LCD_C_PDN) /**< WS0010/RS0010 OLED Controller, 4/8 bit, SPI3 */ |
wim | 37:ce348c002929 | 233 | // WS0012 = 24 | (LCD_C_PAR | LCD_C_SPI3_10 | LCD_C_I2C | LCD_C_PDN), /**< WS0012 4/8 bit, SPI, I2C */ |
wim | 37:ce348c002929 | 234 | |
wim | 30:033048611c01 | 235 | }; |
wim | 30:033048611c01 | 236 | |
wim | 30:033048611c01 | 237 | |
wim | 10:dd9b3a696acd | 238 | /** LCD Cursor control */ |
wim | 10:dd9b3a696acd | 239 | enum LCDCursor { |
wim | 17:652ab113bc2e | 240 | CurOff_BlkOff = 0x00, /**< Cursor Off, Blinking Char Off */ |
wim | 17:652ab113bc2e | 241 | CurOn_BlkOff = 0x02, /**< Cursor On, Blinking Char Off */ |
wim | 17:652ab113bc2e | 242 | CurOff_BlkOn = 0x01, /**< Cursor Off, Blinking Char On */ |
wim | 17:652ab113bc2e | 243 | CurOn_BlkOn = 0x03 /**< Cursor On, Blinking Char On */ |
wim | 17:652ab113bc2e | 244 | }; |
wim | 17:652ab113bc2e | 245 | |
wim | 17:652ab113bc2e | 246 | /** LCD Display control */ |
wim | 17:652ab113bc2e | 247 | enum LCDMode { |
wim | 17:652ab113bc2e | 248 | DispOff = 0x00, /**< Display Off */ |
wim | 17:652ab113bc2e | 249 | DispOn = 0x04 /**< Display On */ |
wim | 10:dd9b3a696acd | 250 | }; |
wim | 10:dd9b3a696acd | 251 | |
wim | 20:e0da005a777f | 252 | /** LCD Backlight control */ |
wim | 20:e0da005a777f | 253 | enum LCDBacklight { |
wim | 20:e0da005a777f | 254 | LightOff, /**< Backlight Off */ |
wim | 20:e0da005a777f | 255 | LightOn /**< Backlight On */ |
wim | 20:e0da005a777f | 256 | }; |
wim | 10:dd9b3a696acd | 257 | |
wim | 33:900a94bc7585 | 258 | /** LCD Blink control (UDC), supported for some Controllers */ |
wim | 33:900a94bc7585 | 259 | enum LCDBlink { |
wim | 33:900a94bc7585 | 260 | BlinkOff, /**< Blink Off */ |
wim | 33:900a94bc7585 | 261 | BlinkOn /**< Blink On */ |
wim | 33:900a94bc7585 | 262 | }; |
wim | 33:900a94bc7585 | 263 | |
wim | 33:900a94bc7585 | 264 | /** LCD Orientation control, supported for some Controllers */ |
wim | 33:900a94bc7585 | 265 | enum LCDOrient { |
wim | 33:900a94bc7585 | 266 | Top, /**< Top view */ |
wim | 33:900a94bc7585 | 267 | Bottom /**< Upside down view */ |
wim | 33:900a94bc7585 | 268 | }; |
wim | 33:900a94bc7585 | 269 | |
wim | 34:e5a0dcb43ecc | 270 | /** LCD BigFont control, supported for some Controllers */ |
wim | 34:e5a0dcb43ecc | 271 | enum LCDBigFont { |
wim | 34:e5a0dcb43ecc | 272 | None, /**< no lines */ |
wim | 34:e5a0dcb43ecc | 273 | TopLine, /**< 1+2 line */ |
wim | 34:e5a0dcb43ecc | 274 | CenterLine, /**< 2+3 line */ |
wim | 34:e5a0dcb43ecc | 275 | BottomLine, /**< 2+3 line or 3+4 line */ |
wim | 34:e5a0dcb43ecc | 276 | TopBottomLine /**< 1+2 line and 3+4 line */ |
wim | 34:e5a0dcb43ecc | 277 | }; |
wim | 33:900a94bc7585 | 278 | |
wim | 34:e5a0dcb43ecc | 279 | |
wim | 37:ce348c002929 | 280 | /** Convert ASCII character code to the LCD fonttable code |
wim | 37:ce348c002929 | 281 | * |
wim | 37:ce348c002929 | 282 | * @param c The character to write to the display |
wim | 37:ce348c002929 | 283 | * @return The character code for the specific fonttable of the controller |
wim | 37:ce348c002929 | 284 | */ |
wim | 37:ce348c002929 | 285 | int ASCII_2_LCD (int c); |
wim | 37:ce348c002929 | 286 | |
wim | 37:ce348c002929 | 287 | |
wim | 34:e5a0dcb43ecc | 288 | #if(LCD_PRINTF != 1) |
wim | 34:e5a0dcb43ecc | 289 | /** Write a character to the LCD |
wim | 34:e5a0dcb43ecc | 290 | * |
wim | 34:e5a0dcb43ecc | 291 | * @param c The character to write to the display |
wim | 34:e5a0dcb43ecc | 292 | */ |
wim | 34:e5a0dcb43ecc | 293 | int putc(int c); |
wim | 34:e5a0dcb43ecc | 294 | |
wim | 34:e5a0dcb43ecc | 295 | /** Write a raw string to the LCD |
wim | 34:e5a0dcb43ecc | 296 | * |
wim | 34:e5a0dcb43ecc | 297 | * @param string text, may be followed by variables to emulate formatting the string. |
wim | 34:e5a0dcb43ecc | 298 | * However, printf formatting is NOT supported and variables will be ignored! |
wim | 34:e5a0dcb43ecc | 299 | */ |
wim | 34:e5a0dcb43ecc | 300 | int printf(const char* text, ...); |
wim | 34:e5a0dcb43ecc | 301 | #else |
simon | 2:227356c7d12c | 302 | #if DOXYGEN_ONLY |
simon | 2:227356c7d12c | 303 | /** Write a character to the LCD |
simon | 2:227356c7d12c | 304 | * |
simon | 2:227356c7d12c | 305 | * @param c The character to write to the display |
simon | 2:227356c7d12c | 306 | */ |
simon | 2:227356c7d12c | 307 | int putc(int c); |
simon | 2:227356c7d12c | 308 | |
wim | 34:e5a0dcb43ecc | 309 | /** Write a formatted string to the LCD |
simon | 2:227356c7d12c | 310 | * |
simon | 2:227356c7d12c | 311 | * @param format A printf-style format string, followed by the |
wim | 34:e5a0dcb43ecc | 312 | * variables to use in formatting the string. |
simon | 2:227356c7d12c | 313 | */ |
wim | 34:e5a0dcb43ecc | 314 | int printf(const char* format, ...); |
simon | 2:227356c7d12c | 315 | #endif |
wim | 34:e5a0dcb43ecc | 316 | |
wim | 34:e5a0dcb43ecc | 317 | #endif |
simon | 2:227356c7d12c | 318 | |
wim | 29:a3663151aa65 | 319 | /** Locate cursor to a screen column and row |
simon | 2:227356c7d12c | 320 | * |
simon | 2:227356c7d12c | 321 | * @param column The horizontal position from the left, indexed from 0 |
simon | 2:227356c7d12c | 322 | * @param row The vertical position from the top, indexed from 0 |
simon | 2:227356c7d12c | 323 | */ |
simon | 1:ac48b187213c | 324 | void locate(int column, int row); |
simon | 2:227356c7d12c | 325 | |
wim | 10:dd9b3a696acd | 326 | /** Return the memoryaddress of screen column and row location |
wim | 10:dd9b3a696acd | 327 | * |
wim | 10:dd9b3a696acd | 328 | * @param column The horizontal position from the left, indexed from 0 |
wim | 10:dd9b3a696acd | 329 | * @param row The vertical position from the top, indexed from 0 |
wim | 36:9f5f86dfd44a | 330 | * @return The memoryaddress of screen column and row location |
wim | 10:dd9b3a696acd | 331 | */ |
wim | 30:033048611c01 | 332 | int getAddress(int column, int row); |
wim | 10:dd9b3a696acd | 333 | |
wim | 10:dd9b3a696acd | 334 | /** Set the memoryaddress of screen column and row location |
wim | 10:dd9b3a696acd | 335 | * |
wim | 10:dd9b3a696acd | 336 | * @param column The horizontal position from the left, indexed from 0 |
wim | 10:dd9b3a696acd | 337 | * @param row The vertical position from the top, indexed from 0 |
wim | 10:dd9b3a696acd | 338 | */ |
wim | 9:0893d986e717 | 339 | void setAddress(int column, int row); |
wim | 9:0893d986e717 | 340 | |
wim | 22:35742ec80c24 | 341 | /** Clear the screen and locate to 0,0 |
wim | 22:35742ec80c24 | 342 | */ |
simon | 1:ac48b187213c | 343 | void cls(); |
simon | 2:227356c7d12c | 344 | |
wim | 10:dd9b3a696acd | 345 | /** Return the number of rows |
wim | 10:dd9b3a696acd | 346 | * |
wim | 36:9f5f86dfd44a | 347 | * @return The number of rows |
wim | 10:dd9b3a696acd | 348 | */ |
simon | 1:ac48b187213c | 349 | int rows(); |
wim | 10:dd9b3a696acd | 350 | |
wim | 10:dd9b3a696acd | 351 | /** Return the number of columns |
wim | 10:dd9b3a696acd | 352 | * |
wim | 36:9f5f86dfd44a | 353 | * @return The number of columns |
wim | 10:dd9b3a696acd | 354 | */ |
wim | 10:dd9b3a696acd | 355 | int columns(); |
simon | 2:227356c7d12c | 356 | |
wim | 11:9ec02df863a1 | 357 | /** Set the Cursormode |
wim | 11:9ec02df863a1 | 358 | * |
wim | 17:652ab113bc2e | 359 | * @param cursorMode The Cursor mode (CurOff_BlkOff, CurOn_BlkOff, CurOff_BlkOn, CurOn_BlkOn) |
wim | 11:9ec02df863a1 | 360 | */ |
wim | 17:652ab113bc2e | 361 | void setCursor(LCDCursor cursorMode); |
wim | 17:652ab113bc2e | 362 | |
wim | 17:652ab113bc2e | 363 | /** Set the Displaymode |
wim | 17:652ab113bc2e | 364 | * |
wim | 17:652ab113bc2e | 365 | * @param displayMode The Display mode (DispOff, DispOn) |
wim | 17:652ab113bc2e | 366 | */ |
wim | 21:9eb628d9e164 | 367 | void setMode(LCDMode displayMode); |
wim | 11:9ec02df863a1 | 368 | |
wim | 20:e0da005a777f | 369 | /** Set the Backlight mode |
wim | 20:e0da005a777f | 370 | * |
wim | 21:9eb628d9e164 | 371 | * @param backlightMode The Backlight mode (LightOff, LightOn) |
wim | 20:e0da005a777f | 372 | */ |
wim | 21:9eb628d9e164 | 373 | void setBacklight(LCDBacklight backlightMode); |
wim | 20:e0da005a777f | 374 | |
wim | 33:900a94bc7585 | 375 | /** Set User Defined Characters (UDC) |
wim | 11:9ec02df863a1 | 376 | * |
wim | 34:e5a0dcb43ecc | 377 | * @param unsigned char c The Index of the UDC (0..7) for HD44780 clones and (0..15) for some more advanced controllers |
wim | 34:e5a0dcb43ecc | 378 | * @param char *udc_data The bitpatterns for the UDC (8 bytes of 5 significant bits for bitpattern and 3 bits for blinkmode (advanced types)) |
wim | 11:9ec02df863a1 | 379 | */ |
wim | 11:9ec02df863a1 | 380 | void setUDC(unsigned char c, char *udc_data); |
wim | 11:9ec02df863a1 | 381 | |
wim | 36:9f5f86dfd44a | 382 | /** Set UDC Blink and Icon blink |
wim | 33:900a94bc7585 | 383 | * setUDCBlink method is supported by some compatible devices (eg SSD1803) |
wim | 33:900a94bc7585 | 384 | * |
wim | 33:900a94bc7585 | 385 | * @param blinkMode The Blink mode (BlinkOff, BlinkOn) |
wim | 33:900a94bc7585 | 386 | */ |
wim | 33:900a94bc7585 | 387 | void setUDCBlink(LCDBlink blinkMode); |
wim | 33:900a94bc7585 | 388 | |
wim | 32:59c4b8f648d4 | 389 | /** Set Contrast |
wim | 32:59c4b8f648d4 | 390 | * setContrast method is supported by some compatible devices (eg ST7032i) that have onboard LCD voltage generation |
wim | 32:59c4b8f648d4 | 391 | * Code imported from fork by JH1PJL |
wim | 32:59c4b8f648d4 | 392 | * |
wim | 32:59c4b8f648d4 | 393 | * @param unsigned char c contrast data (6 significant bits, valid range 0..63, Value 0 will disable the Vgen) |
wim | 32:59c4b8f648d4 | 394 | * @return none |
wim | 32:59c4b8f648d4 | 395 | */ |
wim | 32:59c4b8f648d4 | 396 | void setContrast(unsigned char c = LCD_DEF_CONTRAST); |
wim | 32:59c4b8f648d4 | 397 | |
wim | 32:59c4b8f648d4 | 398 | /** Set Power |
wim | 32:59c4b8f648d4 | 399 | * setPower method is supported by some compatible devices (eg SSD1803) that have power down modes |
wim | 32:59c4b8f648d4 | 400 | * |
wim | 32:59c4b8f648d4 | 401 | * @param bool powerOn Power on/off |
wim | 32:59c4b8f648d4 | 402 | * @return none |
wim | 32:59c4b8f648d4 | 403 | */ |
wim | 32:59c4b8f648d4 | 404 | void setPower(bool powerOn = true); |
wim | 32:59c4b8f648d4 | 405 | |
wim | 33:900a94bc7585 | 406 | /** Set Orient |
wim | 33:900a94bc7585 | 407 | * setOrient method is supported by some compatible devices (eg SSD1803, US2066) that have top/bottom view modes |
wim | 33:900a94bc7585 | 408 | * |
wim | 33:900a94bc7585 | 409 | * @param LCDOrient orient Orientation |
wim | 33:900a94bc7585 | 410 | * @return none |
wim | 33:900a94bc7585 | 411 | */ |
wim | 33:900a94bc7585 | 412 | void setOrient(LCDOrient orient = Top); |
wim | 33:900a94bc7585 | 413 | |
wim | 34:e5a0dcb43ecc | 414 | /** Set Big Font |
wim | 34:e5a0dcb43ecc | 415 | * setBigFont method is supported by some compatible devices (eg SSD1803, US2066) |
wim | 34:e5a0dcb43ecc | 416 | * |
wim | 34:e5a0dcb43ecc | 417 | * @param lines The selected Big Font lines (None, TopLine, CenterLine, BottomLine, TopBottomLine) |
wim | 34:e5a0dcb43ecc | 418 | * Double height characters can be shown on lines 1+2, 2+3, 3+4 or 1+2 and 3+4 |
wim | 34:e5a0dcb43ecc | 419 | * Valid double height lines depend on the LCDs number of rows. |
wim | 34:e5a0dcb43ecc | 420 | */ |
wim | 34:e5a0dcb43ecc | 421 | void setBigFont(LCDBigFont lines); |
wim | 32:59c4b8f648d4 | 422 | |
wim | 36:9f5f86dfd44a | 423 | /** Set Icons |
wim | 36:9f5f86dfd44a | 424 | * |
wim | 36:9f5f86dfd44a | 425 | * @param unsigned char idx The Index of the icon pattern (0..15) for KS0073 and similar controllers |
wim | 36:9f5f86dfd44a | 426 | * and Index (0..31) for PCF2103 and similar controllers |
wim | 36:9f5f86dfd44a | 427 | * @param unsigned char data The bitpattern for the icons (6 lsb for KS0073 bitpattern (5 lsb for KS0078) and 2 msb for blinkmode) |
wim | 36:9f5f86dfd44a | 428 | * The bitpattern for the PCF2103 icons is 5 lsb (UDC 0..2) and 5 lsb for blinkmode (UDC 4..6) |
wim | 36:9f5f86dfd44a | 429 | */ |
wim | 36:9f5f86dfd44a | 430 | void setIcon(unsigned char idx, unsigned char data); |
wim | 36:9f5f86dfd44a | 431 | |
wim | 36:9f5f86dfd44a | 432 | /** Clear Icons |
wim | 36:9f5f86dfd44a | 433 | * |
wim | 36:9f5f86dfd44a | 434 | * @param none |
wim | 36:9f5f86dfd44a | 435 | * @return none |
wim | 36:9f5f86dfd44a | 436 | */ |
wim | 36:9f5f86dfd44a | 437 | //@TODO Add support for 40x4 dual controller |
wim | 36:9f5f86dfd44a | 438 | void clrIcon(); |
wim | 36:9f5f86dfd44a | 439 | |
wim | 36:9f5f86dfd44a | 440 | /** Set Invert |
wim | 36:9f5f86dfd44a | 441 | * setInvert method is supported by some compatible devices (eg KS0073) to swap between black and white |
wim | 36:9f5f86dfd44a | 442 | * |
wim | 36:9f5f86dfd44a | 443 | * @param bool invertOn Invert on/off |
wim | 36:9f5f86dfd44a | 444 | * @return none |
wim | 36:9f5f86dfd44a | 445 | */ |
wim | 36:9f5f86dfd44a | 446 | //@TODO Add support for 40x4 dual controller |
wim | 36:9f5f86dfd44a | 447 | void setInvert(bool invertOn); |
wim | 36:9f5f86dfd44a | 448 | |
simon | 1:ac48b187213c | 449 | protected: |
wim | 13:24506ba22480 | 450 | |
wim | 21:9eb628d9e164 | 451 | /** LCD controller select, mainly used for LCD40x4 |
wim | 21:9eb628d9e164 | 452 | */ |
wim | 19:c747b9e2e7b8 | 453 | enum _LCDCtrl_Idx { |
wim | 15:b70ebfffb258 | 454 | _LCDCtrl_0, /*< Primary */ |
wim | 15:b70ebfffb258 | 455 | _LCDCtrl_1, /*< Secondary */ |
wim | 15:b70ebfffb258 | 456 | }; |
wim | 21:9eb628d9e164 | 457 | |
wim | 37:ce348c002929 | 458 | /** LCD Datalength control to select between 4 or 8 bit data/commands, mainly used for native Serial interface */ |
wim | 36:9f5f86dfd44a | 459 | enum _LCDDatalength { |
wim | 36:9f5f86dfd44a | 460 | _LCD_DL_4 = 0x00, /**< Datalength 4 bit */ |
wim | 36:9f5f86dfd44a | 461 | _LCD_DL_8 = 0x10 /**< Datalength 8 bit */ |
wim | 36:9f5f86dfd44a | 462 | }; |
wim | 36:9f5f86dfd44a | 463 | |
wim | 21:9eb628d9e164 | 464 | /** Create a TextLCD_Base interface |
wim | 21:9eb628d9e164 | 465 | * @brief Base class, can not be instantiated |
wim | 21:9eb628d9e164 | 466 | * |
wim | 21:9eb628d9e164 | 467 | * @param type Sets the panel size/addressing mode (default = LCD16x2) |
wim | 21:9eb628d9e164 | 468 | * @param ctrl LCD controller (default = HD44780) |
wim | 21:9eb628d9e164 | 469 | */ |
wim | 21:9eb628d9e164 | 470 | TextLCD_Base(LCDType type = LCD16x2, LCDCtrl ctrl = HD44780); |
wim | 15:b70ebfffb258 | 471 | |
simon | 1:ac48b187213c | 472 | // Stream implementation functions |
simon | 1:ac48b187213c | 473 | virtual int _putc(int value); |
simon | 1:ac48b187213c | 474 | virtual int _getc(); |
simon | 1:ac48b187213c | 475 | |
wim | 36:9f5f86dfd44a | 476 | /** Medium level initialisation method for LCD controller |
wim | 36:9f5f86dfd44a | 477 | * @param _LCDDatalength dl sets the datalength of data/commands |
wim | 36:9f5f86dfd44a | 478 | * @return none |
wim | 21:9eb628d9e164 | 479 | */ |
wim | 36:9f5f86dfd44a | 480 | void _init(_LCDDatalength dl = _LCD_DL_4); |
wim | 29:a3663151aa65 | 481 | |
wim | 29:a3663151aa65 | 482 | /** Low level initialisation method for LCD controller |
wim | 36:9f5f86dfd44a | 483 | * Set number of lines, fonttype, no cursor etc |
wim | 36:9f5f86dfd44a | 484 | * The controller is accessed in 4-bit parallel mode either directly via mbed pins or through I2C or SPI expander. |
wim | 36:9f5f86dfd44a | 485 | * Some controllers also support native I2C or SPI interfaces. |
wim | 36:9f5f86dfd44a | 486 | * |
wim | 36:9f5f86dfd44a | 487 | * @param _LCDDatalength dl sets the 4 or 8 bit datalength of data/commands. Required for some native serial modes. |
wim | 36:9f5f86dfd44a | 488 | * @return none |
wim | 29:a3663151aa65 | 489 | */ |
wim | 36:9f5f86dfd44a | 490 | void _initCtrl(_LCDDatalength dl = _LCD_DL_4); |
wim | 29:a3663151aa65 | 491 | |
wim | 29:a3663151aa65 | 492 | /** Low level character address set method |
wim | 29:a3663151aa65 | 493 | */ |
wim | 13:24506ba22480 | 494 | int _address(int column, int row); |
wim | 29:a3663151aa65 | 495 | |
wim | 29:a3663151aa65 | 496 | /** Low level cursor enable or disable method |
wim | 29:a3663151aa65 | 497 | */ |
wim | 21:9eb628d9e164 | 498 | void _setCursor(LCDCursor show); |
wim | 29:a3663151aa65 | 499 | |
wim | 29:a3663151aa65 | 500 | /** Low level method to store user defined characters for current controller |
wim | 34:e5a0dcb43ecc | 501 | * |
wim | 34:e5a0dcb43ecc | 502 | * @param unsigned char c The Index of the UDC (0..7) for HD44780 clones and (0..15) for some more advanced controllers |
wim | 34:e5a0dcb43ecc | 503 | * @param char *udc_data The bitpatterns for the UDC (8 bytes of 5 significant bits) |
wim | 29:a3663151aa65 | 504 | */ |
wim | 17:652ab113bc2e | 505 | void _setUDC(unsigned char c, char *udc_data); |
wim | 29:a3663151aa65 | 506 | |
wim | 29:a3663151aa65 | 507 | /** Low level method to restore the cursortype and display mode for current controller |
wim | 29:a3663151aa65 | 508 | */ |
wim | 21:9eb628d9e164 | 509 | void _setCursorAndDisplayMode(LCDMode displayMode, LCDCursor cursorType); |
wim | 13:24506ba22480 | 510 | |
wim | 29:a3663151aa65 | 511 | /** Low level nibble write operation to LCD controller (serial or parallel) |
wim | 21:9eb628d9e164 | 512 | */ |
wim | 17:652ab113bc2e | 513 | void _writeNibble(int value); |
wim | 29:a3663151aa65 | 514 | |
wim | 29:a3663151aa65 | 515 | /** Low level command byte write operation to LCD controller. |
wim | 29:a3663151aa65 | 516 | * Methods resets the RS bit and provides the required timing for the command. |
wim | 29:a3663151aa65 | 517 | */ |
wim | 15:b70ebfffb258 | 518 | void _writeCommand(int command); |
wim | 33:900a94bc7585 | 519 | |
wim | 29:a3663151aa65 | 520 | /** Low level data byte write operation to LCD controller (serial or parallel). |
wim | 29:a3663151aa65 | 521 | * Methods sets the RS bit and provides the required timing for the data. |
wim | 29:a3663151aa65 | 522 | */ |
wim | 15:b70ebfffb258 | 523 | void _writeData(int data); |
wim | 15:b70ebfffb258 | 524 | |
wim | 29:a3663151aa65 | 525 | /** Pure Virtual Low level writes to LCD Bus (serial or parallel) |
wim | 29:a3663151aa65 | 526 | * Set the Enable pin. |
wim | 29:a3663151aa65 | 527 | */ |
wim | 29:a3663151aa65 | 528 | virtual void _setEnable(bool value) = 0; |
wim | 29:a3663151aa65 | 529 | |
wim | 21:9eb628d9e164 | 530 | /** Pure Virtual Low level writes to LCD Bus (serial or parallel) |
wim | 29:a3663151aa65 | 531 | * Set the RS pin ( 0 = Command, 1 = Data). |
wim | 29:a3663151aa65 | 532 | */ |
wim | 21:9eb628d9e164 | 533 | virtual void _setRS(bool value) = 0; |
wim | 29:a3663151aa65 | 534 | |
wim | 29:a3663151aa65 | 535 | /** Pure Virtual Low level writes to LCD Bus (serial or parallel) |
wim | 29:a3663151aa65 | 536 | * Set the BL pin (0 = Backlight Off, 1 = Backlight On). |
wim | 29:a3663151aa65 | 537 | */ |
wim | 21:9eb628d9e164 | 538 | virtual void _setBL(bool value) = 0; |
wim | 29:a3663151aa65 | 539 | |
wim | 29:a3663151aa65 | 540 | /** Pure Virtual Low level writes to LCD Bus (serial or parallel) |
wim | 29:a3663151aa65 | 541 | * Set the databus value (4 bit). |
wim | 29:a3663151aa65 | 542 | */ |
wim | 21:9eb628d9e164 | 543 | virtual void _setData(int value) = 0; |
wim | 13:24506ba22480 | 544 | |
wim | 29:a3663151aa65 | 545 | /** Low level byte write operation to LCD controller (serial or parallel) |
wim | 29:a3663151aa65 | 546 | * Depending on the RS pin this byte will be interpreted as data or command |
wim | 29:a3663151aa65 | 547 | */ |
wim | 29:a3663151aa65 | 548 | virtual void _writeByte(int value); |
wim | 33:900a94bc7585 | 549 | |
wim | 13:24506ba22480 | 550 | //Display type |
wim | 37:ce348c002929 | 551 | LCDType _type; // Display type |
wim | 37:ce348c002929 | 552 | int _nr_cols; |
wim | 30:033048611c01 | 553 | int _nr_rows; |
wim | 37:ce348c002929 | 554 | int _addr_mode; // Addressing mode of LCDType, defines relation between display row,col and controller memory address |
wim | 37:ce348c002929 | 555 | |
wim | 21:9eb628d9e164 | 556 | //Display mode |
wim | 17:652ab113bc2e | 557 | LCDMode _currentMode; |
wim | 17:652ab113bc2e | 558 | |
wim | 19:c747b9e2e7b8 | 559 | //Controller type |
wim | 37:ce348c002929 | 560 | LCDCtrl _ctrl; // Controller type |
wim | 37:ce348c002929 | 561 | int _font; // ASCII character fonttable |
wim | 37:ce348c002929 | 562 | |
wim | 15:b70ebfffb258 | 563 | //Controller select, mainly used for LCD40x4 |
wim | 19:c747b9e2e7b8 | 564 | _LCDCtrl_Idx _ctrl_idx; |
wim | 15:b70ebfffb258 | 565 | |
wim | 13:24506ba22480 | 566 | // Cursor |
simon | 1:ac48b187213c | 567 | int _column; |
simon | 1:ac48b187213c | 568 | int _row; |
wim | 32:59c4b8f648d4 | 569 | LCDCursor _currentCursor; |
wim | 32:59c4b8f648d4 | 570 | |
wim | 36:9f5f86dfd44a | 571 | // Function modes saved to allow switch between Instruction sets after initialisation time |
wim | 36:9f5f86dfd44a | 572 | int _function, _function_1, _function_x; |
wim | 36:9f5f86dfd44a | 573 | |
wim | 32:59c4b8f648d4 | 574 | // Icon, Booster mode and contrast saved to allow contrast change at later time |
wim | 32:59c4b8f648d4 | 575 | // Only available for controllers with added features |
wim | 36:9f5f86dfd44a | 576 | int _icon_power, _contrast; |
simon | 1:ac48b187213c | 577 | }; |
simon | 1:ac48b187213c | 578 | |
wim | 23:d47f226efb24 | 579 | //--------- End TextLCD_Base ----------- |
wim | 22:35742ec80c24 | 580 | |
wim | 22:35742ec80c24 | 581 | |
wim | 23:d47f226efb24 | 582 | //--------- Start TextLCD Bus ----------- |
wim | 21:9eb628d9e164 | 583 | |
wim | 21:9eb628d9e164 | 584 | /** Create a TextLCD interface for using regular mbed pins |
wim | 21:9eb628d9e164 | 585 | * |
wim | 21:9eb628d9e164 | 586 | */ |
wim | 21:9eb628d9e164 | 587 | class TextLCD : public TextLCD_Base { |
wim | 21:9eb628d9e164 | 588 | public: |
wim | 21:9eb628d9e164 | 589 | /** Create a TextLCD interface for using regular mbed pins |
wim | 21:9eb628d9e164 | 590 | * |
wim | 21:9eb628d9e164 | 591 | * @param rs Instruction/data control line |
wim | 21:9eb628d9e164 | 592 | * @param e Enable line (clock) |
wim | 21:9eb628d9e164 | 593 | * @param d4-d7 Data lines for using as a 4-bit interface |
wim | 21:9eb628d9e164 | 594 | * @param type Sets the panel size/addressing mode (default = LCD16x2) |
wim | 21:9eb628d9e164 | 595 | * @param bl Backlight control line (optional, default = NC) |
wim | 21:9eb628d9e164 | 596 | * @param e2 Enable2 line (clock for second controller, LCD40x4 only) |
wim | 21:9eb628d9e164 | 597 | * @param ctrl LCD controller (default = HD44780) |
wim | 21:9eb628d9e164 | 598 | */ |
wim | 21:9eb628d9e164 | 599 | TextLCD(PinName rs, PinName e, PinName d4, PinName d5, PinName d6, PinName d7, LCDType type = LCD16x2, PinName bl = NC, PinName e2 = NC, LCDCtrl ctrl = HD44780); |
wim | 21:9eb628d9e164 | 600 | |
wim | 22:35742ec80c24 | 601 | /** Destruct a TextLCD interface for using regular mbed pins |
wim | 22:35742ec80c24 | 602 | * |
wim | 22:35742ec80c24 | 603 | * @param none |
wim | 22:35742ec80c24 | 604 | * @return none |
wim | 22:35742ec80c24 | 605 | */ |
wim | 22:35742ec80c24 | 606 | virtual ~TextLCD(); |
wim | 22:35742ec80c24 | 607 | |
wim | 21:9eb628d9e164 | 608 | private: |
wim | 29:a3663151aa65 | 609 | |
wim | 29:a3663151aa65 | 610 | /** Implementation of pure Virtual Low level writes to LCD Bus (parallel) |
wim | 29:a3663151aa65 | 611 | * Set the Enable pin. |
wim | 29:a3663151aa65 | 612 | */ |
wim | 21:9eb628d9e164 | 613 | virtual void _setEnable(bool value); |
wim | 29:a3663151aa65 | 614 | |
wim | 29:a3663151aa65 | 615 | /** Implementation of pure Virtual Low level writes to LCD Bus (parallel) |
wim | 32:59c4b8f648d4 | 616 | * Set the RS pin (0 = Command, 1 = Data). |
wim | 29:a3663151aa65 | 617 | */ |
wim | 21:9eb628d9e164 | 618 | virtual void _setRS(bool value); |
wim | 29:a3663151aa65 | 619 | |
wim | 29:a3663151aa65 | 620 | /** Implementation of pure Virtual Low level writes to LCD Bus (parallel) |
wim | 29:a3663151aa65 | 621 | * Set the BL pin (0 = Backlight Off, 1 = Backlight On). |
wim | 29:a3663151aa65 | 622 | */ |
wim | 21:9eb628d9e164 | 623 | virtual void _setBL(bool value); |
wim | 29:a3663151aa65 | 624 | |
wim | 29:a3663151aa65 | 625 | /** Implementation of pure Virtual Low level writes to LCD Bus (parallel) |
wim | 29:a3663151aa65 | 626 | * Set the databus value (4 bit). |
wim | 29:a3663151aa65 | 627 | */ |
wim | 21:9eb628d9e164 | 628 | virtual void _setData(int value); |
wim | 21:9eb628d9e164 | 629 | |
wim | 22:35742ec80c24 | 630 | /** Regular mbed pins bus |
wim | 22:35742ec80c24 | 631 | */ |
wim | 22:35742ec80c24 | 632 | DigitalOut _rs, _e; |
wim | 22:35742ec80c24 | 633 | BusOut _d; |
wim | 22:35742ec80c24 | 634 | |
wim | 22:35742ec80c24 | 635 | /** Optional Hardware pins for the Backlight and LCD40x4 device |
wim | 22:35742ec80c24 | 636 | * Default PinName value is NC, must be used as pointer to avoid issues with mbed lib and DigitalOut pins |
wim | 22:35742ec80c24 | 637 | */ |
wim | 37:ce348c002929 | 638 | DigitalOut *_bl, *_e2; |
wim | 21:9eb628d9e164 | 639 | }; |
wim | 21:9eb628d9e164 | 640 | |
wim | 23:d47f226efb24 | 641 | //----------- End TextLCD --------------- |
wim | 21:9eb628d9e164 | 642 | |
wim | 21:9eb628d9e164 | 643 | |
wim | 23:d47f226efb24 | 644 | //--------- Start TextLCD_I2C ----------- |
wim | 34:e5a0dcb43ecc | 645 | #if(LCD_I2C == 1) /* I2C Expander PCF8574/MCP23008 */ |
wim | 22:35742ec80c24 | 646 | |
wim | 26:bd897a001012 | 647 | /** Create a TextLCD interface using an I2C PCF8574 (or PCF8574A) or MCP23008 portexpander |
wim | 21:9eb628d9e164 | 648 | * |
wim | 21:9eb628d9e164 | 649 | */ |
wim | 21:9eb628d9e164 | 650 | class TextLCD_I2C : public TextLCD_Base { |
wim | 21:9eb628d9e164 | 651 | public: |
wim | 26:bd897a001012 | 652 | /** Create a TextLCD interface using an I2C PCF8574 (or PCF8574A) or MCP23008 portexpander |
wim | 21:9eb628d9e164 | 653 | * |
wim | 21:9eb628d9e164 | 654 | * @param i2c I2C Bus |
wim | 37:ce348c002929 | 655 | * @param deviceAddress I2C slave address (PCF8574 (or PCF8574A) or MCP23008 portexpander, default = PCF8574_SA0 = 0x40) |
wim | 21:9eb628d9e164 | 656 | * @param type Sets the panel size/addressing mode (default = LCD16x2) |
wim | 21:9eb628d9e164 | 657 | * @param ctrl LCD controller (default = HD44780) |
wim | 21:9eb628d9e164 | 658 | */ |
wim | 26:bd897a001012 | 659 | TextLCD_I2C(I2C *i2c, char deviceAddress = PCF8574_SA0, LCDType type = LCD16x2, LCDCtrl ctrl = HD44780); |
wim | 21:9eb628d9e164 | 660 | |
wim | 21:9eb628d9e164 | 661 | private: |
wim | 29:a3663151aa65 | 662 | |
wim | 37:ce348c002929 | 663 | /** Place the Enable bit in the databus shadowvalue |
wim | 37:ce348c002929 | 664 | * Used for mbed I2C portexpander |
wim | 37:ce348c002929 | 665 | * @param value data to write |
wim | 37:ce348c002929 | 666 | * @return none |
wim | 37:ce348c002929 | 667 | */ |
wim | 37:ce348c002929 | 668 | void _setEnableBit(bool value); |
wim | 37:ce348c002929 | 669 | |
wim | 29:a3663151aa65 | 670 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial expander) |
wim | 29:a3663151aa65 | 671 | * Set the Enable pin. |
wim | 29:a3663151aa65 | 672 | */ |
wim | 21:9eb628d9e164 | 673 | virtual void _setEnable(bool value); |
wim | 29:a3663151aa65 | 674 | |
wim | 29:a3663151aa65 | 675 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial expander) |
wim | 32:59c4b8f648d4 | 676 | * Set the RS pin (0 = Command, 1 = Data). |
wim | 29:a3663151aa65 | 677 | */ |
wim | 21:9eb628d9e164 | 678 | virtual void _setRS(bool value); |
wim | 29:a3663151aa65 | 679 | |
wim | 29:a3663151aa65 | 680 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial expander) |
wim | 29:a3663151aa65 | 681 | * Set the BL pin (0 = Backlight Off, 1 = Backlight On). |
wim | 29:a3663151aa65 | 682 | */ |
wim | 21:9eb628d9e164 | 683 | virtual void _setBL(bool value); |
wim | 29:a3663151aa65 | 684 | |
wim | 37:ce348c002929 | 685 | /** Place the 4bit data in the databus shadowvalue |
wim | 37:ce348c002929 | 686 | * Used for mbed I2C portexpander |
wim | 37:ce348c002929 | 687 | * @param value data to write |
wim | 37:ce348c002929 | 688 | * @return none |
wim | 37:ce348c002929 | 689 | */ |
wim | 37:ce348c002929 | 690 | void _setDataBits(int value); |
wim | 37:ce348c002929 | 691 | |
wim | 29:a3663151aa65 | 692 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial expander) |
wim | 29:a3663151aa65 | 693 | * Set the databus value (4 bit). |
wim | 29:a3663151aa65 | 694 | */ |
wim | 29:a3663151aa65 | 695 | virtual void _setData(int value); |
wim | 37:ce348c002929 | 696 | |
wim | 37:ce348c002929 | 697 | //New optimized |
wim | 37:ce348c002929 | 698 | //Test faster _writeByte 0.11s vs 0.27s for a 20x4 fillscreen (PCF8574) |
wim | 37:ce348c002929 | 699 | //Test faster _writeByte 0.14s vs 0.34s for a 20x4 fillscreen (MCP23008) |
wim | 37:ce348c002929 | 700 | |
wim | 37:ce348c002929 | 701 | /** Low level writes to LCD serial bus expander |
wim | 37:ce348c002929 | 702 | */ |
wim | 37:ce348c002929 | 703 | virtual void _writeByte(int value); |
wim | 37:ce348c002929 | 704 | |
wim | 29:a3663151aa65 | 705 | /** Write data to MCP23008 I2C portexpander |
wim | 29:a3663151aa65 | 706 | * @param reg register to write |
wim | 29:a3663151aa65 | 707 | * @param value data to write |
wim | 29:a3663151aa65 | 708 | * @return none |
wim | 29:a3663151aa65 | 709 | */ |
wim | 37:ce348c002929 | 710 | void _writeRegister (int reg, int value); |
wim | 21:9eb628d9e164 | 711 | |
wim | 21:9eb628d9e164 | 712 | //I2C bus |
wim | 21:9eb628d9e164 | 713 | I2C *_i2c; |
wim | 21:9eb628d9e164 | 714 | char _slaveAddress; |
wim | 21:9eb628d9e164 | 715 | |
wim | 37:ce348c002929 | 716 | // Internal bus shadow value for serial bus only |
wim | 30:033048611c01 | 717 | char _lcd_bus; |
wim | 21:9eb628d9e164 | 718 | }; |
wim | 34:e5a0dcb43ecc | 719 | #endif /* I2C Expander PCF8574/MCP23008 */ |
wim | 21:9eb628d9e164 | 720 | |
wim | 23:d47f226efb24 | 721 | //---------- End TextLCD_I2C ------------ |
wim | 22:35742ec80c24 | 722 | |
wim | 22:35742ec80c24 | 723 | |
wim | 23:d47f226efb24 | 724 | //--------- Start TextLCD_SPI ----------- |
wim | 34:e5a0dcb43ecc | 725 | #if(LCD_SPI == 1) /* SPI Expander SN74595 */ |
wim | 22:35742ec80c24 | 726 | |
wim | 21:9eb628d9e164 | 727 | /** Create a TextLCD interface using an SPI 74595 portexpander |
wim | 21:9eb628d9e164 | 728 | * |
wim | 21:9eb628d9e164 | 729 | */ |
wim | 21:9eb628d9e164 | 730 | class TextLCD_SPI : public TextLCD_Base { |
wim | 21:9eb628d9e164 | 731 | public: |
wim | 21:9eb628d9e164 | 732 | /** Create a TextLCD interface using an SPI 74595 portexpander |
wim | 21:9eb628d9e164 | 733 | * |
wim | 21:9eb628d9e164 | 734 | * @param spi SPI Bus |
wim | 21:9eb628d9e164 | 735 | * @param cs chip select pin (active low) |
wim | 21:9eb628d9e164 | 736 | * @param type Sets the panel size/addressing mode (default = LCD16x2) |
wim | 21:9eb628d9e164 | 737 | * @param ctrl LCD controller (default = HD44780) |
wim | 21:9eb628d9e164 | 738 | */ |
wim | 21:9eb628d9e164 | 739 | TextLCD_SPI(SPI *spi, PinName cs, LCDType type = LCD16x2, LCDCtrl ctrl = HD44780); |
wim | 21:9eb628d9e164 | 740 | |
wim | 21:9eb628d9e164 | 741 | private: |
wim | 29:a3663151aa65 | 742 | |
wim | 29:a3663151aa65 | 743 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial expander) |
wim | 29:a3663151aa65 | 744 | * Set the Enable pin. |
wim | 29:a3663151aa65 | 745 | */ |
wim | 21:9eb628d9e164 | 746 | virtual void _setEnable(bool value); |
wim | 29:a3663151aa65 | 747 | |
wim | 29:a3663151aa65 | 748 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial expander) |
wim | 32:59c4b8f648d4 | 749 | * Set the RS pin (0 = Command, 1 = Data). |
wim | 29:a3663151aa65 | 750 | */ |
wim | 21:9eb628d9e164 | 751 | virtual void _setRS(bool value); |
wim | 29:a3663151aa65 | 752 | |
wim | 29:a3663151aa65 | 753 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial expander) |
wim | 29:a3663151aa65 | 754 | * Set the BL pin (0 = Backlight Off, 1 = Backlight On). |
wim | 29:a3663151aa65 | 755 | */ |
wim | 21:9eb628d9e164 | 756 | virtual void _setBL(bool value); |
wim | 29:a3663151aa65 | 757 | |
wim | 29:a3663151aa65 | 758 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial expander) |
wim | 29:a3663151aa65 | 759 | * Set the databus value (4 bit). |
wim | 29:a3663151aa65 | 760 | */ |
wim | 37:ce348c002929 | 761 | virtual void _setData(int value); |
wim | 21:9eb628d9e164 | 762 | |
wim | 21:9eb628d9e164 | 763 | // SPI bus |
wim | 21:9eb628d9e164 | 764 | SPI *_spi; |
wim | 21:9eb628d9e164 | 765 | DigitalOut _cs; |
wim | 21:9eb628d9e164 | 766 | |
wim | 37:ce348c002929 | 767 | // Internal bus shadow value for serial bus only |
wim | 21:9eb628d9e164 | 768 | char _lcd_bus; |
wim | 21:9eb628d9e164 | 769 | }; |
wim | 34:e5a0dcb43ecc | 770 | #endif /* SPI Expander SN74595 */ |
wim | 23:d47f226efb24 | 771 | //---------- End TextLCD_SPI ------------ |
wim | 21:9eb628d9e164 | 772 | |
Sissors | 24:fb3399713710 | 773 | |
wim | 37:ce348c002929 | 774 | //--------- Start TextLCD_I2C_N ----------- |
wim | 37:ce348c002929 | 775 | #if(LCD_I2C_N == 1) /* Native I2C */ |
wim | 37:ce348c002929 | 776 | |
wim | 37:ce348c002929 | 777 | /** Create a TextLCD interface using a controller with native I2C interface |
wim | 37:ce348c002929 | 778 | * |
wim | 37:ce348c002929 | 779 | */ |
wim | 37:ce348c002929 | 780 | class TextLCD_I2C_N : public TextLCD_Base { |
wim | 37:ce348c002929 | 781 | public: |
wim | 37:ce348c002929 | 782 | /** Create a TextLCD interface using a controller with native I2C interface |
wim | 37:ce348c002929 | 783 | * |
wim | 37:ce348c002929 | 784 | * @param i2c I2C Bus |
wim | 37:ce348c002929 | 785 | * @param deviceAddress I2C slave address (default = ST7032_SA = 0x7C) |
wim | 37:ce348c002929 | 786 | * @param type Sets the panel size/addressing mode (default = LCD16x2) |
wim | 37:ce348c002929 | 787 | * @param bl Backlight control line (optional, default = NC) |
wim | 37:ce348c002929 | 788 | * @param ctrl LCD controller (default = ST7032_3V3) |
wim | 37:ce348c002929 | 789 | */ |
wim | 37:ce348c002929 | 790 | TextLCD_I2C_N(I2C *i2c, char deviceAddress = ST7032_SA, LCDType type = LCD16x2, PinName bl = NC, LCDCtrl ctrl = ST7032_3V3); |
wim | 37:ce348c002929 | 791 | |
wim | 37:ce348c002929 | 792 | /** Destruct a TextLCD interface using a controller with native I2C interface |
wim | 37:ce348c002929 | 793 | */ |
wim | 37:ce348c002929 | 794 | virtual ~TextLCD_I2C_N(void); |
wim | 37:ce348c002929 | 795 | |
wim | 37:ce348c002929 | 796 | private: |
wim | 37:ce348c002929 | 797 | |
wim | 37:ce348c002929 | 798 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial native) |
wim | 37:ce348c002929 | 799 | * Set the Enable pin. |
wim | 37:ce348c002929 | 800 | */ |
wim | 37:ce348c002929 | 801 | virtual void _setEnable(bool value); |
wim | 37:ce348c002929 | 802 | |
wim | 37:ce348c002929 | 803 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial native) |
wim | 37:ce348c002929 | 804 | * Set the RS pin ( 0 = Command, 1 = Data). |
wim | 37:ce348c002929 | 805 | */ |
wim | 37:ce348c002929 | 806 | virtual void _setRS(bool value); |
wim | 37:ce348c002929 | 807 | |
wim | 37:ce348c002929 | 808 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial native) |
wim | 37:ce348c002929 | 809 | * Set the BL pin (0 = Backlight Off, 1 = Backlight On). |
wim | 37:ce348c002929 | 810 | */ |
wim | 37:ce348c002929 | 811 | virtual void _setBL(bool value); |
wim | 37:ce348c002929 | 812 | |
wim | 37:ce348c002929 | 813 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial native) |
wim | 37:ce348c002929 | 814 | * Set the databus value (4 bit). |
wim | 37:ce348c002929 | 815 | */ |
wim | 37:ce348c002929 | 816 | virtual void _setData(int value); |
wim | 37:ce348c002929 | 817 | |
wim | 37:ce348c002929 | 818 | /** Low level writes to LCD serial bus only (serial native) |
wim | 37:ce348c002929 | 819 | */ |
wim | 37:ce348c002929 | 820 | virtual void _writeByte(int value); |
wim | 37:ce348c002929 | 821 | |
wim | 37:ce348c002929 | 822 | //I2C bus |
wim | 37:ce348c002929 | 823 | I2C *_i2c; |
wim | 37:ce348c002929 | 824 | char _slaveAddress; |
wim | 37:ce348c002929 | 825 | |
wim | 37:ce348c002929 | 826 | // controlbyte to select between data and command. Internal shadow value for serial bus only |
wim | 37:ce348c002929 | 827 | char _controlbyte; |
wim | 37:ce348c002929 | 828 | |
wim | 37:ce348c002929 | 829 | //Backlight |
wim | 37:ce348c002929 | 830 | DigitalOut *_bl; |
wim | 37:ce348c002929 | 831 | |
wim | 37:ce348c002929 | 832 | }; |
wim | 37:ce348c002929 | 833 | #endif /* Native I2C */ |
wim | 37:ce348c002929 | 834 | //---------- End TextLCD_I2C_N ------------ |
wim | 37:ce348c002929 | 835 | |
wim | 37:ce348c002929 | 836 | |
wim | 26:bd897a001012 | 837 | //--------- Start TextLCD_SPI_N ----------- |
wim | 34:e5a0dcb43ecc | 838 | #if(LCD_SPI_N == 1) /* Native SPI bus */ |
Sissors | 24:fb3399713710 | 839 | |
wim | 30:033048611c01 | 840 | /** Create a TextLCD interface using a controller with native SPI4 interface |
Sissors | 24:fb3399713710 | 841 | * |
Sissors | 24:fb3399713710 | 842 | */ |
wim | 25:6162b31128c9 | 843 | class TextLCD_SPI_N : public TextLCD_Base { |
Sissors | 24:fb3399713710 | 844 | public: |
wim | 30:033048611c01 | 845 | /** Create a TextLCD interface using a controller with native SPI4 interface |
Sissors | 24:fb3399713710 | 846 | * |
Sissors | 24:fb3399713710 | 847 | * @param spi SPI Bus |
Sissors | 24:fb3399713710 | 848 | * @param cs chip select pin (active low) |
Sissors | 24:fb3399713710 | 849 | * @param rs Instruction/data control line |
Sissors | 24:fb3399713710 | 850 | * @param type Sets the panel size/addressing mode (default = LCD16x2) |
Sissors | 24:fb3399713710 | 851 | * @param bl Backlight control line (optional, default = NC) |
wim | 26:bd897a001012 | 852 | * @param ctrl LCD controller (default = ST7032_3V3) |
Sissors | 24:fb3399713710 | 853 | */ |
wim | 26:bd897a001012 | 854 | TextLCD_SPI_N(SPI *spi, PinName cs, PinName rs, LCDType type = LCD16x2, PinName bl = NC, LCDCtrl ctrl = ST7032_3V3); |
wim | 37:ce348c002929 | 855 | |
wim | 37:ce348c002929 | 856 | /** Destruct a TextLCD interface using a controller with native SPI4 interface |
wim | 37:ce348c002929 | 857 | */ |
wim | 25:6162b31128c9 | 858 | virtual ~TextLCD_SPI_N(void); |
Sissors | 24:fb3399713710 | 859 | |
Sissors | 24:fb3399713710 | 860 | private: |
wim | 29:a3663151aa65 | 861 | |
wim | 29:a3663151aa65 | 862 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial native) |
wim | 29:a3663151aa65 | 863 | * Set the Enable pin. |
wim | 29:a3663151aa65 | 864 | */ |
Sissors | 24:fb3399713710 | 865 | virtual void _setEnable(bool value); |
wim | 29:a3663151aa65 | 866 | |
wim | 29:a3663151aa65 | 867 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial native) |
wim | 32:59c4b8f648d4 | 868 | * Set the RS pin (0 = Command, 1 = Data). |
wim | 29:a3663151aa65 | 869 | */ |
Sissors | 24:fb3399713710 | 870 | virtual void _setRS(bool value); |
wim | 29:a3663151aa65 | 871 | |
wim | 29:a3663151aa65 | 872 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial native) |
wim | 29:a3663151aa65 | 873 | * Set the BL pin (0 = Backlight Off, 1 = Backlight On). |
wim | 29:a3663151aa65 | 874 | */ |
Sissors | 24:fb3399713710 | 875 | virtual void _setBL(bool value); |
wim | 29:a3663151aa65 | 876 | |
wim | 29:a3663151aa65 | 877 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial native) |
wim | 29:a3663151aa65 | 878 | * Set the databus value (4 bit). |
wim | 29:a3663151aa65 | 879 | */ |
Sissors | 24:fb3399713710 | 880 | virtual void _setData(int value); |
wim | 29:a3663151aa65 | 881 | |
wim | 29:a3663151aa65 | 882 | /** Low level writes to LCD serial bus only (serial native) |
wim | 29:a3663151aa65 | 883 | */ |
Sissors | 24:fb3399713710 | 884 | virtual void _writeByte(int value); |
Sissors | 24:fb3399713710 | 885 | |
Sissors | 24:fb3399713710 | 886 | // SPI bus |
Sissors | 24:fb3399713710 | 887 | SPI *_spi; |
Sissors | 24:fb3399713710 | 888 | DigitalOut _cs; |
Sissors | 24:fb3399713710 | 889 | DigitalOut _rs; |
wim | 30:033048611c01 | 890 | |
wim | 30:033048611c01 | 891 | //Backlight |
Sissors | 24:fb3399713710 | 892 | DigitalOut *_bl; |
Sissors | 24:fb3399713710 | 893 | }; |
wim | 34:e5a0dcb43ecc | 894 | #endif /* Native SPI bus */ |
wim | 25:6162b31128c9 | 895 | //---------- End TextLCD_SPI_N ------------ |
Sissors | 24:fb3399713710 | 896 | |
wim | 26:bd897a001012 | 897 | |
wim | 36:9f5f86dfd44a | 898 | //-------- Start TextLCD_SPI_N_3_8 -------- |
wim | 36:9f5f86dfd44a | 899 | #if(LCD_SPI_N_3_8 == 1) /* Native SPI bus */ |
wim | 37:ce348c002929 | 900 | /** Create a TextLCD interface using a controller with native SPI3 8 bits interface |
wim | 37:ce348c002929 | 901 | * This mode is supported by ST7070. |
wim | 37:ce348c002929 | 902 | * |
wim | 37:ce348c002929 | 903 | */ |
wim | 36:9f5f86dfd44a | 904 | class TextLCD_SPI_N_3_8 : public TextLCD_Base { |
wim | 36:9f5f86dfd44a | 905 | public: |
wim | 36:9f5f86dfd44a | 906 | /** Create a TextLCD interface using a controller with a native SPI3 8 bits interface |
wim | 36:9f5f86dfd44a | 907 | * This mode is supported by ST7070. Note that implementation in TexTLCD is not very efficient due to |
wim | 36:9f5f86dfd44a | 908 | * structure of the TextLCD library: each databyte is written separately and requires a separate 'count command' set to 1 byte. |
wim | 36:9f5f86dfd44a | 909 | * |
wim | 36:9f5f86dfd44a | 910 | * @param spi SPI Bus |
wim | 36:9f5f86dfd44a | 911 | * @param cs chip select pin (active low) |
wim | 36:9f5f86dfd44a | 912 | * @param type Sets the panel size/addressing mode (default = LCD16x2) |
wim | 36:9f5f86dfd44a | 913 | * @param bl Backlight control line (optional, default = NC) |
wim | 36:9f5f86dfd44a | 914 | * @param ctrl LCD controller (default = ST7070) |
wim | 36:9f5f86dfd44a | 915 | */ |
wim | 36:9f5f86dfd44a | 916 | TextLCD_SPI_N_3_8(SPI *spi, PinName cs, LCDType type = LCD16x2, PinName bl = NC, LCDCtrl ctrl = ST7070); |
wim | 36:9f5f86dfd44a | 917 | |
wim | 37:ce348c002929 | 918 | /** Destruct a TextLCD interface using a controller with native SPI3_8 interface |
wim | 37:ce348c002929 | 919 | */ |
wim | 36:9f5f86dfd44a | 920 | virtual ~TextLCD_SPI_N_3_8(void); |
wim | 36:9f5f86dfd44a | 921 | |
wim | 36:9f5f86dfd44a | 922 | private: |
wim | 36:9f5f86dfd44a | 923 | |
wim | 36:9f5f86dfd44a | 924 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial native) |
wim | 36:9f5f86dfd44a | 925 | * Set the Enable pin. |
wim | 36:9f5f86dfd44a | 926 | */ |
wim | 36:9f5f86dfd44a | 927 | virtual void _setEnable(bool value); |
wim | 36:9f5f86dfd44a | 928 | |
wim | 36:9f5f86dfd44a | 929 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial native) |
wim | 36:9f5f86dfd44a | 930 | * Set the RS pin (0 = Command, 1 = Data). |
wim | 36:9f5f86dfd44a | 931 | */ |
wim | 36:9f5f86dfd44a | 932 | virtual void _setRS(bool value); |
wim | 36:9f5f86dfd44a | 933 | |
wim | 36:9f5f86dfd44a | 934 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial native) |
wim | 36:9f5f86dfd44a | 935 | * Set the BL pin (0 = Backlight Off, 1 = Backlight On). |
wim | 36:9f5f86dfd44a | 936 | */ |
wim | 36:9f5f86dfd44a | 937 | virtual void _setBL(bool value); |
wim | 36:9f5f86dfd44a | 938 | |
wim | 36:9f5f86dfd44a | 939 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial native) |
wim | 36:9f5f86dfd44a | 940 | * Set the databus value (4 bit). |
wim | 36:9f5f86dfd44a | 941 | */ |
wim | 36:9f5f86dfd44a | 942 | virtual void _setData(int value); |
wim | 36:9f5f86dfd44a | 943 | |
wim | 36:9f5f86dfd44a | 944 | /** Low level writes to LCD serial bus only (serial native) |
wim | 36:9f5f86dfd44a | 945 | */ |
wim | 36:9f5f86dfd44a | 946 | virtual void _writeByte(int value); |
wim | 36:9f5f86dfd44a | 947 | |
wim | 36:9f5f86dfd44a | 948 | // SPI bus |
wim | 36:9f5f86dfd44a | 949 | SPI *_spi; |
wim | 36:9f5f86dfd44a | 950 | DigitalOut _cs; |
wim | 36:9f5f86dfd44a | 951 | |
wim | 37:ce348c002929 | 952 | // controlbyte to select between data and command. Internal shadow value for serial bus only |
wim | 36:9f5f86dfd44a | 953 | char _controlbyte; |
wim | 36:9f5f86dfd44a | 954 | |
wim | 36:9f5f86dfd44a | 955 | //Backlight |
wim | 36:9f5f86dfd44a | 956 | DigitalOut *_bl; |
wim | 36:9f5f86dfd44a | 957 | }; |
wim | 36:9f5f86dfd44a | 958 | |
wim | 36:9f5f86dfd44a | 959 | #endif /* Native SPI bus */ |
wim | 36:9f5f86dfd44a | 960 | //------- End TextLCD_SPI_N_3_8 ----------- |
wim | 36:9f5f86dfd44a | 961 | |
wim | 36:9f5f86dfd44a | 962 | |
wim | 34:e5a0dcb43ecc | 963 | //------- Start TextLCD_SPI_N_3_9 --------- |
wim | 34:e5a0dcb43ecc | 964 | #if(LCD_SPI_N_3_9 == 1) /* Native SPI bus */ |
wim | 30:033048611c01 | 965 | //Code checked out on logic analyser. Not yet tested on hardware.. |
wim | 30:033048611c01 | 966 | |
wim | 30:033048611c01 | 967 | /** Create a TextLCD interface using a controller with native SPI3 9 bits interface |
wim | 30:033048611c01 | 968 | * Note: current mbed libs only support SPI 9 bit mode for NXP platforms |
wim | 30:033048611c01 | 969 | * |
wim | 30:033048611c01 | 970 | */ |
wim | 30:033048611c01 | 971 | class TextLCD_SPI_N_3_9 : public TextLCD_Base { |
wim | 30:033048611c01 | 972 | public: |
wim | 30:033048611c01 | 973 | /** Create a TextLCD interface using a controller with native SPI3 9 bits interface |
wim | 30:033048611c01 | 974 | * Note: current mbed libs only support SPI 9 bit mode for NXP platforms |
wim | 30:033048611c01 | 975 | * |
wim | 30:033048611c01 | 976 | * @param spi SPI Bus |
wim | 30:033048611c01 | 977 | * @param cs chip select pin (active low) |
wim | 30:033048611c01 | 978 | * @param type Sets the panel size/addressing mode (default = LCD16x2) |
wim | 30:033048611c01 | 979 | * @param bl Backlight control line (optional, default = NC) |
wim | 30:033048611c01 | 980 | * @param ctrl LCD controller (default = AIP31068) |
wim | 30:033048611c01 | 981 | */ |
wim | 30:033048611c01 | 982 | TextLCD_SPI_N_3_9(SPI *spi, PinName cs, LCDType type = LCD16x2, PinName bl = NC, LCDCtrl ctrl = AIP31068); |
wim | 37:ce348c002929 | 983 | |
wim | 37:ce348c002929 | 984 | /** Destruct a TextLCD interface using a controller with native SPI3_9 interface |
wim | 37:ce348c002929 | 985 | */ |
wim | 30:033048611c01 | 986 | virtual ~TextLCD_SPI_N_3_9(void); |
wim | 30:033048611c01 | 987 | |
wim | 30:033048611c01 | 988 | private: |
wim | 30:033048611c01 | 989 | |
wim | 30:033048611c01 | 990 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial native) |
wim | 30:033048611c01 | 991 | * Set the Enable pin. |
wim | 30:033048611c01 | 992 | */ |
wim | 30:033048611c01 | 993 | virtual void _setEnable(bool value); |
wim | 30:033048611c01 | 994 | |
wim | 30:033048611c01 | 995 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial native) |
wim | 32:59c4b8f648d4 | 996 | * Set the RS pin (0 = Command, 1 = Data). |
wim | 32:59c4b8f648d4 | 997 | */ |
wim | 32:59c4b8f648d4 | 998 | virtual void _setRS(bool value); |
wim | 32:59c4b8f648d4 | 999 | |
wim | 32:59c4b8f648d4 | 1000 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial native) |
wim | 32:59c4b8f648d4 | 1001 | * Set the BL pin (0 = Backlight Off, 1 = Backlight On). |
wim | 32:59c4b8f648d4 | 1002 | */ |
wim | 32:59c4b8f648d4 | 1003 | virtual void _setBL(bool value); |
wim | 32:59c4b8f648d4 | 1004 | |
wim | 32:59c4b8f648d4 | 1005 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial native) |
wim | 32:59c4b8f648d4 | 1006 | * Set the databus value (4 bit). |
wim | 32:59c4b8f648d4 | 1007 | */ |
wim | 32:59c4b8f648d4 | 1008 | virtual void _setData(int value); |
wim | 32:59c4b8f648d4 | 1009 | |
wim | 32:59c4b8f648d4 | 1010 | /** Low level writes to LCD serial bus only (serial native) |
wim | 32:59c4b8f648d4 | 1011 | */ |
wim | 32:59c4b8f648d4 | 1012 | virtual void _writeByte(int value); |
wim | 32:59c4b8f648d4 | 1013 | |
wim | 32:59c4b8f648d4 | 1014 | // SPI bus |
wim | 32:59c4b8f648d4 | 1015 | SPI *_spi; |
wim | 32:59c4b8f648d4 | 1016 | DigitalOut _cs; |
wim | 32:59c4b8f648d4 | 1017 | |
wim | 37:ce348c002929 | 1018 | // controlbyte to select between data and command. Internal shadow value for serial bus only |
wim | 32:59c4b8f648d4 | 1019 | char _controlbyte; |
wim | 32:59c4b8f648d4 | 1020 | |
wim | 32:59c4b8f648d4 | 1021 | //Backlight |
wim | 32:59c4b8f648d4 | 1022 | DigitalOut *_bl; |
wim | 32:59c4b8f648d4 | 1023 | }; |
wim | 34:e5a0dcb43ecc | 1024 | #endif /* Native SPI bus */ |
wim | 32:59c4b8f648d4 | 1025 | //-------- End TextLCD_SPI_N_3_9 ---------- |
wim | 32:59c4b8f648d4 | 1026 | |
wim | 32:59c4b8f648d4 | 1027 | |
wim | 32:59c4b8f648d4 | 1028 | //------- Start TextLCD_SPI_N_3_10 --------- |
wim | 34:e5a0dcb43ecc | 1029 | #if(LCD_SPI_N_3_10 == 1) /* Native SPI bus */ |
wim | 32:59c4b8f648d4 | 1030 | |
wim | 32:59c4b8f648d4 | 1031 | /** Create a TextLCD interface using a controller with native SPI3 10 bits interface |
wim | 32:59c4b8f648d4 | 1032 | * Note: current mbed libs only support SPI 10 bit mode for NXP platforms |
wim | 32:59c4b8f648d4 | 1033 | * |
wim | 32:59c4b8f648d4 | 1034 | */ |
wim | 32:59c4b8f648d4 | 1035 | class TextLCD_SPI_N_3_10 : public TextLCD_Base { |
wim | 32:59c4b8f648d4 | 1036 | public: |
wim | 32:59c4b8f648d4 | 1037 | /** Create a TextLCD interface using a controller with native SPI3 10 bits interface |
wim | 32:59c4b8f648d4 | 1038 | * Note: current mbed libs only support SPI 10 bit mode for NXP platforms |
wim | 32:59c4b8f648d4 | 1039 | * |
wim | 32:59c4b8f648d4 | 1040 | * @param spi SPI Bus |
wim | 32:59c4b8f648d4 | 1041 | * @param cs chip select pin (active low) |
wim | 32:59c4b8f648d4 | 1042 | * @param type Sets the panel size/addressing mode (default = LCD16x2) |
wim | 32:59c4b8f648d4 | 1043 | * @param bl Backlight control line (optional, default = NC) |
wim | 32:59c4b8f648d4 | 1044 | * @param ctrl LCD controller (default = AIP31068) |
wim | 32:59c4b8f648d4 | 1045 | */ |
wim | 32:59c4b8f648d4 | 1046 | TextLCD_SPI_N_3_10(SPI *spi, PinName cs, LCDType type = LCD16x2, PinName bl = NC, LCDCtrl ctrl = AIP31068); |
wim | 37:ce348c002929 | 1047 | |
wim | 37:ce348c002929 | 1048 | /** Destruct a TextLCD interface using a controller with native SPI3_10 interface |
wim | 37:ce348c002929 | 1049 | */ |
wim | 32:59c4b8f648d4 | 1050 | virtual ~TextLCD_SPI_N_3_10(void); |
wim | 32:59c4b8f648d4 | 1051 | |
wim | 32:59c4b8f648d4 | 1052 | private: |
wim | 32:59c4b8f648d4 | 1053 | |
wim | 32:59c4b8f648d4 | 1054 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial native) |
wim | 32:59c4b8f648d4 | 1055 | * Set the Enable pin. |
wim | 32:59c4b8f648d4 | 1056 | */ |
wim | 32:59c4b8f648d4 | 1057 | virtual void _setEnable(bool value); |
wim | 32:59c4b8f648d4 | 1058 | |
wim | 32:59c4b8f648d4 | 1059 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial native) |
wim | 32:59c4b8f648d4 | 1060 | * Set the RS pin (0 = Command, 1 = Data). |
wim | 32:59c4b8f648d4 | 1061 | */ |
wim | 32:59c4b8f648d4 | 1062 | virtual void _setRS(bool value); |
wim | 32:59c4b8f648d4 | 1063 | |
wim | 32:59c4b8f648d4 | 1064 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial native) |
wim | 32:59c4b8f648d4 | 1065 | * Set the BL pin (0 = Backlight Off, 1 = Backlight On). |
wim | 32:59c4b8f648d4 | 1066 | */ |
wim | 32:59c4b8f648d4 | 1067 | virtual void _setBL(bool value); |
wim | 32:59c4b8f648d4 | 1068 | |
wim | 32:59c4b8f648d4 | 1069 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial native) |
wim | 32:59c4b8f648d4 | 1070 | * Set the databus value (4 bit). |
wim | 32:59c4b8f648d4 | 1071 | */ |
wim | 32:59c4b8f648d4 | 1072 | virtual void _setData(int value); |
wim | 32:59c4b8f648d4 | 1073 | |
wim | 32:59c4b8f648d4 | 1074 | /** Low level writes to LCD serial bus only (serial native) |
wim | 32:59c4b8f648d4 | 1075 | */ |
wim | 32:59c4b8f648d4 | 1076 | virtual void _writeByte(int value); |
wim | 32:59c4b8f648d4 | 1077 | |
wim | 32:59c4b8f648d4 | 1078 | // SPI bus |
wim | 32:59c4b8f648d4 | 1079 | SPI *_spi; |
wim | 32:59c4b8f648d4 | 1080 | DigitalOut _cs; |
wim | 36:9f5f86dfd44a | 1081 | |
wim | 37:ce348c002929 | 1082 | // controlbyte to select between data and command. Internal shadow value for serial bus only |
wim | 32:59c4b8f648d4 | 1083 | char _controlbyte; |
wim | 32:59c4b8f648d4 | 1084 | |
wim | 32:59c4b8f648d4 | 1085 | //Backlight |
wim | 32:59c4b8f648d4 | 1086 | DigitalOut *_bl; |
wim | 32:59c4b8f648d4 | 1087 | }; |
wim | 32:59c4b8f648d4 | 1088 | |
wim | 34:e5a0dcb43ecc | 1089 | #endif /* Native SPI bus */ |
wim | 32:59c4b8f648d4 | 1090 | //-------- End TextLCD_SPI_N_3_10 ---------- |
wim | 32:59c4b8f648d4 | 1091 | |
wim | 32:59c4b8f648d4 | 1092 | |
wim | 32:59c4b8f648d4 | 1093 | //------- Start TextLCD_SPI_N_3_16 --------- |
wim | 34:e5a0dcb43ecc | 1094 | #if(LCD_SPI_N_3_16 == 1) /* Native SPI bus */ |
wim | 32:59c4b8f648d4 | 1095 | |
wim | 32:59c4b8f648d4 | 1096 | /** Create a TextLCD interface using a controller with native SPI3 16 bits interface |
wim | 32:59c4b8f648d4 | 1097 | * |
wim | 32:59c4b8f648d4 | 1098 | */ |
wim | 32:59c4b8f648d4 | 1099 | class TextLCD_SPI_N_3_16 : public TextLCD_Base { |
wim | 32:59c4b8f648d4 | 1100 | public: |
wim | 32:59c4b8f648d4 | 1101 | /** Create a TextLCD interface using a controller with native SPI3 16 bits interface |
wim | 32:59c4b8f648d4 | 1102 | * |
wim | 32:59c4b8f648d4 | 1103 | * @param spi SPI Bus |
wim | 32:59c4b8f648d4 | 1104 | * @param cs chip select pin (active low) |
wim | 32:59c4b8f648d4 | 1105 | * @param type Sets the panel size/addressing mode (default = LCD16x2) |
wim | 32:59c4b8f648d4 | 1106 | * @param bl Backlight control line (optional, default = NC) |
wim | 32:59c4b8f648d4 | 1107 | * @param ctrl LCD controller (default = PT6314) |
wim | 32:59c4b8f648d4 | 1108 | */ |
wim | 32:59c4b8f648d4 | 1109 | TextLCD_SPI_N_3_16(SPI *spi, PinName cs, LCDType type = LCD16x2, PinName bl = NC, LCDCtrl ctrl = PT6314); |
wim | 37:ce348c002929 | 1110 | |
wim | 37:ce348c002929 | 1111 | /** Destruct a TextLCD interface using a controller with native SPI3_16 interface |
wim | 37:ce348c002929 | 1112 | */ |
wim | 32:59c4b8f648d4 | 1113 | virtual ~TextLCD_SPI_N_3_16(void); |
wim | 32:59c4b8f648d4 | 1114 | |
wim | 32:59c4b8f648d4 | 1115 | private: |
wim | 32:59c4b8f648d4 | 1116 | |
wim | 32:59c4b8f648d4 | 1117 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial native) |
wim | 32:59c4b8f648d4 | 1118 | * Set the Enable pin. |
wim | 32:59c4b8f648d4 | 1119 | */ |
wim | 32:59c4b8f648d4 | 1120 | virtual void _setEnable(bool value); |
wim | 32:59c4b8f648d4 | 1121 | |
wim | 32:59c4b8f648d4 | 1122 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial native) |
wim | 32:59c4b8f648d4 | 1123 | * Set the RS pin (0 = Command, 1 = Data). |
wim | 30:033048611c01 | 1124 | */ |
wim | 30:033048611c01 | 1125 | virtual void _setRS(bool value); |
wim | 30:033048611c01 | 1126 | |
wim | 30:033048611c01 | 1127 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial native) |
wim | 30:033048611c01 | 1128 | * Set the BL pin (0 = Backlight Off, 1 = Backlight On). |
wim | 30:033048611c01 | 1129 | */ |
wim | 30:033048611c01 | 1130 | virtual void _setBL(bool value); |
wim | 30:033048611c01 | 1131 | |
wim | 30:033048611c01 | 1132 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial native) |
wim | 30:033048611c01 | 1133 | * Set the databus value (4 bit). |
wim | 30:033048611c01 | 1134 | */ |
wim | 30:033048611c01 | 1135 | virtual void _setData(int value); |
wim | 30:033048611c01 | 1136 | |
wim | 30:033048611c01 | 1137 | /** Low level writes to LCD serial bus only (serial native) |
wim | 30:033048611c01 | 1138 | */ |
wim | 30:033048611c01 | 1139 | virtual void _writeByte(int value); |
wim | 30:033048611c01 | 1140 | |
wim | 30:033048611c01 | 1141 | // SPI bus |
wim | 30:033048611c01 | 1142 | SPI *_spi; |
wim | 30:033048611c01 | 1143 | DigitalOut _cs; |
wim | 30:033048611c01 | 1144 | |
wim | 37:ce348c002929 | 1145 | // controlbyte to select between data and command. Internal shadow value for serial bus only |
wim | 30:033048611c01 | 1146 | char _controlbyte; |
wim | 30:033048611c01 | 1147 | |
wim | 30:033048611c01 | 1148 | //Backlight |
wim | 30:033048611c01 | 1149 | DigitalOut *_bl; |
wim | 30:033048611c01 | 1150 | }; |
wim | 34:e5a0dcb43ecc | 1151 | #endif /* Native SPI bus */ |
wim | 32:59c4b8f648d4 | 1152 | //-------- End TextLCD_SPI_N_3_16 ---------- |
wim | 34:e5a0dcb43ecc | 1153 | |
wim | 30:033048611c01 | 1154 | |
wim | 32:59c4b8f648d4 | 1155 | //------- Start TextLCD_SPI_N_3_24 --------- |
wim | 34:e5a0dcb43ecc | 1156 | #if(LCD_SPI_N_3_24 == 1) /* Native SPI bus */ |
wim | 30:033048611c01 | 1157 | |
wim | 32:59c4b8f648d4 | 1158 | /** Create a TextLCD interface using a controller with native SPI3 24 bits interface |
wim | 32:59c4b8f648d4 | 1159 | * Note: lib uses SPI 8 bit mode |
wim | 30:033048611c01 | 1160 | * |
wim | 30:033048611c01 | 1161 | */ |
wim | 32:59c4b8f648d4 | 1162 | class TextLCD_SPI_N_3_24 : public TextLCD_Base { |
wim | 30:033048611c01 | 1163 | public: |
wim | 32:59c4b8f648d4 | 1164 | /** Create a TextLCD interface using a controller with native SPI3 24 bits interface |
wim | 32:59c4b8f648d4 | 1165 | * Note: lib uses SPI 8 bit mode |
wim | 30:033048611c01 | 1166 | * |
wim | 30:033048611c01 | 1167 | * @param spi SPI Bus |
wim | 30:033048611c01 | 1168 | * @param cs chip select pin (active low) |
wim | 30:033048611c01 | 1169 | * @param type Sets the panel size/addressing mode (default = LCD16x2) |
wim | 30:033048611c01 | 1170 | * @param bl Backlight control line (optional, default = NC) |
wim | 32:59c4b8f648d4 | 1171 | * @param ctrl LCD controller (default = SSD1803) |
wim | 30:033048611c01 | 1172 | */ |
wim | 32:59c4b8f648d4 | 1173 | TextLCD_SPI_N_3_24(SPI *spi, PinName cs, LCDType type = LCD16x2, PinName bl = NC, LCDCtrl ctrl = SSD1803_3V3); |
wim | 37:ce348c002929 | 1174 | |
wim | 37:ce348c002929 | 1175 | /** Destruct a TextLCD interface using a controller with native SPI3_24 interface |
wim | 37:ce348c002929 | 1176 | */ |
wim | 32:59c4b8f648d4 | 1177 | virtual ~TextLCD_SPI_N_3_24(void); |
wim | 30:033048611c01 | 1178 | |
wim | 30:033048611c01 | 1179 | private: |
wim | 30:033048611c01 | 1180 | |
wim | 30:033048611c01 | 1181 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial native) |
wim | 30:033048611c01 | 1182 | * Set the Enable pin. |
wim | 30:033048611c01 | 1183 | */ |
wim | 30:033048611c01 | 1184 | virtual void _setEnable(bool value); |
wim | 30:033048611c01 | 1185 | |
wim | 30:033048611c01 | 1186 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial native) |
wim | 32:59c4b8f648d4 | 1187 | * Set the RS pin (0 = Command, 1 = Data). |
wim | 30:033048611c01 | 1188 | */ |
wim | 30:033048611c01 | 1189 | virtual void _setRS(bool value); |
wim | 30:033048611c01 | 1190 | |
wim | 30:033048611c01 | 1191 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial native) |
wim | 30:033048611c01 | 1192 | * Set the BL pin (0 = Backlight Off, 1 = Backlight On). |
wim | 30:033048611c01 | 1193 | */ |
wim | 30:033048611c01 | 1194 | virtual void _setBL(bool value); |
wim | 30:033048611c01 | 1195 | |
wim | 30:033048611c01 | 1196 | /** Implementation of pure Virtual Low level writes to LCD Bus (serial native) |
wim | 30:033048611c01 | 1197 | * Set the databus value (4 bit). |
wim | 30:033048611c01 | 1198 | */ |
wim | 30:033048611c01 | 1199 | virtual void _setData(int value); |
wim | 30:033048611c01 | 1200 | |
wim | 30:033048611c01 | 1201 | /** Low level writes to LCD serial bus only (serial native) |
wim | 30:033048611c01 | 1202 | */ |
wim | 30:033048611c01 | 1203 | virtual void _writeByte(int value); |
wim | 30:033048611c01 | 1204 | |
wim | 30:033048611c01 | 1205 | // SPI bus |
wim | 30:033048611c01 | 1206 | SPI *_spi; |
wim | 30:033048611c01 | 1207 | DigitalOut _cs; |
wim | 30:033048611c01 | 1208 | |
wim | 30:033048611c01 | 1209 | // controlbyte to select between data and command. Internal value for serial bus only |
wim | 30:033048611c01 | 1210 | char _controlbyte; |
wim | 30:033048611c01 | 1211 | |
wim | 30:033048611c01 | 1212 | //Backlight |
wim | 30:033048611c01 | 1213 | DigitalOut *_bl; |
wim | 30:033048611c01 | 1214 | }; |
wim | 34:e5a0dcb43ecc | 1215 | #endif /* Native SPI bus */ |
wim | 32:59c4b8f648d4 | 1216 | //-------- End TextLCD_SPI_N_3_24 ---------- |
wim | 30:033048611c01 | 1217 | |
simon | 1:ac48b187213c | 1218 | #endif |