emWin driver GUIDRV_CompactColor_16
Supported hardware
Controllers
This driver works with the following display controllers:
- Epson S1D13743, S1D19122
- Himax HX8301, HX8312A, HX8347, HX8340
- Hitachi HD66766, HD66772, HD66789
- Ilitek ILI9161, ILI9220, ILI9320, ILI9325
- LG Electronics LGDP4531
- MagnaChip D54E4PA7551
- Novatek NT39122, NT7573
- OriseTech SPFD5408, SPFD5420A, SPFD5414D
- Renesas R63401, R61509, R61516, R61505, R61580
- Samsung S6D0110A, S6D0117, S6D0129
- Sharp LR38825, LCY-A06003
- Sitronix ST7712, ST7628, ST7637
- Solomon SSD1289, SSD1298, SSD1355, SSD1963, SSD2119
- Toshiba JBT6K71
Bits per pixel
Supported color depth is 16 bpp.
Interfaces
The driver supports 8-bit parallel, 16 bit parallel and 3 pin SPI interface. Default mode is 8-bit parallel.
Display data RAM organization

The picture above shows the relation between the display memory and the SEG and COM lines of the LCD.
Additional RAM requirements
This LCD driver can be used with and without a display data cache, containing a complete copy of the contents of the LCD data RAM. The amount of memory used by the cache is: LCD_XSIZE x LCD_YSIZE x 2 bytes.
Using a cache is only recommended if a lot of drawing operations uses the XOR drawing mode. A cache would avoid reading the display data in this case. Normally the use of a cache is not recommended.
The driver can be used with a write buffer used for drawing multiple pixels of the same color. If multiple pixels of the same color should be drawn the driver first fills the buffer and then executes only one time the macro LCD_WRITEM_A1 to transfer the data to the display controller. The default buffer size is 500 bytes.
Additional driver functions
None.
Driver selection and configuration
To be able to use this driver the following macro definition needs to be added to the configuration file LCDConf.h:
#define LCD_USE_COMPACT_COLOR_16
After this define has been added the display driver assumes the driver specific configuration file LCDConf_CompactColor_16.h in the configuration folder. All further compile time configuration macros should be defined in this file.
Available configuration macros (compile time configuration)
Controller selection
The following table shows the available macro:
| Macro | Description |
|---|---|
| LCD_CONTROLLER | Selects the display controller to be used: 66700 - Sharp LR38825 66701 - Renesas R63401 66701 - Renesas R61509 66701 - OriseTech SPFD5420A 66701 - Ilitek ILI9326 66702 - Solomon SSD1289 66702 - Solomon SSD1298 66703 - Toshiba JBT6K71 66704 - Sharp LCY-A06003 66705 - Samsung S6D0129 66705 - Renesas R61505 66706 - MagnaChip D54E4PA7551 66707 - Himax HX8312 66708 - Ilitek ILI9320 66708 - Ilitek ILI9325 66708 - OriseTech SPFD5408 66708 - LG Electronics LGDP4531 66708 - Renesas R61580 66709 - Novatek NT39122 66709 - Sitronix ST7628 66709 - Sitronix ST7637 66709 - Renesas R61516 66709 - Epson S1D19122 66709 - Solomon SSD1355 66709 - Solomon SSD1963 66709 - Orisetech SPFD5414D 66710 - Novatek NT7573 66711 - Epson S1D13743 66712 - Himax HX8347 66712 - Himax HX8352 66713 - Himax HX8340 66766 - Hitachi HD66766 66766 - Samsung S6D0110A 66766 - Ilitec ILI9161 66772 - Hitachi HD66772 66772 - Samsung S6D0117 66772 - Sitronix ST7712 66772 - Himax HX8301 66772 - Ilitec ILI9220 66789 - Hitachi HD66789 |
Display configuration
The following table shows the available configuration macros:
| Macro | Description |
| LCD_MIRROR_X | Activate to mirror X-axis. |
| LCD_MIRROR_Y | Activate to mirror Y-axis. |
| LCD_SWAP_XY | Activate to swap X- and Y-axis. |
Hardware access
The following table shows the available configuration macros which can be defined in this file for configuring the hardware access:
| Macro | Description |
|---|---|
| LCD_NUM_DUMMY_READS | Number of required dummy reads if a read operation should be executed. The default value is 2. If using a serial interface the display controllers HD66766 and HD66772 need 5 dummy reads. Sharp LR38825 needs 3 dummy reads with a 8-bit bus. |
| LCD_REG01 | This macro is only required if a Himax HX8312A is used. Unfortunately the register 0x01 (Control register 1) contains orientation specific settings as well as common settings. So this macro should contain the contents of this register. |
| LCD_SERIAL_ID | With a serial 3 wire interface this macro defines the ID signal of the device ID code. It should be 0 (default) or 1. Please note: This macro is only used with the 3 wire protocoll for Hitachi HD66772, Samsung S6D0117, Himax HX8301 and Ilitek ILI9220. |
| LCD_USE_SERIAL_3PIN | This configuration macro has been implemented to support the 3 wire serial interface of the following controllers: Hitachi HD66772, Samsung S6D0117, Himax HX8301, Ilitek ILI9220. Should be set to 1 if the 3 wire serial interface is used. Default is 0. Please note: Do not use this macro with other display controllers! |
| LCD_USE_PARALLEL_16 | Should be set to 1 if the 16 bit parallel interface is used. Default is 0. |
| LCD_WRITE_BUFFER_SIZE | Defines the size of the write buffer. Using a write buffer increases the performance of the driver. If multiple pixels should be written with the same color, the driver first fills the buffer and then writes the contents of the buffer with one execution of the macro LCD_WRITEM_A1, instead of multiple macro executions. The default buffer size is 500 bytes. |
| LCD_WRITE_A0 | Write a byte to display controller with RS-line low. |
| LCD_WRITE_A1 | Write a byte to display controller with RS-line high. |
| LCD_READM_A1 | Read multiple bytes (8 bit parallel interface) or multiple words (16 bit parallel interface) from display controller with RS-line high. |
| LCD_WRITEM_A1 | Write multiple bytes (8 bit parallel interface) or multiple words (16 bit parallel interface) to display controller with RS-line high. |
| LCD_WRITEM_A0 | Write multiple bytes (8 bit parallel interface) or multiple words (16 bit parallel interface) to display controller with RS-line low. |
The driver initializes the ’Driver Output Mode’ and ’Entry Mode’ register itself. The user does not need to initialize this registers in LCD_X_InitController().
Available configuraion routines (run-time configuration)
The following table lists the available run-time configuration routines:
| Routine | Description |
|---|---|
| LCD_SetSizeEx() | Changes the size of the visible area. |
Configuration example
The following shows how to select the driver and how it can be configured:
LCDConf.h
As explained above it should include the following for selecting the driver:
#define LCD_USE_COMPACT_COLOR_16
LCDConf_CompactColor_16.h
This file contains the display driver specific configuration and could look as the following:
// // General configuration of LCD // #define LCD_CONTROLLER 66709 // Renesas R61516 #define LCD_BITSPERPIXEL 16 #define LCD_SWAP_RB 1 #define LCD_USE_PARALLEL_16 1 #define LCD_MIRROR_Y 1 // // Indirect interface configuration // void LCD_X_Write01_16(unsigned short c); void LCD_X_Write00_16(unsigned short c); void LCD_X_WriteM01_16(unsigned short * pData, int NumWords); void LCD_X_WriteM00_16(unsigned short * pData, int NumWords); void LCD_X_ReadM01_16 (unsigned short * pData, int NumWords); #define LCD_WRITE_A1(Word) LCD_X_Write01_16(Word) #define LCD_WRITE_A0(Word) LCD_X_Write00_16(Word) #define LCD_WRITEM_A1(Word, NumWords) LCD_X_WriteM01_16(Word, NumWords) #define LCD_WRITEM_A0(Word, NumWords) LCD_X_WriteM00_16(Word, NumWords) #define LCD_READM_A1(Word, NumWords) LCD_X_ReadM01_16(Word, NumWords)
Creating a display driver device
The following shows how to create a display driver device with this driver and how to configure it:
void LCD_X_Config(void) {
//
// Set display driver and color conversion
//
GUI_DEVICE_CreateAndLink(GUIDRV_COMPACT_COLOR_16, // Display driver
GUICC_M565, // Color conversion
0, 0);
//
// Display driver configuration
//
LCD_SetSizeEx(0, 240, 320); // Physical display size in pixels
}
GUIDRV_CompactColor_16
Head office Germany
US office 
