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@11:b842b8e332cb, 2015-02-20 (annotated)
- Committer:
- Geremia
- Date:
- Fri Feb 20 21:32:25 2015 +0000
- Revision:
- 11:b842b8e332cb
- Parent:
- 10:668cf78ff93a
added auto_gram_read_format() to TFt inits. Even if write is set to 16bit RGB color, for some controllers the read cmd outputs 18bit BGR. Now that function will autodetect and set internal flags accordingly, so pixelread() is always correct.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Geremia | 4:12ba0ecc2c1f | 1 | /* mbed UniGraphic library - Device specific class |
Geremia | 4:12ba0ecc2c1f | 2 | * Copyright (c) 2015 Giuliano Dianda |
Geremia | 4:12ba0ecc2c1f | 3 | * Released under the MIT License: http://mbed.org/license/mit |
Geremia | 4:12ba0ecc2c1f | 4 | */ |
Geremia | 4:12ba0ecc2c1f | 5 | #include "Protocols.h" |
Geremia | 4:12ba0ecc2c1f | 6 | #include "ILI9486.h" |
Geremia | 4:12ba0ecc2c1f | 7 | |
Geremia | 4:12ba0ecc2c1f | 8 | ////////////////////////////////////////////////////////////////////////////////// |
Geremia | 4:12ba0ecc2c1f | 9 | // display settings /////////////////////////////////////////////////////// |
Geremia | 4:12ba0ecc2c1f | 10 | ///////////////////////////////////////////////////////////////////////// |
Geremia | 4:12ba0ecc2c1f | 11 | |
dreschpe | 9:1749ae993cfe | 12 | // put in constructor |
dreschpe | 9:1749ae993cfe | 13 | //#define LCDSIZE_X 320 // display X pixels, TFTs are usually portrait view |
dreschpe | 9:1749ae993cfe | 14 | //#define LCDSIZE_Y 480 // display Y pixels |
Geremia | 4:12ba0ecc2c1f | 15 | |
Geremia | 4:12ba0ecc2c1f | 16 | |
Geremia | 4:12ba0ecc2c1f | 17 | |
dreschpe | 9:1749ae993cfe | 18 | ILI9486::ILI9486(proto_t displayproto, PortName port, PinName CS, PinName reset, PinName DC, PinName WR, PinName RD, const char *name , unsigned int LCDSIZE_X, unsigned int LCDSIZE_Y) |
Geremia | 4:12ba0ecc2c1f | 19 | : TFT(displayproto, port, CS, reset, DC, WR, RD, LCDSIZE_X, LCDSIZE_Y, name) |
Geremia | 4:12ba0ecc2c1f | 20 | { |
Geremia | 4:12ba0ecc2c1f | 21 | hw_reset(); |
Geremia | 4:12ba0ecc2c1f | 22 | BusEnable(true); |
Geremia | 7:bb0383b91104 | 23 | identify(); // will collect tftID and set mipistd flag |
Geremia | 4:12ba0ecc2c1f | 24 | init(); |
Geremia | 11:b842b8e332cb | 25 | auto_gram_read_format();// try to get read gram pixel format, could be 16bit or 18bit, RGB or BGR. Will set flags accordingly |
Geremia | 4:12ba0ecc2c1f | 26 | set_orientation(0); |
Geremia | 10:668cf78ff93a | 27 | // FastWindow(true); // most but not all controllers support this, even if datasheet tells they should. ILI9486 does not, at least in par mode |
Geremia | 4:12ba0ecc2c1f | 28 | cls(); |
Geremia | 4:12ba0ecc2c1f | 29 | locate(0,0); |
Geremia | 4:12ba0ecc2c1f | 30 | } |
dreschpe | 9:1749ae993cfe | 31 | ILI9486::ILI9486(proto_t displayproto, int Hz, PinName mosi, PinName miso, PinName sclk, PinName CS, PinName reset, PinName DC, const char *name, unsigned int LCDSIZE_X, unsigned int LCDSIZE_Y) |
Geremia | 4:12ba0ecc2c1f | 32 | : TFT(displayproto, Hz, mosi, miso, sclk, CS, reset, DC, LCDSIZE_X, LCDSIZE_Y, name) |
Geremia | 4:12ba0ecc2c1f | 33 | { |
Geremia | 4:12ba0ecc2c1f | 34 | hw_reset(); //TFT class forwards to Protocol class |
Geremia | 4:12ba0ecc2c1f | 35 | BusEnable(true); //TFT class forwards to Protocol class |
Geremia | 7:bb0383b91104 | 36 | identify(); // will collect tftID and set mipistd flag |
Geremia | 4:12ba0ecc2c1f | 37 | init(); // per display custom init cmd sequence, implemented here |
Geremia | 11:b842b8e332cb | 38 | auto_gram_read_format();// try to get read gram pixel format, could be 16bit or 18bit, RGB or BGR. Will set flags accordingly |
Geremia | 4:12ba0ecc2c1f | 39 | set_orientation(0); //TFT class does for MIPI standard and some ILIxxx |
Geremia | 10:668cf78ff93a | 40 | // FastWindow(true); // most but not all controllers support this, even if datasheet tells they should. ILI9486 does not, at least in par mode |
Geremia | 4:12ba0ecc2c1f | 41 | cls(); |
Geremia | 4:12ba0ecc2c1f | 42 | locate(0,0); |
Geremia | 4:12ba0ecc2c1f | 43 | } |
Geremia | 4:12ba0ecc2c1f | 44 | // reset and init the lcd controller |
Geremia | 4:12ba0ecc2c1f | 45 | void ILI9486::init() |
Geremia | 4:12ba0ecc2c1f | 46 | { |
Geremia | 4:12ba0ecc2c1f | 47 | /* Start Initial Sequence ----------------------------------------------------*/ |
Geremia | 4:12ba0ecc2c1f | 48 | |
Geremia | 4:12ba0ecc2c1f | 49 | wr_cmd8(0xF1); |
Geremia | 4:12ba0ecc2c1f | 50 | wr_data8(0x36); |
Geremia | 4:12ba0ecc2c1f | 51 | wr_data8(0x04); |
Geremia | 4:12ba0ecc2c1f | 52 | wr_data8(0x00); |
Geremia | 4:12ba0ecc2c1f | 53 | wr_data8(0x3C); |
Geremia | 4:12ba0ecc2c1f | 54 | wr_data8(0x0F); |
Geremia | 4:12ba0ecc2c1f | 55 | wr_data8(0x8F); |
Geremia | 4:12ba0ecc2c1f | 56 | |
Geremia | 4:12ba0ecc2c1f | 57 | |
Geremia | 4:12ba0ecc2c1f | 58 | wr_cmd8(0xF2); |
Geremia | 4:12ba0ecc2c1f | 59 | wr_data8(0x18); |
Geremia | 4:12ba0ecc2c1f | 60 | wr_data8(0xA3); |
Geremia | 4:12ba0ecc2c1f | 61 | wr_data8(0x12); |
Geremia | 4:12ba0ecc2c1f | 62 | wr_data8(0x02); |
Geremia | 4:12ba0ecc2c1f | 63 | wr_data8(0xb2); |
Geremia | 4:12ba0ecc2c1f | 64 | wr_data8(0x12); |
Geremia | 4:12ba0ecc2c1f | 65 | wr_data8(0xFF); |
Geremia | 4:12ba0ecc2c1f | 66 | wr_data8(0x10); |
Geremia | 4:12ba0ecc2c1f | 67 | wr_data8(0x00); |
Geremia | 4:12ba0ecc2c1f | 68 | |
Geremia | 4:12ba0ecc2c1f | 69 | wr_cmd8(0xF8); |
Geremia | 4:12ba0ecc2c1f | 70 | wr_data8(0x21); |
Geremia | 4:12ba0ecc2c1f | 71 | wr_data8(0x04); |
Geremia | 4:12ba0ecc2c1f | 72 | |
Geremia | 4:12ba0ecc2c1f | 73 | wr_cmd8(0xF9); |
Geremia | 4:12ba0ecc2c1f | 74 | wr_data8(0x00); |
Geremia | 4:12ba0ecc2c1f | 75 | wr_data8(0x08); |
Geremia | 4:12ba0ecc2c1f | 76 | |
Geremia | 4:12ba0ecc2c1f | 77 | wr_cmd8(0xC0); |
Geremia | 4:12ba0ecc2c1f | 78 | wr_data8(0x0f); //13 |
Geremia | 4:12ba0ecc2c1f | 79 | wr_data8(0x0f); //10 |
Geremia | 4:12ba0ecc2c1f | 80 | |
Geremia | 4:12ba0ecc2c1f | 81 | wr_cmd8(0xC1); |
Geremia | 4:12ba0ecc2c1f | 82 | wr_data8(0x42); //43 |
Geremia | 4:12ba0ecc2c1f | 83 | |
Geremia | 4:12ba0ecc2c1f | 84 | wr_cmd8(0xC2); |
Geremia | 4:12ba0ecc2c1f | 85 | wr_data8(0x22); |
Geremia | 4:12ba0ecc2c1f | 86 | |
Geremia | 4:12ba0ecc2c1f | 87 | wr_cmd8(0xC5); |
Geremia | 4:12ba0ecc2c1f | 88 | wr_data8(0x01); //00 |
Geremia | 4:12ba0ecc2c1f | 89 | wr_data8(0x29); //4D |
Geremia | 4:12ba0ecc2c1f | 90 | wr_data8(0x80); |
Geremia | 4:12ba0ecc2c1f | 91 | |
Geremia | 4:12ba0ecc2c1f | 92 | wr_cmd8(0xB6); |
Geremia | 4:12ba0ecc2c1f | 93 | wr_data8(0x00); |
Geremia | 4:12ba0ecc2c1f | 94 | wr_data8(0x02); //42 |
Geremia | 4:12ba0ecc2c1f | 95 | wr_data8(0x3b); |
Geremia | 4:12ba0ecc2c1f | 96 | |
Geremia | 4:12ba0ecc2c1f | 97 | wr_cmd8(0xB1); |
Geremia | 4:12ba0ecc2c1f | 98 | wr_data8(0xB0); //C0 |
Geremia | 4:12ba0ecc2c1f | 99 | wr_data8(0x11); |
Geremia | 4:12ba0ecc2c1f | 100 | |
Geremia | 4:12ba0ecc2c1f | 101 | wr_cmd8(0xB4); |
Geremia | 4:12ba0ecc2c1f | 102 | wr_data8(0x02); //01 |
Geremia | 4:12ba0ecc2c1f | 103 | |
Geremia | 4:12ba0ecc2c1f | 104 | wr_cmd8(0xE0); |
Geremia | 4:12ba0ecc2c1f | 105 | wr_data8(0x0F); |
Geremia | 4:12ba0ecc2c1f | 106 | wr_data8(0x18); |
Geremia | 4:12ba0ecc2c1f | 107 | wr_data8(0x15); |
Geremia | 4:12ba0ecc2c1f | 108 | wr_data8(0x09); |
Geremia | 4:12ba0ecc2c1f | 109 | wr_data8(0x0B); |
Geremia | 4:12ba0ecc2c1f | 110 | wr_data8(0x04); |
Geremia | 4:12ba0ecc2c1f | 111 | wr_data8(0x49); |
Geremia | 4:12ba0ecc2c1f | 112 | wr_data8(0x64); |
Geremia | 4:12ba0ecc2c1f | 113 | wr_data8(0x3D); |
Geremia | 4:12ba0ecc2c1f | 114 | wr_data8(0x08); |
Geremia | 4:12ba0ecc2c1f | 115 | wr_data8(0x15); |
Geremia | 4:12ba0ecc2c1f | 116 | wr_data8(0x06); |
Geremia | 4:12ba0ecc2c1f | 117 | wr_data8(0x12); |
Geremia | 4:12ba0ecc2c1f | 118 | wr_data8(0x07); |
Geremia | 4:12ba0ecc2c1f | 119 | wr_data8(0x00); |
Geremia | 4:12ba0ecc2c1f | 120 | |
Geremia | 4:12ba0ecc2c1f | 121 | wr_cmd8(0xE1); |
Geremia | 4:12ba0ecc2c1f | 122 | wr_data8(0x0F); |
Geremia | 4:12ba0ecc2c1f | 123 | wr_data8(0x38); |
Geremia | 4:12ba0ecc2c1f | 124 | wr_data8(0x35); |
Geremia | 4:12ba0ecc2c1f | 125 | wr_data8(0x0a); |
Geremia | 4:12ba0ecc2c1f | 126 | wr_data8(0x0c); |
Geremia | 4:12ba0ecc2c1f | 127 | wr_data8(0x03); |
Geremia | 4:12ba0ecc2c1f | 128 | wr_data8(0x4A); |
Geremia | 4:12ba0ecc2c1f | 129 | wr_data8(0x42); |
Geremia | 4:12ba0ecc2c1f | 130 | wr_data8(0x36); |
Geremia | 4:12ba0ecc2c1f | 131 | wr_data8(0x04); |
Geremia | 4:12ba0ecc2c1f | 132 | wr_data8(0x0F); |
Geremia | 4:12ba0ecc2c1f | 133 | wr_data8(0x03); |
Geremia | 4:12ba0ecc2c1f | 134 | wr_data8(0x1F); |
Geremia | 4:12ba0ecc2c1f | 135 | wr_data8(0x1B); |
Geremia | 4:12ba0ecc2c1f | 136 | wr_data8(0x00); |
Geremia | 4:12ba0ecc2c1f | 137 | |
Geremia | 4:12ba0ecc2c1f | 138 | wr_cmd8(0x20); // display inversion OFF |
Geremia | 4:12ba0ecc2c1f | 139 | |
Geremia | 4:12ba0ecc2c1f | 140 | wr_cmd8(0x36); // MEMORY_ACCESS_CONTROL (orientation stuff) |
Geremia | 4:12ba0ecc2c1f | 141 | wr_data8(0x48); |
Geremia | 4:12ba0ecc2c1f | 142 | |
Geremia | 4:12ba0ecc2c1f | 143 | wr_cmd8(0x3A); // COLMOD_PIXEL_FORMAT_SET |
Geremia | 4:12ba0ecc2c1f | 144 | wr_data8(0x55); // 16 bit pixel |
Geremia | 4:12ba0ecc2c1f | 145 | |
Geremia | 4:12ba0ecc2c1f | 146 | wr_cmd8(0x13); // Nomal Displaymode |
Geremia | 4:12ba0ecc2c1f | 147 | |
Geremia | 4:12ba0ecc2c1f | 148 | wr_cmd8(0x11); // sleep out |
Geremia | 4:12ba0ecc2c1f | 149 | wait_ms(150); |
Geremia | 4:12ba0ecc2c1f | 150 | |
Geremia | 4:12ba0ecc2c1f | 151 | wr_cmd8(0x29); // display on |
Geremia | 4:12ba0ecc2c1f | 152 | wait_ms(150); |
Geremia | 4:12ba0ecc2c1f | 153 | } |