Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of TextLCD by
Diff: TextLCD.cpp
- Revision:
- 27:22d5086f6ba6
- Parent:
- 26:bd897a001012
- Child:
- 28:30fa94f7341c
--- a/TextLCD.cpp Fri May 30 15:05:13 2014 +0000 +++ b/TextLCD.cpp Fri Jun 13 19:02:26 2014 +0000 @@ -49,28 +49,25 @@ // Select and configure second LCD controller when needed if(_type==LCD40x4) { - _ctrl_idx=_LCDCtrl_1; // Select 2nd controller + _ctrl_idx=_LCDCtrl_1; // Select 2nd controller - _initCtrl(); // Init 2nd controller + _initCtrl(); // Init 2nd controller // Secondary LCD controller Clearscreen - _writeCommand(0x01); // cls, and set cursor to 0 + _writeCommand(0x01); // cls, and set cursor to 0 wait_ms(10); // The CLS command takes 1.64 ms. - // Since we are not using the Busy flag, Lets be safe and take 10 ms - + // Since we are not using the Busy flag, Lets be safe and take 10 ms } // Select and configure primary LCD controller - _ctrl_idx=_LCDCtrl_0; // Select primary controller + _ctrl_idx=_LCDCtrl_0; // Select primary controller _initCtrl(); // Init primary controller // Primary LCD controller Clearscreen - _writeCommand(0x01); // cls, and set cursor to 0 - + _writeCommand(0x01); // cls, and set cursor to 0 wait_ms(10); // The CLS command takes 1.64 ms. - // Since we are not using the Busy flag, Lets be safe and take 10 ms - + // Since we are not using the Busy flag, Lets be safe and take 10 ms } /** Init the LCD controller @@ -92,54 +89,68 @@ wait_us(40); // most instructions take 40us // Display is now in 4-bit mode + // Note: 4 bit mode is ignored for native SPI and I2C devices // Device specific initialisations for DC/DC converter to generate VLCD or VLED switch (_ctrl) { case ST7036: // 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 + _writeByte( 0x29 ); // 4-bit Databus, 2 Lines, Select Instruction Set = 1 wait_ms(30); // > 26,3ms _writeByte( 0x14 ); // Bias: 1/5, 2-Lines LCD wait_ms(30); // > 26,3ms _writeByte( 0x55 ); // Icon off, Booster on, Set Contrast C5, C4 wait_ms(30); // > 26,3ms - _writeByte( 0x6d ); // Voltagefollower On, Ampl ratio Rab2, Rab1, Rab0 + _writeByte( 0x6D ); // Voltagefollower On, Ampl ratio Rab2, Rab1, Rab0 wait_ms(200); // > 200ms! _writeByte( 0x78 ); // Set Contrast C3, C2, C1, C0 wait_ms(30); // > 26,3ms - _writeByte( 0x28 ); // Return to Instruction table 0 + _writeByte( 0x28 ); // Return to Instruction Set = 0 wait_ms(50); break; case ST7032_3V3: // ST7032 controller: Initialise Voltage booster for VLCD. VDD=3V3 - - _writeByte( 0x1c ); //Internal OSC frequency adjustment 183HZ, bias will be 1/4 + +// _writeByte( 0x39 ); //FUNCTION SET 8 bit,N=1 2-line display mode,5*7dot, Select Instruction Set = 1 + _writeByte( 0x29 ); //FUNCTION SET 4 bit, N=1 2-line display mode, 5*7dot, Select Instruction Set = 1 + //Note: 4 bit mode is ignored for native SPI and I2C devices + wait_us(30); + _writeByte( 0x1C ); //Internal OSC frequency adjustment 183HZ, bias will be 1/4 wait_us(30); _writeByte( 0x73 ); //Contrast control low byte wait_us(30); _writeByte( 0x57 ); //booster circuit is turned on. /ICON display off. /Contrast control high byte wait_us(30); - _writeByte( 0x6c ); //Follower control + _writeByte( 0x6C ); //Follower control wait_us(50); - _writeByte( 0x0c ); //DISPLAY ON, not needed +// _writeByte( 0x0C ); //DISPLAY ON, not needed +// _writeByte( 0x38 ); //FUNCTION SET 8 bit,N=1 2-line display mode,5*7dot, Return to Instruction Set = 0 + _writeByte( 0x28 ); //FUNCTION SET 4 bit, N=1 2-line display mode, 5*7dot, Return to Instruction Set = 0 + //Note: 4 bit mode is ignored for native SPI and I2C devices wait_us(30); break; //Check and fix booster disable case ST7032_5V: // ST7032 controller: Disable Voltage booster for VLCD. VDD=5V - - _writeByte( 0x1c ); //Internal OSC frequency adjustment 183HZ, bias will be 1/4 +// _writeByte( 0x39 ); //FUNCTION SET 8 bit,N=1 2-line display mode,5*7dot, Instruction Set = 1 + _writeByte( 0x29 ); //FUNCTION SET 4 bit, N=1 2-line display mode, 5*7dot, Select Instruction Set = 1 + //Note: 4 bit mode is ignored for native SPI and I2C devices + wait_us(30); + _writeByte( 0x1C ); //Internal OSC frequency adjustment 183HZ, bias will be 1/4 wait_us(30); _writeByte( 0x73 ); //Contrast control low byte wait_us(30); _writeByte( 0x57 ); //booster circuit is turned on. /ICON display off. /Contrast control high byte wait_us(30); - _writeByte( 0x6c ); //Follower control + _writeByte( 0x6C ); //Follower control wait_us(50); - _writeByte( 0x0c ); //DISPLAY ON --> remove, done later? +// _writeByte( 0x0C ); //DISPLAY ON --> remove, done later? +// _writeByte( 0x38 ); //FUNCTION SET 8 bit,N=1 2-line display mode,5*7dot, Instruction Set = 0 + _writeByte( 0x28 ); //FUNCTION SET 4 bit, N=1 2-line display mode, 5*7dot, Return to Instruction Set = 0 + //Note: 4 bit mode is ignored for native SPI and I2C devices wait_us(30); break; @@ -208,7 +219,8 @@ // All other LCD types are initialised as 2 Line displays (including LCD40x4) default: _writeCommand(0x28); // Function set 001 DL N F - - - // DL=0 (4 bits bus) + // DL=0 (4 bits bus) + // Note: 4 bit mode is ignored for native SPI and I2C devices // N=1 (2 lines) // F=0 (5x7 dots font, only option for 2 line display) // - (Don't care) @@ -240,8 +252,7 @@ _setCursorAndDisplayMode(_currentMode, CurOff_BlkOff); // Second LCD controller Clearscreen - _writeCommand(0x01); // cls, and set cursor to 0 - + _writeCommand(0x01); // cls, and set cursor to 0 wait_ms(10); // The CLS command takes 1.64 ms. // Since we are not using the Busy flag, Lets be safe and take 10 ms @@ -250,8 +261,7 @@ } // Primary LCD controller Clearscreen - _writeCommand(0x01); // cls, and set cursor to 0 - + _writeCommand(0x01); // cls, and set cursor to 0 wait_ms(10); // The CLS command takes 1.64 ms. // Since we are not using the Busy flag, Lets be safe and take 10 ms @@ -893,17 +903,17 @@ #if (MCP23008==1) // MCP23008 portexpander Init - _write_register(IODIR, 0x00); // All outputs - _write_register(IPOL, 0x00); // No reverse polarity - _write_register(GPINTEN, 0x00); // No interrupt - _write_register(DEFVAL, 0x00); // Default value to compare against for interrupts - _write_register(INTCON, 0x00); // No interrupt on changes - _write_register(IOCON, 0x00); // Interrupt polarity - _write_register(GPPU, 0x00); // No Pullup - _write_register(INTF, 0x00); // - _write_register(INTCAP, 0x00); // - _write_register(GPIO, 0x00); // Output/Input pins - _write_register(OLAT, 0x00); // Output Latch + _write_register(IODIR, 0x00); // All outputs + _write_register(IPOL, 0x00); // No reverse polarity + _write_register(GPINTEN, 0x00); // No interrupt + _write_register(DEFVAL, 0x00); // Default value to compare against for interrupts + _write_register(INTCON, 0x00); // No interrupt on changes + _write_register(IOCON, 0x00); // Interrupt polarity + _write_register(GPPU, 0x00); // No Pullup + _write_register(INTF, 0x00); // + _write_register(INTCAP, 0x00); // + _write_register(GPIO, 0x00); // Output/Input pins + _write_register(OLAT, 0x00); // Output Latch // Init the portexpander bus _lcd_bus = D_LCD_BUS_DEF; @@ -1264,8 +1274,6 @@ _bl = NULL; //Construct dummy pin } - _writeByte( 0x39 ); //FUNCTION SET 8 bit,N=1 2-line display mode,5*7dot IS=1 - wait_us(30); _init(); }