TextLCD
Revision 18:bd65dc10f27f, committed 2013-03-09
- Comitter:
- wim
- Date:
- Sat Mar 09 19:39:53 2013 +0000
- Parent:
- 17:652ab113bc2e
- Child:
- 19:c747b9e2e7b8
- Commit message:
- Added some UDCs, Updated documentation.
Changed in this revision
TextLCD.cpp | Show annotated file Show diff for this revision Revisions of this file |
TextLCD.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/TextLCD.cpp Sat Mar 02 16:51:01 2013 +0000 +++ b/TextLCD.cpp Sat Mar 09 19:39:53 2013 +0000 @@ -3,7 +3,8 @@ * 2013, v01: WH, Added LCD types, fixed LCD address issues, added Cursor and UDCs * 2013, v02: WH, Added I2C and SPI bus interfaces * 2013, v03: WH, Added support for LCD40x4 which uses 2 controllers - * 2013, v04: WH, Added support for Display On/Off, improved 4bit bootprocess + * 2013, v04: WH, Added support for Display On/Off, improved 4bit bootprocess + * 2013, v05: WH, Added support for 8x2B, added some UDCs * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -172,10 +173,32 @@ _writeByte(0x2); // 4-bit mode wait_us(40); // most instructions take 40us #endif + + // Display is now in 4-bit mode + +#if(0) + // ST7036 controller: Initialise Voltage booster for VLCD. VDD=5V + // Note: supports 1,2 or 3 lines + _writeByte( 0x29 ); // 4-bit Databus, 2 Lines, Select Instruction table 1 + wait_us(27); // > 26,3ms + _writeByte( 0x14 ); // Bias: 1/5, 2-Lines LCD + wait_us(30); // > 26,3ms + _writeByte( 0x55 ); // Icon off, Booster on, Set Contrast C5, C4 + wait_us(30); // > 26,3ms + _writeByte( 0x6d ); // Voltagefollower On, Ampl ratio Rab2, Rab1, Rab0 + wait_ms(200); // > 200ms! + _writeByte( 0x78 ); // Set Contrast C3, C2, C1, C0 + wait_us(30); // > 26,3ms + _writeByte( 0x28 ); // Return to Instruction table 0 + wait_ms(50); +#endif - // Display is now in 4-bit mode + // Initialise Display configuration switch (_type) { case LCD8x1: + case LCD8x2B: + //8x1 is a regular 1 line display + //8x2B is a special case of 16x1 _writeCommand(0x20); // Function set 001 DL N F - - // DL=0 (4 bits bus) // N=0 (1 line) @@ -611,7 +634,15 @@ switch (_type) { case LCD8x1: return 0x00 + column; - + + case LCD8x2B: + // LCD8x2B is a special layout of LCD16x1 + if (row==0) + return 0x00 + column; + else + return 0x08 + column; + + case LCD16x1: // LCD16x1 is a special layout of LCD8x2 if (column<8) @@ -672,7 +703,7 @@ case LCD16x2B: return 0x00 + (row * 40) + column; - case LCD8x2: + case LCD8x2: case LCD12x2: case LCD16x2: case LCD20x2: @@ -756,6 +787,7 @@ switch (_type) { case LCD8x1: case LCD8x2: + case LCD8x2B: return 8; case LCD12x2: @@ -793,6 +825,7 @@ return 1; case LCD8x2: + case LCD8x2B: case LCD12x2: case LCD16x2: case LCD16x2B:
--- a/TextLCD.h Sat Mar 02 16:51:01 2013 +0000 +++ b/TextLCD.h Sat Mar 09 19:39:53 2013 +0000 @@ -4,6 +4,7 @@ * 2013, v02: WH, Added I2C and SPI bus interfaces * 2013, v03: WH, Added support for LCD40x4 which uses 2 controllers * 2013, v04: WH, Added support for Display On/Off, improved 4bit bootprocess + * 2013, v05: WH, Added support for 8x2B, added some UDCs * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -92,7 +93,9 @@ const char udc_ao[] = {0x0E, 0x0A, 0x0E, 0x01, 0x0F, 0x11, 0x0F, 0x00}; //å const char udc_AE[] = {0x0F, 0x14, 0x14, 0x1F, 0x14, 0x14, 0x17, 0x00}; //Æ const char udc_0E[] = {0x0E, 0x13, 0x15, 0x15, 0x15, 0x19, 0x0E, 0x00}; //Ø -const char udc_AA[] = {0x0E, 0x0A, 0x0E, 0x11, 0x1F, 0x11, 0x11, 0x00}; //Å +const char udc_Ao[] = {0x0E, 0x0A, 0x0E, 0x11, 0x1F, 0x11, 0x11, 0x00}; //Å +const char udc_PO[] = {0x04, 0x0A, 0x0A, 0x1F, 0x1B, 0x1B, 0x1F, 0x00}; //Padlock Open +const char udc_PC[] = {0x1C, 0x10, 0x08, 0x1F, 0x1B, 0x1B, 0x1F, 0x00}; //Padlock Closed const char udc_0[] = {0x18, 0x14, 0x12, 0x11, 0x12, 0x14, 0x18, 0x00}; // |> const char udc_1[] = {0x03, 0x05, 0x09, 0x11, 0x09, 0x05, 0x03, 0x00}; // <| @@ -114,12 +117,17 @@ const char udc_Bat_Hi[] = {0x0E, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00}; // Battery Full const char udc_Bat_Ha[] = {0x0E, 0x11, 0x11, 0x1F, 0x1F, 0x1F, 0x1F, 0x00}; // Battery Half const char udc_Bat_Lo[] = {0x0E, 0x11, 0x11, 0x11, 0x11, 0x1F, 0x1F, 0x00}; // Battery Low +const char udc_AC[] = {0x0A, 0x0A, 0x1F, 0x11, 0x0E, 0x04, 0x04, 0x00}; // AC Power -const char udc_bar_1[] = {0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00}; // Bar 1 -const char udc_bar_2[] = {0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00}; // Bar 11 -const char udc_bar_3[] = {0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x00}; // Bar 111 -const char udc_bar_4[] = {0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x00}; // Bar 1111 -const char udc_bar_5[] = {0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00}; // Bar 11111 +//const char udc_smiley[] = {0x00, 0x0A, 0x00, 0x04, 0x11, 0x0E, 0x00, 0x00}; // Smiley +//const char udc_droopy[] = {0x00, 0x0A, 0x00, 0x04, 0x00, 0x0E, 0x11, 0x00}; // Droopey +//const char udc_note[] = {0x01, 0x03, 0x05, 0x09, 0x0B, 0x1B, 0x18, 0x00}; // Note + +//const char udc_bar_1[] = {0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00}; // Bar 1 +//const char udc_bar_2[] = {0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00}; // Bar 11 +//const char udc_bar_3[] = {0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x00}; // Bar 111 +//const char udc_bar_4[] = {0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x00}; // Bar 1111 +//const char udc_bar_5[] = {0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00}; // Bar 11111 /** A TextLCD interface for driving 4-bit HD44780-based LCDs @@ -134,6 +142,7 @@ enum LCDType { LCD8x1, /**< 8x1 LCD panel */ LCD8x2, /**< 8x2 LCD panel */ + LCD8x2B, /**< 8x2 LCD panel (actually 16x1) */ LCD12x2, /**< 12x2 LCD panel */ LCD12x4, /**< 12x4 LCD panel */ LCD16x1, /**< 16x1 LCD panel (actually 8x2) */