Driver Library for our displays

Dependents:   dm_bubbles dm_calc dm_paint dm_sdcard_with_adapter ... more

Committer:
displaymodule
Date:
Tue May 13 09:31:24 2014 +0000
Revision:
0:d6ff5fa503e8
Child:
14:2db7065edbec
First version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
displaymodule 0:d6ff5fa503e8 1 /**********************************************************************************************
displaymodule 0:d6ff5fa503e8 2 Copyright (c) 2014 DisplayModule. All rights reserved.
displaymodule 0:d6ff5fa503e8 3
displaymodule 0:d6ff5fa503e8 4 Redistribution and use of this source code, part of this source code or any compiled binary
displaymodule 0:d6ff5fa503e8 5 based on this source code is permitted as long as the above copyright notice and following
displaymodule 0:d6ff5fa503e8 6 disclaimer is retained.
displaymodule 0:d6ff5fa503e8 7
displaymodule 0:d6ff5fa503e8 8 DISCLAIMER:
displaymodule 0:d6ff5fa503e8 9 THIS SOFTWARE IS SUPPLIED "AS IS" WITHOUT ANY WARRANTIES AND SUPPORT. DISPLAYMODULE ASSUMES
displaymodule 0:d6ff5fa503e8 10 NO RESPONSIBILITY OR LIABILITY FOR THE USE OF THE SOFTWARE.
displaymodule 0:d6ff5fa503e8 11 ********************************************************************************************/
displaymodule 0:d6ff5fa503e8 12
displaymodule 0:d6ff5fa503e8 13 #include "DmTftIli9341.h"
displaymodule 0:d6ff5fa503e8 14 #if defined (DM_TOOLCHAIN_ARDUINO)
displaymodule 0:d6ff5fa503e8 15 DmTftIli9341::DmTftIli9341(uint8_t cs, uint8_t dc)
displaymodule 0:d6ff5fa503e8 16 #elif defined (DM_TOOLCHAIN_MBED)
displaymodule 0:d6ff5fa503e8 17 DmTftIli9341::DmTftIli9341(uint8_t cs, uint8_t dc, uint8_t miso, uint8_t mosi, uint8_t clk)
displaymodule 0:d6ff5fa503e8 18 #endif
displaymodule 0:d6ff5fa503e8 19 : DmTftBase(240, 320){
displaymodule 0:d6ff5fa503e8 20 _cs = cs;
displaymodule 0:d6ff5fa503e8 21 _dc = dc;
displaymodule 0:d6ff5fa503e8 22 #if defined (DM_TOOLCHAIN_MBED)
displaymodule 0:d6ff5fa503e8 23 _miso = miso;
displaymodule 0:d6ff5fa503e8 24 _mosi = mosi;
displaymodule 0:d6ff5fa503e8 25 _clk = clk;
displaymodule 0:d6ff5fa503e8 26 #endif
displaymodule 0:d6ff5fa503e8 27 }
displaymodule 0:d6ff5fa503e8 28
displaymodule 0:d6ff5fa503e8 29 DmTftIli9341::~DmTftIli9341() {
displaymodule 0:d6ff5fa503e8 30 #if defined (DM_TOOLCHAIN_MBED)
displaymodule 0:d6ff5fa503e8 31 delete _pinCS;
displaymodule 0:d6ff5fa503e8 32 delete _pinDC;
displaymodule 0:d6ff5fa503e8 33 delete _spi;
displaymodule 0:d6ff5fa503e8 34
displaymodule 0:d6ff5fa503e8 35 _pinCS = NULL;
displaymodule 0:d6ff5fa503e8 36 _pinDC = NULL;
displaymodule 0:d6ff5fa503e8 37 _spi = NULL;
displaymodule 0:d6ff5fa503e8 38 #endif
displaymodule 0:d6ff5fa503e8 39 }
displaymodule 0:d6ff5fa503e8 40
displaymodule 0:d6ff5fa503e8 41 void DmTftIli9341::writeBus(uint8_t data) {
displaymodule 0:d6ff5fa503e8 42 #if defined (DM_TOOLCHAIN_ARDUINO)
displaymodule 0:d6ff5fa503e8 43 SPCR = _spiSettings; // SPI Control Register
displaymodule 0:d6ff5fa503e8 44 SPDR = data; // SPI Data Register
displaymodule 0:d6ff5fa503e8 45 while(!(SPSR & _BV(SPIF))); // SPI Status Register Wait for transmission to finish
displaymodule 0:d6ff5fa503e8 46 #elif defined (DM_TOOLCHAIN_MBED)
displaymodule 0:d6ff5fa503e8 47 _spi->write(data);
displaymodule 0:d6ff5fa503e8 48 #endif
displaymodule 0:d6ff5fa503e8 49 }
displaymodule 0:d6ff5fa503e8 50
displaymodule 0:d6ff5fa503e8 51 void DmTftIli9341::sendCommand(uint8_t index) {
displaymodule 0:d6ff5fa503e8 52 // cbi(_pinCS, _bitmaskCS);
displaymodule 0:d6ff5fa503e8 53 cbi(_pinDC, _bitmaskDC);
displaymodule 0:d6ff5fa503e8 54
displaymodule 0:d6ff5fa503e8 55 writeBus(index);
displaymodule 0:d6ff5fa503e8 56 // sbi(_pinCS, _bitmaskCS);
displaymodule 0:d6ff5fa503e8 57 }
displaymodule 0:d6ff5fa503e8 58
displaymodule 0:d6ff5fa503e8 59 void DmTftIli9341::send8BitData(uint8_t data) {
displaymodule 0:d6ff5fa503e8 60 //cbi(_pinCS, _bitmaskCS);
displaymodule 0:d6ff5fa503e8 61 sbi(_pinDC, _bitmaskDC);
displaymodule 0:d6ff5fa503e8 62 writeBus(data);
displaymodule 0:d6ff5fa503e8 63 //sbi(_pinCS, _bitmaskCS);
displaymodule 0:d6ff5fa503e8 64 }
displaymodule 0:d6ff5fa503e8 65
displaymodule 0:d6ff5fa503e8 66 void DmTftIli9341::sendData(uint16_t data) {
displaymodule 0:d6ff5fa503e8 67 uint8_t dh = data>>8;
displaymodule 0:d6ff5fa503e8 68 uint8_t dl = data&0xff;
displaymodule 0:d6ff5fa503e8 69
displaymodule 0:d6ff5fa503e8 70 //cbi(_pinCS, _bitmaskCS);
displaymodule 0:d6ff5fa503e8 71 sbi(_pinDC, _bitmaskDC);
displaymodule 0:d6ff5fa503e8 72 writeBus(dh);
displaymodule 0:d6ff5fa503e8 73 writeBus(dl);
displaymodule 0:d6ff5fa503e8 74 //sbi(_pinCS, _bitmaskCS);
displaymodule 0:d6ff5fa503e8 75 }
displaymodule 0:d6ff5fa503e8 76
displaymodule 0:d6ff5fa503e8 77 void DmTftIli9341::setAddress(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) {
displaymodule 0:d6ff5fa503e8 78 sendCommand(0x2A); // Set Column
displaymodule 0:d6ff5fa503e8 79 sendData(x0);
displaymodule 0:d6ff5fa503e8 80 sendData(x1);
displaymodule 0:d6ff5fa503e8 81
displaymodule 0:d6ff5fa503e8 82 sendCommand(0x2B); // Set Page
displaymodule 0:d6ff5fa503e8 83 sendData(y0);
displaymodule 0:d6ff5fa503e8 84 sendData(y1);
displaymodule 0:d6ff5fa503e8 85
displaymodule 0:d6ff5fa503e8 86 sendCommand(0x2c);
displaymodule 0:d6ff5fa503e8 87 }
displaymodule 0:d6ff5fa503e8 88
displaymodule 0:d6ff5fa503e8 89 void DmTftIli9341::init(void) {
displaymodule 0:d6ff5fa503e8 90 setTextColor(BLACK, WHITE);
displaymodule 0:d6ff5fa503e8 91 #if defined (DM_TOOLCHAIN_ARDUINO)
displaymodule 0:d6ff5fa503e8 92 _pinCS = portOutputRegister(digitalPinToPort(_cs));
displaymodule 0:d6ff5fa503e8 93 _bitmaskCS = digitalPinToBitMask(_cs);
displaymodule 0:d6ff5fa503e8 94 _pinDC = portOutputRegister(digitalPinToPort(_dc));
displaymodule 0:d6ff5fa503e8 95 _bitmaskDC = digitalPinToBitMask(_dc);
displaymodule 0:d6ff5fa503e8 96 pinMode(_cs,OUTPUT);
displaymodule 0:d6ff5fa503e8 97 pinMode(_dc,OUTPUT);
displaymodule 0:d6ff5fa503e8 98
displaymodule 0:d6ff5fa503e8 99 sbi(_pinCS, _bitmaskCS);
displaymodule 0:d6ff5fa503e8 100
displaymodule 0:d6ff5fa503e8 101 SPI.begin();
displaymodule 0:d6ff5fa503e8 102 SPI.setClockDivider(SPI_CLOCK_DIV2); // 8 MHz (full! speed!)
displaymodule 0:d6ff5fa503e8 103 SPI.setBitOrder(MSBFIRST);
displaymodule 0:d6ff5fa503e8 104 SPI.setDataMode(SPI_MODE0);
displaymodule 0:d6ff5fa503e8 105 _spiSettings = SPCR;
displaymodule 0:d6ff5fa503e8 106 #elif defined (DM_TOOLCHAIN_MBED)
displaymodule 0:d6ff5fa503e8 107 _pinCS = new DigitalOut((PinName)_cs);
displaymodule 0:d6ff5fa503e8 108 _pinDC = new DigitalOut((PinName)_dc);
displaymodule 0:d6ff5fa503e8 109 sbi(_pinCS, _bitmaskCS);
displaymodule 0:d6ff5fa503e8 110
displaymodule 0:d6ff5fa503e8 111 _spi = new SPI((PinName)_mosi, (PinName)_miso, (PinName)_clk);
displaymodule 0:d6ff5fa503e8 112 _spi->format(8,0);
displaymodule 0:d6ff5fa503e8 113 _spi->frequency(8000000); // Max SPI speed for display is 10 and for 17 for LPC15xx
displaymodule 0:d6ff5fa503e8 114 #endif
displaymodule 0:d6ff5fa503e8 115 cbi(_pinCS, _bitmaskCS);
displaymodule 0:d6ff5fa503e8 116 delay(135); // This much delay needed??
displaymodule 0:d6ff5fa503e8 117
displaymodule 0:d6ff5fa503e8 118 // ILI9341 init
displaymodule 0:d6ff5fa503e8 119 sendCommand(0x11);
displaymodule 0:d6ff5fa503e8 120 delay(120);
displaymodule 0:d6ff5fa503e8 121
displaymodule 0:d6ff5fa503e8 122 sendCommand(0xCF);
displaymodule 0:d6ff5fa503e8 123 send8BitData(0x00);
displaymodule 0:d6ff5fa503e8 124 send8BitData(0xc3);
displaymodule 0:d6ff5fa503e8 125 send8BitData(0X30);
displaymodule 0:d6ff5fa503e8 126
displaymodule 0:d6ff5fa503e8 127 sendCommand(0xED);
displaymodule 0:d6ff5fa503e8 128 send8BitData(0x64);
displaymodule 0:d6ff5fa503e8 129 send8BitData(0x03);
displaymodule 0:d6ff5fa503e8 130 send8BitData(0X12);
displaymodule 0:d6ff5fa503e8 131 send8BitData(0X81);
displaymodule 0:d6ff5fa503e8 132
displaymodule 0:d6ff5fa503e8 133 sendCommand(0xE8);
displaymodule 0:d6ff5fa503e8 134 send8BitData(0x85);
displaymodule 0:d6ff5fa503e8 135 send8BitData(0x10);
displaymodule 0:d6ff5fa503e8 136 send8BitData(0x79);
displaymodule 0:d6ff5fa503e8 137
displaymodule 0:d6ff5fa503e8 138 sendCommand(0xCB);
displaymodule 0:d6ff5fa503e8 139 send8BitData(0x39);
displaymodule 0:d6ff5fa503e8 140 send8BitData(0x2C);
displaymodule 0:d6ff5fa503e8 141 send8BitData(0x00);
displaymodule 0:d6ff5fa503e8 142 send8BitData(0x34);
displaymodule 0:d6ff5fa503e8 143 send8BitData(0x02);
displaymodule 0:d6ff5fa503e8 144
displaymodule 0:d6ff5fa503e8 145 sendCommand(0xF7);
displaymodule 0:d6ff5fa503e8 146 send8BitData(0x20);
displaymodule 0:d6ff5fa503e8 147
displaymodule 0:d6ff5fa503e8 148 sendCommand(0xEA);
displaymodule 0:d6ff5fa503e8 149 send8BitData(0x00);
displaymodule 0:d6ff5fa503e8 150 send8BitData(0x00);
displaymodule 0:d6ff5fa503e8 151
displaymodule 0:d6ff5fa503e8 152 sendCommand(0xC0); //Power control
displaymodule 0:d6ff5fa503e8 153 send8BitData(0x22); //VRH[5:0]
displaymodule 0:d6ff5fa503e8 154
displaymodule 0:d6ff5fa503e8 155 sendCommand(0xC1); //Power control
displaymodule 0:d6ff5fa503e8 156 send8BitData(0x11); //SAP[2:0];BT[3:0]
displaymodule 0:d6ff5fa503e8 157
displaymodule 0:d6ff5fa503e8 158 sendCommand(0xC5); //VCM control
displaymodule 0:d6ff5fa503e8 159 send8BitData(0x3d);
displaymodule 0:d6ff5fa503e8 160 send8BitData(0x20);
displaymodule 0:d6ff5fa503e8 161
displaymodule 0:d6ff5fa503e8 162 sendCommand(0xC7); //VCM control2
displaymodule 0:d6ff5fa503e8 163 send8BitData(0xAA); //0xB0
displaymodule 0:d6ff5fa503e8 164
displaymodule 0:d6ff5fa503e8 165 sendCommand(0x36); // Memory Access Control
displaymodule 0:d6ff5fa503e8 166 send8BitData(0x08);
displaymodule 0:d6ff5fa503e8 167
displaymodule 0:d6ff5fa503e8 168 sendCommand(0x3A);
displaymodule 0:d6ff5fa503e8 169 send8BitData(0x55);
displaymodule 0:d6ff5fa503e8 170
displaymodule 0:d6ff5fa503e8 171 sendCommand(0xB1);
displaymodule 0:d6ff5fa503e8 172 send8BitData(0x00);
displaymodule 0:d6ff5fa503e8 173 send8BitData(0x13);
displaymodule 0:d6ff5fa503e8 174
displaymodule 0:d6ff5fa503e8 175 sendCommand(0xB6); // Display Function Control
displaymodule 0:d6ff5fa503e8 176 send8BitData(0x0A);
displaymodule 0:d6ff5fa503e8 177 send8BitData(0xA2);
displaymodule 0:d6ff5fa503e8 178
displaymodule 0:d6ff5fa503e8 179 sendCommand(0xF6);
displaymodule 0:d6ff5fa503e8 180 send8BitData(0x01);
displaymodule 0:d6ff5fa503e8 181 send8BitData(0x30);
displaymodule 0:d6ff5fa503e8 182
displaymodule 0:d6ff5fa503e8 183 sendCommand(0xF2); // 3Gamma Function Disable
displaymodule 0:d6ff5fa503e8 184 send8BitData(0x00);
displaymodule 0:d6ff5fa503e8 185
displaymodule 0:d6ff5fa503e8 186 sendCommand(0x26); //Gamma curve selected
displaymodule 0:d6ff5fa503e8 187 send8BitData(0x01);
displaymodule 0:d6ff5fa503e8 188
displaymodule 0:d6ff5fa503e8 189 sendCommand(0xE0); //Set Gamma
displaymodule 0:d6ff5fa503e8 190 send8BitData(0x0F);
displaymodule 0:d6ff5fa503e8 191 send8BitData(0x3F);
displaymodule 0:d6ff5fa503e8 192 send8BitData(0x2F);
displaymodule 0:d6ff5fa503e8 193 send8BitData(0x0C);
displaymodule 0:d6ff5fa503e8 194 send8BitData(0x10);
displaymodule 0:d6ff5fa503e8 195 send8BitData(0x0A);
displaymodule 0:d6ff5fa503e8 196 send8BitData(0x53);
displaymodule 0:d6ff5fa503e8 197 send8BitData(0XD5);
displaymodule 0:d6ff5fa503e8 198 send8BitData(0x40);
displaymodule 0:d6ff5fa503e8 199 send8BitData(0x0A);
displaymodule 0:d6ff5fa503e8 200 send8BitData(0x13);
displaymodule 0:d6ff5fa503e8 201 send8BitData(0x03);
displaymodule 0:d6ff5fa503e8 202 send8BitData(0x08);
displaymodule 0:d6ff5fa503e8 203 send8BitData(0x03);
displaymodule 0:d6ff5fa503e8 204 send8BitData(0x00);
displaymodule 0:d6ff5fa503e8 205
displaymodule 0:d6ff5fa503e8 206 sendCommand(0XE1); //Set Gamma
displaymodule 0:d6ff5fa503e8 207 send8BitData(0x00);
displaymodule 0:d6ff5fa503e8 208 send8BitData(0x00);
displaymodule 0:d6ff5fa503e8 209
displaymodule 0:d6ff5fa503e8 210 send8BitData(0x10);
displaymodule 0:d6ff5fa503e8 211 send8BitData(0x03);
displaymodule 0:d6ff5fa503e8 212 send8BitData(0x0F);
displaymodule 0:d6ff5fa503e8 213 send8BitData(0x05);
displaymodule 0:d6ff5fa503e8 214 send8BitData(0x2C);
displaymodule 0:d6ff5fa503e8 215 send8BitData(0xA2);
displaymodule 0:d6ff5fa503e8 216 send8BitData(0x3F);
displaymodule 0:d6ff5fa503e8 217 send8BitData(0x05);
displaymodule 0:d6ff5fa503e8 218 send8BitData(0x0E);
displaymodule 0:d6ff5fa503e8 219 send8BitData(0x0C);
displaymodule 0:d6ff5fa503e8 220 send8BitData(0x37);
displaymodule 0:d6ff5fa503e8 221 send8BitData(0x3C);
displaymodule 0:d6ff5fa503e8 222 send8BitData(0x0F);
displaymodule 0:d6ff5fa503e8 223
displaymodule 0:d6ff5fa503e8 224 sendCommand(0x11); //Exit Sleep
displaymodule 0:d6ff5fa503e8 225 delay(120);
displaymodule 0:d6ff5fa503e8 226 sendCommand(0x29); //Display on
displaymodule 0:d6ff5fa503e8 227 delay(50);
displaymodule 0:d6ff5fa503e8 228 sbi(_pinCS, _bitmaskCS);
displaymodule 0:d6ff5fa503e8 229 clearScreen();
displaymodule 0:d6ff5fa503e8 230 }
displaymodule 0:d6ff5fa503e8 231
displaymodule 0:d6ff5fa503e8 232 /*********************************************************************************************************
displaymodule 0:d6ff5fa503e8 233 END FILE
displaymodule 0:d6ff5fa503e8 234 *********************************************************************************************************/
displaymodule 0:d6ff5fa503e8 235
displaymodule 0:d6ff5fa503e8 236