Diff: TextLCD.h
- Revision:
- 33:900a94bc7585
- Parent:
- 32:59c4b8f648d4
- Child:
- 34:e5a0dcb43ecc
diff -r 59c4b8f648d4 -r 900a94bc7585 TextLCD.h
--- a/TextLCD.h Fri Aug 22 19:50:49 2014 +0000
+++ b/TextLCD.h Thu Aug 28 15:44:08 2014 +0000
@@ -12,6 +12,8 @@
* 2014, v10: WH, Added Class for Native I2C controllers such as ST7032i, Added support for MCP23008 I2C portexpander, Added support for Adafruit module
* 2014, v11: WH, Added support for native I2C controllers such as PCF21XX, Improved the _initCtrl() method to deal with differences between all supported controllers
* 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)
+ * 2014, v13: WH, Added support for controllers US2066/SSD1311 (OLED), added setUDCBlink method for supported devices (eg SSD1803), fixed issue in setPower()
+ *@Todo Add AC780S/KS0066i
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -130,7 +132,7 @@
//
//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
+// 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
@@ -225,10 +227,15 @@
#define SSD1803_SA0 0x78
#define SSD1803_SA1 0x7A
-/* US2066 I2C slave address */
+/* US2066/SSD1311 I2C slave address */
#define US2066_SA0 0x78
#define US2066_SA1 0x7A
+/* AC780 I2C slave address */
+#define AC780_SA0 0x78
+#define AC780_SA1 0x7A
+#define AC780_SA2 0x7C
+#define AC780_SA3 0x7E
//Some native I2C controllers dont support ACK. Set define to '0' to allow code to proceed even without ACK
//#define LCD_I2C_ACK 0
@@ -285,30 +292,35 @@
#define LCD_C_PDN 0x00080000 /*Power Down */
-// Contrast setting, 5 significant bits (only supported for controllers with extended features)
+// Contrast setting, 6 significant bits (only supported for controllers with extended features)
// Voltage Multiplier setting, 2 or 3 significant bits (only supported for controllers with extended features)
#define LCD_DEF_CONTRAST 0x20
-//ST7032 EastRising display
-//ST7036 EA DOGM163 display
-//Contrast setting 5 significant bits
+//ST7032 EastRising ERC1602FS-4 display
+//Contrast setting 6 significant bits
//Voltage Multiplier setting 3 significant bits
#define LCD_ST7032_CONTRAST 0x18
#define LCD_ST7032_RAB 0x04
+//ST7036 EA DOGM1603 display
+//Contrast setting 6 significant bits
+//Voltage Multiplier setting 3 significant bits
#define LCD_ST7036_CONTRAST 0x28
#define LCD_ST7036_RAB 0x04
-
//SSD1803 EA DOGM204 display
-//Contrast setting 5 significant bits
+//Contrast setting 6 significant bits
//Voltage Multiplier setting 3 significant bits
#define LCD_SSD1_CONTRAST 0x28
#define LCD_SSD1_RAB 0x06
+//US2066/SSD1311 EastRising ER-OLEDM2002-4 display
+//Contrast setting 8 significant bits, use 6 for compatibility
+#define LCD_US20_CONTRAST 0x3F
+//#define LCD_US20_CONTRAST 0x1F
//PCF2113, PCF2119 display
-//Contrast setting 5 significant bits
+//Contrast setting 6 significant bits
//Voltage Multiplier setting 2 significant bits
#define LCD_PCF2_CONTRAST 0x20
#define LCD_PCF2_S12 0x02
@@ -379,7 +391,7 @@
/** A TextLCD interface for driving 4-bit HD44780-based LCDs
*
- * @brief Currently supports 8x1, 8x2, 12x2, 12x4, 16x1, 16x2, 16x4, 20x2, 20x4, 24x2, 24x4, 40x2 and 40x4 panels
+ * @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
*
*/
@@ -387,6 +399,7 @@
public:
/** LCD panel format */
+ // The commented out types exist but have not yet been tested with the library
enum LCDType {
// LCD6x1 = (LCD_T_A | LCD_T_C6 | LCD_T_R1), /**< 6x1 LCD panel */
// LCD6x2 = (LCD_T_A | LCD_T_C6 | LCD_T_R2), /**< 6x2 LCD panel */
@@ -422,10 +435,12 @@
// LCD24x3D = (LCD_T_D | LCD_T_C24 | LCD_T_R3), /**< 24x3 LCD panel */
// LCD24x3D1 = (LCD_T_D | LCD_T_C24 | LCD_T_R3), /**< 24x3 LCD panel */
LCD24x4D = (LCD_T_D | LCD_T_C24 | LCD_T_R4), /**< 24x4 LCD panel, special mode KS0078 */
-// LCD32x1 = (LCD_T_A | LCD_T_C32 | LCD_T_R1), /**< 32x1 LCD panel */
+// LCD32x1 = (LCD_T_A | LCD_T_C32 | LCD_T_R1), /**< 32x1 LCD panel */
+// LCD32x1C = (LCD_T_C | LCD_T_C32 | LCD_T_R1), /**< 32x1 LCD panel (actually 16x2) */
// LCD32x2 = (LCD_T_A | LCD_T_C32 | LCD_T_R2), /**< 32x2 LCD panel */
// LCD32x4 = (LCD_T_A | LCD_T_C32 | LCD_T_R4), /**< 32x4 LCD panel */
// LCD40x1 = (LCD_T_A | LCD_T_C40 | LCD_T_R1), /**< 40x1 LCD panel */
+// LCD40x1C = (LCD_T_C | LCD_T_C40 | LCD_T_R1), /**< 40x1 LCD panel (actually 20x2) */
LCD40x2 = (LCD_T_A | LCD_T_C40 | LCD_T_R2), /**< 40x2 LCD panel */
LCD40x4 = (LCD_T_E | LCD_T_C40 | LCD_T_R4) /**< 40x4 LCD panel, Two controller version */
};
@@ -446,10 +461,12 @@
PCF2119_3V3 = 10 | (LCD_C_PAR | LCD_C_I2C | LCD_C_BST | LCD_C_CTR), /**< PCF2119 3V3 with Booster, 4/8 bit, I2C */
// PCF2119_5V = 11 | (LCD_C_PAR | LCD_C_I2C), /**< PCF2119 5V no Booster, 4/8 bit, I2C */
AIP31068 = 12 | (LCD_C_SPI3_9 | LCD_C_I2C | LCD_C_BST), /**< AIP31068 I2C, SPI3 */
- SSD1803_3V3 = 13 | (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 */
-// SSD1803_5V = 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 */
-// US2066_3V3 = 15 | (LCD_C_PAR | LCD_C_SPI3_24 | LCD_C_I2C | LCD_C_BST | LCD_C_CTR | LCD_C_PDN) /**< US2066 3V3 with Booster, 4/8 bit, I2C, SPI3 */
-// PT6314 = 16 | (LCD_C_PAR | LCD_C_SPI3_16 | LCD_C_CTR | LCD_C_PDN) /**< PT6314 VFD, 4/8 bit, SPI3 */
+ SSD1803_3V3 = 13 | (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 */
+// SSD1803_5V = 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 */
+ US2066_3V3 = 15 | (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 = 16 | (LCD_C_PAR | LCD_C_SPI3_16 | LCD_C_CTR | LCD_C_PDN), /**< PT6314 VFD, 4/8 bit, SPI3 */
+// AC780 = 17 | (LCD_C_PAR | LCD_C_SPI4 | LCD_C_I2C | LCD_C_PDN), /**< AC780 4/8 bit, SPI, I2C */
+// KS0066 = 18 | (LCD_C_PAR | LCD_C_SPI4 | LCD_C_I2C | LCD_C_PDN) /**< KS0066i == AC780 4/8 bit, SPI, I2C */
};
@@ -473,6 +490,19 @@
LightOn /**< Backlight On */
};
+ /** LCD Blink control (UDC), supported for some Controllers */
+ enum LCDBlink {
+ BlinkOff, /**< Blink Off */
+ BlinkOn /**< Blink On */
+ };
+
+ /** LCD Orientation control, supported for some Controllers */
+ enum LCDOrient {
+ Top, /**< Top view */
+ Bottom /**< Upside down view */
+ };
+
+
#if DOXYGEN_ONLY
/** Write a character to the LCD
*
@@ -544,13 +574,20 @@
*/
void setBacklight(LCDBacklight backlightMode);
- /** Set User Defined Characters
+ /** Set User Defined Characters (UDC)
*
* @param unsigned char c The Index of the UDC (0..7)
* @param char *udc_data The bitpatterns for the UDC (8 bytes of 5 significant bits)
*/
void setUDC(unsigned char c, char *udc_data);
+ /** Set UDC Blink
+ * setUDCBlink method is supported by some compatible devices (eg SSD1803)
+ *
+ * @param blinkMode The Blink mode (BlinkOff, BlinkOn)
+ */
+ void setUDCBlink(LCDBlink blinkMode);
+
/** Set Contrast
* setContrast method is supported by some compatible devices (eg ST7032i) that have onboard LCD voltage generation
* Code imported from fork by JH1PJL
@@ -560,7 +597,6 @@
*/
void setContrast(unsigned char c = LCD_DEF_CONTRAST);
-
/** Set Power
* setPower method is supported by some compatible devices (eg SSD1803) that have power down modes
*
@@ -569,6 +605,14 @@
*/
void setPower(bool powerOn = true);
+ /** Set Orient
+ * setOrient method is supported by some compatible devices (eg SSD1803, US2066) that have top/bottom view modes
+ *
+ * @param LCDOrient orient Orientation
+ * @return none
+ */
+ void setOrient(LCDOrient orient = Top);
+
//test
// void _initCtrl();
@@ -626,7 +670,7 @@
* Methods resets the RS bit and provides the required timing for the command.
*/
void _writeCommand(int command);
-
+
/** Low level data byte write operation to LCD controller (serial or parallel).
* Methods sets the RS bit and provides the required timing for the data.
*/
@@ -656,7 +700,7 @@
* Depending on the RS pin this byte will be interpreted as data or command
*/
virtual void _writeByte(int value);
-
+
//Display type
LCDType _type;
int _nr_cols;
@@ -980,9 +1024,6 @@
SPI *_spi;
DigitalOut _cs;
-//Test
- DigitalOut _ps;
-
// controlbyte to select between data and command. Internal value for serial bus only
char _controlbyte;
@@ -1119,8 +1160,6 @@
#endif
#if(1)
-//Code to be checked out on logic analyser. Not yet tested on hardware..
-
//------- Start TextLCD_SPI_N_3_24 ---------
/** Create a TextLCD interface using a controller with native SPI3 24 bits interface
@@ -1234,12 +1273,8 @@
char _controlbyte;
//Backlight
- DigitalOut *_bl;
-
-
-//Test
- DigitalOut _ps;
-
+ DigitalOut *_bl;
+
};
//---------- End TextLCD_I2C_N ------------