Driver Library for our displays
Dependents: dm_bubbles dm_calc dm_paint dm_sdcard_with_adapter ... more
DmTftIli9341.cpp
00001 /********************************************************************************************** 00002 Copyright (c) 2014 DisplayModule. All rights reserved. 00003 00004 Redistribution and use of this source code, part of this source code or any compiled binary 00005 based on this source code is permitted as long as the above copyright notice and following 00006 disclaimer is retained. 00007 00008 DISCLAIMER: 00009 THIS SOFTWARE IS SUPPLIED "AS IS" WITHOUT ANY WARRANTIES AND SUPPORT. DISPLAYMODULE ASSUMES 00010 NO RESPONSIBILITY OR LIABILITY FOR THE USE OF THE SOFTWARE. 00011 ********************************************************************************************/ 00012 00013 //Tested on NUCLEO-F401RE, LPCXpresso11U68, LPCXpresso824-MAX platform. 00014 00015 #include "DmTftIli9341.h" 00016 #if defined (DM_TOOLCHAIN_ARDUINO) 00017 DmTftIli9341::DmTftIli9341(uint8_t cs, uint8_t dc) 00018 :DmTftBase(240, 320) 00019 #elif defined (DM_TOOLCHAIN_MBED) 00020 DmTftIli9341::DmTftIli9341(PinName cs, PinName dc, PinName mosi, PinName miso, PinName clk) 00021 :DmTftBase(240, 320), spi(mosi, miso, clk) 00022 #endif 00023 { 00024 _cs = cs; 00025 _dc = dc; 00026 } 00027 00028 DmTftIli9341::~DmTftIli9341() { 00029 #if defined (DM_TOOLCHAIN_MBED) 00030 delete _pinCS; 00031 delete _pinDC; 00032 00033 _pinCS = NULL; 00034 _pinDC = NULL; 00035 #endif 00036 } 00037 00038 void DmTftIli9341::writeBus(uint8_t data) { 00039 #if defined (DM_TOOLCHAIN_ARDUINO) 00040 SPCR = _spiSettings; // SPI Control Register 00041 SPDR = data; // SPI Data Register 00042 while(!(SPSR & _BV(SPIF))); // SPI Status Register Wait for transmission to finish 00043 #elif defined (DM_TOOLCHAIN_MBED) 00044 spi.write(data); 00045 #endif 00046 } 00047 00048 void DmTftIli9341::sendCommand(uint8_t index) { 00049 cbi(_pinDC, _bitmaskDC); 00050 writeBus(index); 00051 } 00052 00053 void DmTftIli9341::send8BitData(uint8_t data) { 00054 sbi(_pinDC, _bitmaskDC); 00055 writeBus(data); 00056 } 00057 00058 void DmTftIli9341::sendData(uint16_t data) { 00059 uint8_t dh = data>>8; 00060 uint8_t dl = data&0xff; 00061 00062 sbi(_pinDC, _bitmaskDC); 00063 writeBus(dh); 00064 writeBus(dl); 00065 } 00066 00067 void DmTftIli9341::setAddress(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) { 00068 sendCommand(0x2A); // Set Column 00069 sendData(x0); 00070 sendData(x1); 00071 00072 sendCommand(0x2B); // Set Page 00073 sendData(y0); 00074 sendData(y1); 00075 00076 sendCommand(0x2c); 00077 } 00078 00079 void DmTftIli9341::init(void) { 00080 setTextColor(BLACK, WHITE); 00081 #if defined (DM_TOOLCHAIN_ARDUINO) 00082 _pinCS = portOutputRegister(digitalPinToPort(_cs)); 00083 _bitmaskCS = digitalPinToBitMask(_cs); 00084 _pinDC = portOutputRegister(digitalPinToPort(_dc)); 00085 _bitmaskDC = digitalPinToBitMask(_dc); 00086 pinMode(_cs,OUTPUT); 00087 pinMode(_dc,OUTPUT); 00088 00089 sbi(_pinCS, _bitmaskCS); 00090 00091 SPI.begin(); 00092 SPI.setClockDivider(SPI_CLOCK_DIV2); // 8 MHz (full! speed!) 00093 SPI.setBitOrder(MSBFIRST); 00094 SPI.setDataMode(SPI_MODE0); 00095 _spiSettings = SPCR; 00096 #elif defined (DM_TOOLCHAIN_MBED) 00097 _pinCS = new DigitalOut(_cs); 00098 _pinDC = new DigitalOut(_dc); 00099 sbi(_pinCS, _bitmaskCS); 00100 00101 spi.format(8,0); 00102 spi.frequency(8000000); // Max SPI speed for display is 10 and for 17 for LPC15xx 00103 #endif 00104 cbi(_pinCS, _bitmaskCS); 00105 delay(135); // This much delay needed?? 00106 00107 // ILI9341 init 00108 sendCommand(0x11); 00109 delay(120); 00110 00111 sendCommand(0xCF); 00112 send8BitData(0x00); 00113 send8BitData(0xc3); 00114 send8BitData(0X30); 00115 00116 sendCommand(0xED); 00117 send8BitData(0x64); 00118 send8BitData(0x03); 00119 send8BitData(0X12); 00120 send8BitData(0X81); 00121 00122 sendCommand(0xE8); 00123 send8BitData(0x85); 00124 send8BitData(0x10); 00125 send8BitData(0x79); 00126 00127 sendCommand(0xCB); 00128 send8BitData(0x39); 00129 send8BitData(0x2C); 00130 send8BitData(0x00); 00131 send8BitData(0x34); 00132 send8BitData(0x02); 00133 00134 sendCommand(0xF7); 00135 send8BitData(0x20); 00136 00137 sendCommand(0xEA); 00138 send8BitData(0x00); 00139 send8BitData(0x00); 00140 00141 sendCommand(0xC0); //Power control 00142 send8BitData(0x22); //VRH[5:0] 00143 00144 sendCommand(0xC1); //Power control 00145 send8BitData(0x11); //SAP[2:0];BT[3:0] 00146 00147 sendCommand(0xC5); //VCM control 00148 send8BitData(0x3d); 00149 send8BitData(0x20); 00150 00151 sendCommand(0xC7); //VCM control2 00152 send8BitData(0xAA); //0xB0 00153 00154 sendCommand(0x36); // Memory Access Control 00155 send8BitData(0x08); 00156 00157 sendCommand(0x3A); 00158 send8BitData(0x55); 00159 00160 sendCommand(0xB1); 00161 send8BitData(0x00); 00162 send8BitData(0x13); 00163 00164 sendCommand(0xB6); // Display Function Control 00165 send8BitData(0x0A); 00166 send8BitData(0xA2); 00167 00168 sendCommand(0xF6); 00169 send8BitData(0x01); 00170 send8BitData(0x30); 00171 00172 sendCommand(0xF2); // 3Gamma Function Disable 00173 send8BitData(0x00); 00174 00175 sendCommand(0x26); //Gamma curve selected 00176 send8BitData(0x01); 00177 00178 sendCommand(0xE0); //Set Gamma 00179 send8BitData(0x0F); 00180 send8BitData(0x3F); 00181 send8BitData(0x2F); 00182 send8BitData(0x0C); 00183 send8BitData(0x10); 00184 send8BitData(0x0A); 00185 send8BitData(0x53); 00186 send8BitData(0XD5); 00187 send8BitData(0x40); 00188 send8BitData(0x0A); 00189 send8BitData(0x13); 00190 send8BitData(0x03); 00191 send8BitData(0x08); 00192 send8BitData(0x03); 00193 send8BitData(0x00); 00194 00195 sendCommand(0XE1); //Set Gamma 00196 send8BitData(0x00); 00197 send8BitData(0x00); 00198 00199 send8BitData(0x10); 00200 send8BitData(0x03); 00201 send8BitData(0x0F); 00202 send8BitData(0x05); 00203 send8BitData(0x2C); 00204 send8BitData(0xA2); 00205 send8BitData(0x3F); 00206 send8BitData(0x05); 00207 send8BitData(0x0E); 00208 send8BitData(0x0C); 00209 send8BitData(0x37); 00210 send8BitData(0x3C); 00211 send8BitData(0x0F); 00212 00213 sendCommand(0x11); //Exit Sleep 00214 delay(120); 00215 sendCommand(0x29); //Display on 00216 delay(50); 00217 sbi(_pinCS, _bitmaskCS); 00218 clearScreen(); 00219 } 00220 00221 /********************************************************************************************************* 00222 END FILE 00223 *********************************************************************************************************/ 00224 00225
Generated on Wed Jul 13 2022 04:21:40 by 1.7.2