16*2Lcd Display
Dependents: CITY1082-i2c_master
Diff: TextLCD.cpp
- Revision:
- 42:1962dc501f94
- Parent:
- 41:111ca62e8a59
--- a/TextLCD.cpp Fri Nov 06 18:59:27 2015 +0000 +++ b/TextLCD.cpp Tue Jan 14 11:27:31 2020 +0000 @@ -24,6 +24,7 @@ * Fixed and Added more fonttable support for PCF2119R_3V3, Added HD66712 controller. * 2015, v21: WH, Added LCD32x2 defines and code, Fixed KS0073 DL=1 init for SPI, Added defines to reduce memory footprint (LCD_TWO_CTRL, LCD_CONTRAST, LCD_UTF8_FONT) * Added SPLC792A controller, Added UTF8_2_LCD decode for Cyrilic font (By Andriy Ribalko). Added setFont() + * 2019, v22?: AR Changed wait_ms to ThisThread::sleep_for and added (char) casts for int conversion on parameters passed to a couple of function definitions. MBED 5.xx * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -47,7 +48,7 @@ #include "TextLCD.h" #include "TextLCD_UDC.inc" #include "TextLCD_UTF8.inc" - + /** Create a TextLCD_Base interface * * @param type Sets the panel size/addressing mode (default = LCD16x2) @@ -77,7 +78,7 @@ */ void TextLCD_Base::_init(_LCDDatalength dl) { - wait_ms(100); // Wait 100ms to ensure powered up + ThisThread::sleep_for(100); // Wait 100ms to ensure powered up #if (LCD_TWO_CTRL == 1) // Select and configure second LCD controller when needed @@ -123,15 +124,15 @@ //------------------------------------------------------------------------------------------------- _writeNibble(0x3); // set 8 bit mode (MSN) and dummy LSN, | set 8 bit mode (MSN), | set dummy LSN, // remains in 8 bit mode | remains in 4 bit mode | remains in 4 bit mode - wait_ms(15); // + ThisThread::sleep_for(15); // _writeNibble(0x3); // set 8 bit mode (MSN) and dummy LSN, | set dummy LSN, | set 8bit mode (MSN), // remains in 8 bit mode | change to 8 bit mode | remains in 4 bit mode - wait_ms(15); // + ThisThread::sleep_for(15); // _writeNibble(0x3); // set 8 bit mode (MSN) and dummy LSN, | set 8 bit mode (MSN) and dummy LSN, | set dummy LSN, // remains in 8 bit mode | remains in 8 bit mode | change to 8 bit mode - wait_ms(15); // + ThisThread::sleep_for(15); // // Controller is now in 8 bit mode @@ -145,7 +146,7 @@ else { // Reset in 8 bit mode, final Function set will follow _writeCommand(0x30); // Function set 0 0 1 DL=1 N F x x - wait_ms(1); // most instructions take 40us + ThisThread::sleep_for(1); // most instructions take 40us } // Device specific initialisations: DC/DC converter to generate VLCD or VLED, number of lines etc @@ -442,10 +443,10 @@ // Saved to allow contrast change at later time } _writeCommand(0x50 | _icon_power | ((_contrast >> 4) & 0x03)); // Set Icon, Booster and Contrast High bits, 0 1 0 1 Ion Bon C5 C4 (IS=1) - wait_ms(10); // Wait 10ms to ensure powered up + ThisThread::sleep_for(10); // Wait 10ms to ensure powered up _writeCommand(0x68 | (LCD_ST7032_RAB & 0x07)); // Voltage follower, 0 1 1 0 FOn=1, Ampl ratio Rab2=1, Rab1=0, Rab0=0 (IS=1) - wait_ms(10); // Wait 10ms to ensure powered up + ThisThread::sleep_for(10); // Wait 10ms to ensure powered up _writeCommand(0x20 | _function); // Select Instruction Set = 0 @@ -518,10 +519,10 @@ } _writeCommand(0x50 | _icon_power | ((_contrast >> 4) & 0x03)); // Set Contrast C5, C4 (Instr Set 1) - wait_ms(10); // Wait 10ms to ensure powered up + ThisThread::sleep_for(10); // Wait 10ms to ensure powered up _writeCommand(0x68 | (LCD_ST7036_RAB & 0x07)); // Voltagefollower On = 1, Ampl ratio Rab2, Rab1, Rab0 = 1 0 1 (Instr Set 1) - wait_ms(10); // Wait 10ms to ensure powered up + ThisThread::sleep_for(10); // Wait 10ms to ensure powered up _writeCommand(0x20 | _function); // Set function, IS2,IS1 = 00 (Select Instruction Set = 0) @@ -691,7 +692,7 @@ _writeCommand(0x06); // Set ext entry mode, 0 0 0 0 0 1 BDC=1 COM1-32, BDS=0 SEG100-1 "Bottom View" (Ext Instr Set) // _writeCommand(0x05); // Set ext entry mode, 0 0 0 0 0 1 BDC=0 COM32-1, BDS=1 SEG1-100 "Top View" (Ext Instr Set) - wait_ms(5); // Wait to ensure completion or SSD1803 fails to set Top/Bottom after reset.. + ThisThread::sleep_for(5); // Wait to ensure completion or SSD1803 fails to set Top/Bottom after reset.. _writeCommand(0x08 | _lines); // Set ext function 0 0 0 0 1 FW BW NW 1,2,3 or 4 lines (Ext Instr Set) @@ -710,10 +711,10 @@ _icon_power = 0x0C; // Icon on, Booster on (Instr Set 1) // Saved to allow contrast change at later time _writeCommand(0x50 | _icon_power | ((_contrast >> 4) & 0x03)); // Set Power, Icon and Contrast, 0 1 0 1 Ion Bon C5 C4 (Instr Set 1) - wait_ms(10); // Wait 10ms to ensure powered up + ThisThread::sleep_for(10); // Wait 10ms to ensure powered up _writeCommand(0x68 | (LCD_SSD1_RAB & 0x07)); // Set Voltagefollower 0 1 1 0 Don = 1, Ampl ratio Rab2, Rab1, Rab0 = 1 1 0 (Instr Set 1) - wait_ms(10); // Wait 10ms to ensure powered up + ThisThread::sleep_for(10); // Wait 10ms to ensure powered up _writeCommand(0x20 | _function_1); // Set function, 0 0 1 DL N BE RE(1) REV // Select Extended Instruction Set 1 @@ -761,7 +762,7 @@ } // switch type _writeCommand(0x20 | _function | 0x01); // Set function, Select Instr Set = 1 - wait_ms(10); // Wait 10ms to ensure powered up + ThisThread::sleep_for(10); // Wait 10ms to ensure powered up // Note: Display from GA628 shows 12 chars. This is actually the right half of a 24x1 display. The commons have been connected in reverse order. _writeCommand(0x05); // Display Conf Set 0000 0, 1, P=0, Q=1 (Instr. Set 1) @@ -817,7 +818,7 @@ _contrast = LCD_PCF2_CONTRAST; _writeCommand(0x80 | 0x00 | (_contrast & 0x3F)); // VLCD_set (Instr. Set 1) 1, V=0, VA=contrast _writeCommand(0x80 | 0x40 | (_contrast & 0x3F)); // VLCD_set (Instr. Set 1) 1, V=1, VB=contrast - wait_ms(10); // Wait 10ms to ensure powered up + ThisThread::sleep_for(10); // Wait 10ms to ensure powered up _writeCommand(0x02); // Screen Config 0000 001, L=0 (Instr. Set 1) _writeCommand(0x08); // ICON Conf 0000 1, IM=0 (Char mode), IB=0 (no icon blink) DM=0 (no direct mode) (Instr. Set 1) @@ -841,7 +842,7 @@ case LCD24x1: _writeCommand(0x22); //FUNCTION SET 0 0 1 DL=0 4-bit, N=0/M=0 1-line/24 chars display mode, G=1 Vgen on, 0 //Note: 4 bit mode is ignored for I2C mode - wait_ms(10); // Wait 10ms to ensure powered up + ThisThread::sleep_for(10); // Wait 10ms to ensure powered up break; case LCD12x3D: // Special mode for KS0078 and PCF21XX @@ -849,13 +850,13 @@ case LCD12x4D: // Special mode for PCF21XX: _writeCommand(0x2E); //FUNCTION SET 0 0 1 DL=0 4-bit, N=1/M=1 4-line/12 chars display mode, G=1 VGen on, 0 //Note: 4 bit mode is ignored for I2C mode - wait_ms(10); // Wait 10ms to ensure powered up + ThisThread::sleep_for(10); // Wait 10ms to ensure powered up break; case LCD24x2: _writeCommand(0x2A); //FUNCTION SET 0 0 1 DL=0 4-bit, N=1/M=0 2-line/24 chars display mode, G=1 VGen on, 0 //Note: 4 bit mode is ignored for I2C mode - wait_ms(10); // Wait 10ms to ensure powered up + ThisThread::sleep_for(10); // Wait 10ms to ensure powered up break; default: @@ -878,7 +879,7 @@ // case LCD24x1: // _writeCommand(0x20); //FUNCTION SET 0 0 1 DL=0 4-bit, N=0/M=0 1-line/24 chars display mode, G=0 no Vgen, 0 //Note: 4 bit mode is ignored for I2C mode -// wait_ms(10); // Wait 10ms to ensure powered up +// ThisThread::sleep_for(10); // Wait 10ms to ensure powered up // break; case LCD12x3D: // Special mode for KS0078 and PCF21XX @@ -888,13 +889,13 @@ // _writeCommand(0x24); //FUNCTION SET 4 bit, N=0/M=1 4-line/12 chars display mode OK _writeCommand(0x2C); //FUNCTION SET 0 0 1 DL=0 4-bit, N=1/M=1 4-line/12 chars display mode, G=0 no Vgen, 0 OK //Note: 4 bit mode is ignored for I2C mode - wait_ms(10); // Wait 10ms to ensure powered up + ThisThread::sleep_for(10); // Wait 10ms to ensure powered up break; // case LCD24x2: // _writeCommand(0x28); //FUNCTION SET 4 bit, N=1/M=0 2-line/24 chars display mode //Note: 4 bit mode is ignored for I2C mode -// wait_ms(10); // Wait 10ms to ensure powered up +// ThisThread::sleep_for(10); // Wait 10ms to ensure powered up // break; default: @@ -912,7 +913,7 @@ // Note2: Vgen is switched off when the contrast voltage VA or VB is set to 0x00. //POR or Hardware Reset should be applied - wait_ms(10); // Wait 10ms to ensure powered up + ThisThread::sleep_for(10); // Wait 10ms to ensure powered up // Initialise Display configuration switch (_type) { @@ -957,7 +958,7 @@ _contrast = LCD_PCF2_CONTRAST; _writeCommand(0x80 | 0x00 | (_contrast & 0x3F)); // VLCD_set (Instr. Set 1) V=0, VA=contrast _writeCommand(0x80 | 0x40 | (_contrast & 0x3F)); // VLCD_set (Instr. Set 1) V=1, VB=contrast - wait_ms(10); // Wait 10ms to ensure powered up + ThisThread::sleep_for(10); // Wait 10ms to ensure powered up _writeCommand(0x02); // SCRN CONF (Instr. Set 1) L=0 _writeCommand(0x08); // ICON CONF (Instr. Set 1) IM=0 (Char mode) IB=0 (no icon blink) DM=0 (no direct mode) @@ -985,9 +986,9 @@ //@Todo: This may be needed to enable a warm reboot //_writeCommand(0x13); // Char mode, DC/DC off - //wait_ms(10); // Wait 10ms to ensure powered down + //ThisThread::sleep_for(10); // Wait 10ms to ensure powered down _writeCommand(0x17); // Char mode, DC/DC on - wait_ms(10); // Wait 10ms to ensure powered up + ThisThread::sleep_for(10); // Wait 10ms to ensure powered up // Initialise Display configuration switch (_type) { @@ -1175,7 +1176,7 @@ _writeCommand(0xDB); // Set VCOMH Deselect Lvl: 1 1 0 1 1 0 1 1 (Ext Instr Set, OLED) _writeCommand(0x30); // Set VCOMH Deselect Value: 0.83 x VCC - wait_ms(10); // Wait 10ms to ensure powered up + ThisThread::sleep_for(10); // Wait 10ms to ensure powered up //Test Fade/Blinking. Hard Blink on/off, No fade in/out ?? // _writeCommand(0x23); // Set (Ext Instr Set, OLED) @@ -1394,11 +1395,11 @@ // Saved to allow contrast change at later time _writeCommand(0x50 | _icon_power | ((_contrast >> 4) & 0x03)); // Set Icon, Booster and Contrast High bits, 0 1 0 1 Ion Bon C5 C4 (IS=1) - wait_ms(10); // Wait 10ms to ensure powered up + ThisThread::sleep_for(10); // Wait 10ms to ensure powered up _writeCommand(0x68 | (LCD_SPLC792A_RAB & 0x07)); // Voltage follower, 0 1 1 0 FOn=1, Ampl ratio Rab2=1, Rab1=0, Rab0=0 (IS=1) // Note: Follower circuit always on for SPLC792A, Bit3 is dont care - wait_ms(10); // Wait 10ms to ensure powered up + ThisThread::sleep_for(10); // Wait 10ms to ensure powered up _writeCommand(0x20 | _function); // Select Instruction Set = 0 @@ -1452,11 +1453,11 @@ // Controller general initialisations // _writeCommand(0x01); // Clear Display and set cursor to 0 -// wait_ms(10); // The CLS command takes 1.64 ms. +// ThisThread::sleep_for(10); // The CLS command takes 1.64 ms. // // Since we are not using the Busy flag, Lets be safe and take 10 ms _writeCommand(0x02); // Cursor Home, DDRAM Address to Origin - wait_ms(10); // The Return Home command takes 1.64 ms. + ThisThread::sleep_for(10); // The Return Home command takes 1.64 ms. // Since we are not using the Busy flag, Lets be safe and take 10 ms _writeCommand(0x06); // Entry Mode 0000 0 1 I/D S @@ -1494,7 +1495,7 @@ // Second LCD controller Clearscreen _writeCommand(0x01); // cls, and set cursor to 0 - wait_ms(20); // The CLS command takes 1.64 ms. + ThisThread::sleep_for(20); // The CLS command takes 1.64 ms. // Since we are not using the Busy flag, Lets be safe and take 10 ms _ctrl_idx=_LCDCtrl_0; // Select primary controller @@ -1503,7 +1504,7 @@ // Primary LCD controller Clearscreen _writeCommand(0x01); // cls, and set cursor to 0 - wait_ms(20); // The CLS command takes 1.64 ms. + ThisThread::sleep_for(20); // The CLS command takes 1.64 ms. // Since we are not using the Busy flag, Lets be safe and take 10 ms // Restore cursormode on primary LCD controller when needed @@ -1514,7 +1515,7 @@ #else // Support only one LCD controller _writeCommand(0x01); // cls, and set cursor to 0 - wait_ms(20); // The CLS command takes 1.64 ms. + ThisThread::sleep_for(20); // The CLS command takes 1.64 ms. // Since we are not using the Busy flag, Lets be safe and take 10 ms #endif @@ -2405,7 +2406,7 @@ case WS0010: _writeCommand(0x17); // Char mode, DC/DC on - wait_ms(10); // Wait 10ms to ensure powered up + ThisThread::sleep_for(10); // Wait 10ms to ensure powered up break; case KS0073: @@ -2503,7 +2504,7 @@ _writeCommand(0x40 | 0x00); // COM/SEG directions 0 1 0 0 C1, C2, S1, S2 (Instr Set 1) // C1=1: Com1-8 -> Com8-1; C2=1: Com9-16 -> Com16-9 // S1=1: Seg1-40 -> Seg40-1; S2=1: Seg41-80 -> Seg80-41 - wait_ms(5); // Wait to ensure completion or ST7070 fails to set Top/Bottom after reset.. + ThisThread::sleep_for(5); // Wait to ensure completion or ST7070 fails to set Top/Bottom after reset.. _writeCommand(0x20 | _function); // Set function, EXT=0 (Select Instr Set = 0) @@ -2556,7 +2557,7 @@ _writeCommand(0x40 | 0x0F); // COM/SEG directions 0 1 0 0 C1, C2, S1, S2 (Instr Set 1) // C1=1: Com1-8 -> Com8-1; C2=1: Com9-16 -> Com16-9 // S1=1: Seg1-40 -> Seg40-1; S2=1: Seg41-80 -> Seg80-41 - wait_ms(5); // Wait to ensure completion or ST7070 fails to set Top/Bottom after reset.. + ThisThread::sleep_for(5); // Wait to ensure completion or ST7070 fails to set Top/Bottom after reset.. _writeCommand(0x20 | _function); // Set function, EXT=0 (Select Instr Set = 0) @@ -3441,7 +3442,7 @@ // Write data to MCP23008 I2C portexpander // Used for mbed I2C bus expander void TextLCD_I2C::_writeRegister (int reg, int value) { - char data[] = {reg, value}; + char data[] = {(char)reg, (char)value}; _i2c->write(_slaveAddress, data, 2); } @@ -3525,7 +3526,7 @@ _spi->frequency(500000); //_spi.frequency(1000000); - wait_ms(100); // Wait 100ms to ensure LCD powered up + ThisThread::sleep_for(100); // Wait 100ms to ensure LCD powered up // Init the portexpander bus _lcd_bus = LCD_BUS_SPI_DEF; @@ -3735,7 +3736,7 @@ // RW=0 means write to controller. RW=1 means that controller will be read from after the next command. // Many native I2C controllers dont support this option and it is not used by this lib. // - char data[] = {_controlbyte, value}; + char data[] = {(char)_controlbyte, (char)value}; #if(LCD_I2C_ACK==1) //Controllers that support ACK