UniGraphic-Fork for ST7920-LCD-controller and SH1106. Tested with 128x64 LCD with SPI and 128x64-OLED with IIC
Dependents: UniGraphic-St7920-Test AfficheurUTILECO
Fork of UniGraphic by
Fork of the UniGraphic-Library for monochrome LCDs with ST7920 controller and 128x64-IIC-OLED-Display with SH1106-Controller
Had to adapt LCD for following reasons:
- Give access to screenbuffer buffer[] to parent class
- pixel() and pixel_read() as they are hardware-dependent
- added reset-pin to IIC-Interface
GraphicDisplay:: sends buffer to LCD when auto_update is set to true.
Testprogram for ST7920 can be found here:
https://developer.mbed.org/users/charly/code/UniGraphic-St7920-Test/
Inits/ILI9486.cpp
- Committer:
- Geremia
- Date:
- 2015-02-17
- Revision:
- 7:bb0383b91104
- Parent:
- 4:12ba0ecc2c1f
- Child:
- 9:1749ae993cfe
File content as of revision 7:bb0383b91104:
/* mbed UniGraphic library - Device specific class * Copyright (c) 2015 Giuliano Dianda * Released under the MIT License: http://mbed.org/license/mit */ #include "Protocols.h" #include "ILI9486.h" ////////////////////////////////////////////////////////////////////////////////// // display settings /////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////// #define LCDSIZE_X 320 // display X pixels, TFTs are usually portrait view #define LCDSIZE_Y 480 // display Y pixels ILI9486::ILI9486(proto_t displayproto, PortName port, PinName CS, PinName reset, PinName DC, PinName WR, PinName RD, const char *name) : TFT(displayproto, port, CS, reset, DC, WR, RD, LCDSIZE_X, LCDSIZE_Y, name) { hw_reset(); BusEnable(true); identify(); // will collect tftID and set mipistd flag init(); set_orientation(0); cls(); locate(0,0); } ILI9486::ILI9486(proto_t displayproto, int Hz, PinName mosi, PinName miso, PinName sclk, PinName CS, PinName reset, PinName DC, const char *name) : TFT(displayproto, Hz, mosi, miso, sclk, CS, reset, DC, LCDSIZE_X, LCDSIZE_Y, name) { hw_reset(); //TFT class forwards to Protocol class BusEnable(true); //TFT class forwards to Protocol class identify(); // will collect tftID and set mipistd flag init(); // per display custom init cmd sequence, implemented here set_orientation(0); //TFT class does for MIPI standard and some ILIxxx cls(); locate(0,0); } // reset and init the lcd controller void ILI9486::init() { /* Start Initial Sequence ----------------------------------------------------*/ wr_cmd8(0xF1); wr_data8(0x36); wr_data8(0x04); wr_data8(0x00); wr_data8(0x3C); wr_data8(0x0F); wr_data8(0x8F); wr_cmd8(0xF2); wr_data8(0x18); wr_data8(0xA3); wr_data8(0x12); wr_data8(0x02); wr_data8(0xb2); wr_data8(0x12); wr_data8(0xFF); wr_data8(0x10); wr_data8(0x00); wr_cmd8(0xF8); wr_data8(0x21); wr_data8(0x04); wr_cmd8(0xF9); wr_data8(0x00); wr_data8(0x08); wr_cmd8(0xC0); wr_data8(0x0f); //13 wr_data8(0x0f); //10 wr_cmd8(0xC1); wr_data8(0x42); //43 wr_cmd8(0xC2); wr_data8(0x22); wr_cmd8(0xC5); wr_data8(0x01); //00 wr_data8(0x29); //4D wr_data8(0x80); wr_cmd8(0xB6); wr_data8(0x00); wr_data8(0x02); //42 wr_data8(0x3b); wr_cmd8(0xB1); wr_data8(0xB0); //C0 wr_data8(0x11); wr_cmd8(0xB4); wr_data8(0x02); //01 wr_cmd8(0xE0); wr_data8(0x0F); wr_data8(0x18); wr_data8(0x15); wr_data8(0x09); wr_data8(0x0B); wr_data8(0x04); wr_data8(0x49); wr_data8(0x64); wr_data8(0x3D); wr_data8(0x08); wr_data8(0x15); wr_data8(0x06); wr_data8(0x12); wr_data8(0x07); wr_data8(0x00); wr_cmd8(0xE1); wr_data8(0x0F); wr_data8(0x38); wr_data8(0x35); wr_data8(0x0a); wr_data8(0x0c); wr_data8(0x03); wr_data8(0x4A); wr_data8(0x42); wr_data8(0x36); wr_data8(0x04); wr_data8(0x0F); wr_data8(0x03); wr_data8(0x1F); wr_data8(0x1B); wr_data8(0x00); wr_cmd8(0x20); // display inversion OFF wr_cmd8(0x36); // MEMORY_ACCESS_CONTROL (orientation stuff) wr_data8(0x48); wr_cmd8(0x3A); // COLMOD_PIXEL_FORMAT_SET wr_data8(0x55); // 16 bit pixel wr_cmd8(0x13); // Nomal Displaymode wr_cmd8(0x11); // sleep out wait_ms(150); wr_cmd8(0x29); // display on wait_ms(150); }