Driver Library with inverted screen and increased SPI speed (16MHz). You need to use this library with the sx1280
Dependents: MSNV2-Terminal_V1-6 SX1280DevKit SX126xDevKit SX126xDevKit ... more
Fork of DmTftLibrary by
DmTftHX8353C.cpp@17:0e2203ae4cec, 2016-11-11 (annotated)
- Committer:
- GregCr
- Date:
- Fri Nov 11 12:48:02 2016 +0000
- Revision:
- 17:0e2203ae4cec
- Parent:
- 14:2db7065edbec
typo
Who changed what in which revision?
User | Revision | Line number | New 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 | 14:2db7065edbec | 13 | //Tested on NUCLEO-F401RE, LPCXpresso11U68 platform. |
displaymodule | 0:d6ff5fa503e8 | 14 | |
displaymodule | 14:2db7065edbec | 15 | #include "DmTftHX8353C.h" |
displaymodule | 14:2db7065edbec | 16 | #if defined (DM_TOOLCHAIN_ARDUINO) |
displaymodule | 14:2db7065edbec | 17 | DmTftHX8353C::DmTftHX8353C(uint8_t mosi, uint8_t clk, uint8_t cs, uint8_t dc, uint8_t rst) : DmTftBase(128,160) |
displaymodule | 14:2db7065edbec | 18 | #elif defined (DM_TOOLCHAIN_MBED) |
displaymodule | 14:2db7065edbec | 19 | DmTftHX8353C::DmTftHX8353C(PinName mosi, PinName clk, PinName cs, PinName dc, PinName rst) : DmTftBase(128,160) |
displaymodule | 14:2db7065edbec | 20 | #endif |
displaymodule | 14:2db7065edbec | 21 | { |
displaymodule | 0:d6ff5fa503e8 | 22 | _mosi = mosi; |
displaymodule | 0:d6ff5fa503e8 | 23 | _clk = clk; |
displaymodule | 0:d6ff5fa503e8 | 24 | _cs = cs; |
displaymodule | 0:d6ff5fa503e8 | 25 | _dc = dc; |
displaymodule | 0:d6ff5fa503e8 | 26 | _rst = rst; |
displaymodule | 0:d6ff5fa503e8 | 27 | } |
displaymodule | 0:d6ff5fa503e8 | 28 | |
displaymodule | 0:d6ff5fa503e8 | 29 | DmTftHX8353C::~DmTftHX8353C() { |
displaymodule | 0:d6ff5fa503e8 | 30 | #if defined (DM_TOOLCHAIN_MBED) |
displaymodule | 0:d6ff5fa503e8 | 31 | delete _pinMOSI; |
displaymodule | 0:d6ff5fa503e8 | 32 | delete _pinCLK; |
displaymodule | 0:d6ff5fa503e8 | 33 | delete _pinCS; |
displaymodule | 0:d6ff5fa503e8 | 34 | delete _pinDC; |
displaymodule | 0:d6ff5fa503e8 | 35 | delete _pinRST; |
displaymodule | 0:d6ff5fa503e8 | 36 | |
displaymodule | 0:d6ff5fa503e8 | 37 | _pinMOSI = NULL; |
displaymodule | 0:d6ff5fa503e8 | 38 | _pinCLK = NULL; |
displaymodule | 0:d6ff5fa503e8 | 39 | _pinCS = NULL; |
displaymodule | 0:d6ff5fa503e8 | 40 | _pinDC = NULL; |
displaymodule | 0:d6ff5fa503e8 | 41 | _pinRST = NULL; |
displaymodule | 0:d6ff5fa503e8 | 42 | #endif |
displaymodule | 0:d6ff5fa503e8 | 43 | } |
displaymodule | 0:d6ff5fa503e8 | 44 | |
displaymodule | 0:d6ff5fa503e8 | 45 | void DmTftHX8353C::writeBus(uint8_t data) { |
displaymodule | 0:d6ff5fa503e8 | 46 | if (data & 0x80) { |
displaymodule | 0:d6ff5fa503e8 | 47 | sbi(_pinMOSI, _bitmaskMOSI); |
displaymodule | 0:d6ff5fa503e8 | 48 | } |
displaymodule | 0:d6ff5fa503e8 | 49 | else { |
displaymodule | 0:d6ff5fa503e8 | 50 | cbi(_pinMOSI, _bitmaskMOSI); |
displaymodule | 0:d6ff5fa503e8 | 51 | } |
displaymodule | 0:d6ff5fa503e8 | 52 | pulse_low(_pinCLK, _bitmaskCLK); |
displaymodule | 0:d6ff5fa503e8 | 53 | |
displaymodule | 0:d6ff5fa503e8 | 54 | if (data & 0x40) { |
displaymodule | 0:d6ff5fa503e8 | 55 | sbi(_pinMOSI, _bitmaskMOSI); |
displaymodule | 0:d6ff5fa503e8 | 56 | } |
displaymodule | 0:d6ff5fa503e8 | 57 | else { |
displaymodule | 0:d6ff5fa503e8 | 58 | cbi(_pinMOSI, _bitmaskMOSI); |
displaymodule | 0:d6ff5fa503e8 | 59 | } |
displaymodule | 0:d6ff5fa503e8 | 60 | pulse_low(_pinCLK, _bitmaskCLK); |
displaymodule | 0:d6ff5fa503e8 | 61 | |
displaymodule | 0:d6ff5fa503e8 | 62 | if (data & 0x20) { |
displaymodule | 0:d6ff5fa503e8 | 63 | sbi(_pinMOSI, _bitmaskMOSI); |
displaymodule | 0:d6ff5fa503e8 | 64 | } |
displaymodule | 0:d6ff5fa503e8 | 65 | else { |
displaymodule | 0:d6ff5fa503e8 | 66 | cbi(_pinMOSI, _bitmaskMOSI); |
displaymodule | 0:d6ff5fa503e8 | 67 | } |
displaymodule | 0:d6ff5fa503e8 | 68 | pulse_low(_pinCLK, _bitmaskCLK); |
displaymodule | 0:d6ff5fa503e8 | 69 | |
displaymodule | 0:d6ff5fa503e8 | 70 | if (data & 0x10) { |
displaymodule | 0:d6ff5fa503e8 | 71 | sbi(_pinMOSI, _bitmaskMOSI); |
displaymodule | 0:d6ff5fa503e8 | 72 | } |
displaymodule | 0:d6ff5fa503e8 | 73 | else { |
displaymodule | 0:d6ff5fa503e8 | 74 | cbi(_pinMOSI, _bitmaskMOSI); |
displaymodule | 0:d6ff5fa503e8 | 75 | } |
displaymodule | 0:d6ff5fa503e8 | 76 | pulse_low(_pinCLK, _bitmaskCLK); |
displaymodule | 0:d6ff5fa503e8 | 77 | |
displaymodule | 0:d6ff5fa503e8 | 78 | if (data & 0x08) { |
displaymodule | 0:d6ff5fa503e8 | 79 | sbi(_pinMOSI, _bitmaskMOSI); |
displaymodule | 0:d6ff5fa503e8 | 80 | } |
displaymodule | 0:d6ff5fa503e8 | 81 | else { |
displaymodule | 0:d6ff5fa503e8 | 82 | cbi(_pinMOSI, _bitmaskMOSI); |
displaymodule | 0:d6ff5fa503e8 | 83 | } |
displaymodule | 0:d6ff5fa503e8 | 84 | pulse_low(_pinCLK, _bitmaskCLK); |
displaymodule | 0:d6ff5fa503e8 | 85 | |
displaymodule | 0:d6ff5fa503e8 | 86 | if (data & 0x04) { |
displaymodule | 0:d6ff5fa503e8 | 87 | sbi(_pinMOSI, _bitmaskMOSI); |
displaymodule | 0:d6ff5fa503e8 | 88 | } |
displaymodule | 0:d6ff5fa503e8 | 89 | else { |
displaymodule | 0:d6ff5fa503e8 | 90 | cbi(_pinMOSI, _bitmaskMOSI); |
displaymodule | 0:d6ff5fa503e8 | 91 | } |
displaymodule | 0:d6ff5fa503e8 | 92 | pulse_low(_pinCLK, _bitmaskCLK); |
displaymodule | 0:d6ff5fa503e8 | 93 | |
displaymodule | 0:d6ff5fa503e8 | 94 | if (data & 0x02) { |
displaymodule | 0:d6ff5fa503e8 | 95 | sbi(_pinMOSI, _bitmaskMOSI); |
displaymodule | 0:d6ff5fa503e8 | 96 | } |
displaymodule | 0:d6ff5fa503e8 | 97 | else { |
displaymodule | 0:d6ff5fa503e8 | 98 | cbi(_pinMOSI, _bitmaskMOSI); |
displaymodule | 0:d6ff5fa503e8 | 99 | } |
displaymodule | 0:d6ff5fa503e8 | 100 | pulse_low(_pinCLK, _bitmaskCLK); |
displaymodule | 0:d6ff5fa503e8 | 101 | |
displaymodule | 0:d6ff5fa503e8 | 102 | if (data & 0x01) { |
displaymodule | 0:d6ff5fa503e8 | 103 | sbi(_pinMOSI, _bitmaskMOSI); |
displaymodule | 0:d6ff5fa503e8 | 104 | } |
displaymodule | 0:d6ff5fa503e8 | 105 | else { |
displaymodule | 0:d6ff5fa503e8 | 106 | cbi(_pinMOSI, _bitmaskMOSI); |
displaymodule | 0:d6ff5fa503e8 | 107 | } |
displaymodule | 0:d6ff5fa503e8 | 108 | pulse_low(_pinCLK, _bitmaskCLK); |
displaymodule | 0:d6ff5fa503e8 | 109 | } |
displaymodule | 0:d6ff5fa503e8 | 110 | |
displaymodule | 0:d6ff5fa503e8 | 111 | void DmTftHX8353C::sendCommand(uint8_t index) { |
displaymodule | 0:d6ff5fa503e8 | 112 | cbi(_pinDC, _bitmaskDC); |
displaymodule | 0:d6ff5fa503e8 | 113 | writeBus(index); |
displaymodule | 0:d6ff5fa503e8 | 114 | } |
displaymodule | 0:d6ff5fa503e8 | 115 | |
displaymodule | 0:d6ff5fa503e8 | 116 | void DmTftHX8353C::send8BitData(uint8_t data) { |
displaymodule | 0:d6ff5fa503e8 | 117 | sbi(_pinDC, _bitmaskDC); |
displaymodule | 0:d6ff5fa503e8 | 118 | writeBus(data); |
displaymodule | 0:d6ff5fa503e8 | 119 | } |
displaymodule | 0:d6ff5fa503e8 | 120 | |
displaymodule | 0:d6ff5fa503e8 | 121 | void DmTftHX8353C::sendData(uint16_t data) { |
displaymodule | 0:d6ff5fa503e8 | 122 | sbi(_pinDC, _bitmaskDC); |
displaymodule | 0:d6ff5fa503e8 | 123 | writeBus(data>>8); |
displaymodule | 0:d6ff5fa503e8 | 124 | writeBus(data); |
displaymodule | 0:d6ff5fa503e8 | 125 | } |
displaymodule | 0:d6ff5fa503e8 | 126 | |
displaymodule | 0:d6ff5fa503e8 | 127 | void DmTftHX8353C::setAddress(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) { |
displaymodule | 0:d6ff5fa503e8 | 128 | sendCommand(0x2A); // SetColumn |
displaymodule | 0:d6ff5fa503e8 | 129 | sendData(x0); |
displaymodule | 0:d6ff5fa503e8 | 130 | sendData(x1); |
displaymodule | 0:d6ff5fa503e8 | 131 | sendCommand(0x2B); // SetPage |
displaymodule | 0:d6ff5fa503e8 | 132 | sendData(y0); |
displaymodule | 0:d6ff5fa503e8 | 133 | sendData(y1); |
displaymodule | 0:d6ff5fa503e8 | 134 | |
displaymodule | 0:d6ff5fa503e8 | 135 | sendCommand(0x2c); |
displaymodule | 0:d6ff5fa503e8 | 136 | } |
displaymodule | 0:d6ff5fa503e8 | 137 | |
displaymodule | 0:d6ff5fa503e8 | 138 | |
displaymodule | 0:d6ff5fa503e8 | 139 | void DmTftHX8353C::init (void) { |
displaymodule | 0:d6ff5fa503e8 | 140 | setTextColor(BLACK, WHITE); |
displaymodule | 0:d6ff5fa503e8 | 141 | #if defined (DM_TOOLCHAIN_ARDUINO) |
displaymodule | 0:d6ff5fa503e8 | 142 | _pinMOSI= portOutputRegister(digitalPinToPort(_mosi)); |
displaymodule | 0:d6ff5fa503e8 | 143 | _bitmaskMOSI= digitalPinToBitMask(_mosi); |
displaymodule | 0:d6ff5fa503e8 | 144 | _pinCLK= portOutputRegister(digitalPinToPort(_clk)); |
displaymodule | 0:d6ff5fa503e8 | 145 | _bitmaskCLK= digitalPinToBitMask(_clk); |
displaymodule | 0:d6ff5fa503e8 | 146 | _pinCS = portOutputRegister(digitalPinToPort(_cs)); |
displaymodule | 0:d6ff5fa503e8 | 147 | _bitmaskCS = digitalPinToBitMask(_cs); |
displaymodule | 0:d6ff5fa503e8 | 148 | _pinDC = portOutputRegister(digitalPinToPort(_dc)); |
displaymodule | 0:d6ff5fa503e8 | 149 | _bitmaskDC = digitalPinToBitMask(_dc); |
displaymodule | 0:d6ff5fa503e8 | 150 | _pinRST = portOutputRegister(digitalPinToPort(_rst)); |
displaymodule | 0:d6ff5fa503e8 | 151 | _bitmaskRST = digitalPinToBitMask(_rst); |
displaymodule | 0:d6ff5fa503e8 | 152 | |
displaymodule | 0:d6ff5fa503e8 | 153 | pinMode(_mosi,OUTPUT); |
displaymodule | 0:d6ff5fa503e8 | 154 | pinMode(_clk,OUTPUT); |
displaymodule | 0:d6ff5fa503e8 | 155 | pinMode(_cs,OUTPUT); |
displaymodule | 0:d6ff5fa503e8 | 156 | pinMode(_dc,OUTPUT); |
displaymodule | 0:d6ff5fa503e8 | 157 | pinMode(_rst,OUTPUT); |
displaymodule | 0:d6ff5fa503e8 | 158 | #elif defined (DM_TOOLCHAIN_MBED) |
displaymodule | 14:2db7065edbec | 159 | _pinMOSI = new DigitalOut(_mosi); |
displaymodule | 14:2db7065edbec | 160 | _pinCLK = new DigitalOut(_clk); |
displaymodule | 14:2db7065edbec | 161 | _pinCS = new DigitalOut(_cs); |
displaymodule | 14:2db7065edbec | 162 | _pinDC = new DigitalOut(_dc); |
displaymodule | 14:2db7065edbec | 163 | _pinRST = new DigitalOut(_rst); |
displaymodule | 0:d6ff5fa503e8 | 164 | #endif |
displaymodule | 0:d6ff5fa503e8 | 165 | |
displaymodule | 0:d6ff5fa503e8 | 166 | sbi(_pinRST, _bitmaskRST); |
displaymodule | 0:d6ff5fa503e8 | 167 | delay(5); |
displaymodule | 0:d6ff5fa503e8 | 168 | cbi(_pinRST, _bitmaskRST); |
displaymodule | 0:d6ff5fa503e8 | 169 | delay(15); |
displaymodule | 0:d6ff5fa503e8 | 170 | sbi(_pinRST, _bitmaskRST); |
displaymodule | 0:d6ff5fa503e8 | 171 | delay(15); |
displaymodule | 0:d6ff5fa503e8 | 172 | cbi(_pinCS, _bitmaskCS); |
displaymodule | 0:d6ff5fa503e8 | 173 | |
displaymodule | 0:d6ff5fa503e8 | 174 | sendCommand(0xB9); // HX8353C INIT |
displaymodule | 0:d6ff5fa503e8 | 175 | send8BitData(0xFF); |
displaymodule | 0:d6ff5fa503e8 | 176 | send8BitData(0x83); |
displaymodule | 0:d6ff5fa503e8 | 177 | send8BitData(0x53); |
displaymodule | 0:d6ff5fa503e8 | 178 | |
displaymodule | 0:d6ff5fa503e8 | 179 | sendCommand(0xB0); |
displaymodule | 0:d6ff5fa503e8 | 180 | send8BitData(0x3C); |
displaymodule | 0:d6ff5fa503e8 | 181 | send8BitData(0X01); |
displaymodule | 0:d6ff5fa503e8 | 182 | |
displaymodule | 0:d6ff5fa503e8 | 183 | sendCommand(0xB6); |
displaymodule | 0:d6ff5fa503e8 | 184 | send8BitData(0x94); |
displaymodule | 0:d6ff5fa503e8 | 185 | send8BitData(0x6C); |
displaymodule | 0:d6ff5fa503e8 | 186 | send8BitData(0x50); |
displaymodule | 0:d6ff5fa503e8 | 187 | |
displaymodule | 0:d6ff5fa503e8 | 188 | sendCommand(0xB1); |
displaymodule | 0:d6ff5fa503e8 | 189 | send8BitData(0x00); |
displaymodule | 0:d6ff5fa503e8 | 190 | send8BitData(0x01); |
displaymodule | 0:d6ff5fa503e8 | 191 | send8BitData(0x1B); |
displaymodule | 0:d6ff5fa503e8 | 192 | send8BitData(0x03); |
displaymodule | 0:d6ff5fa503e8 | 193 | send8BitData(0X01); |
displaymodule | 0:d6ff5fa503e8 | 194 | send8BitData(0X08); |
displaymodule | 0:d6ff5fa503e8 | 195 | send8BitData(0x77); |
displaymodule | 0:d6ff5fa503e8 | 196 | send8BitData(0x89); |
displaymodule | 0:d6ff5fa503e8 | 197 | |
displaymodule | 0:d6ff5fa503e8 | 198 | sendCommand(0xE0); |
displaymodule | 0:d6ff5fa503e8 | 199 | send8BitData(0x50); |
displaymodule | 0:d6ff5fa503e8 | 200 | send8BitData(0x77); |
displaymodule | 0:d6ff5fa503e8 | 201 | send8BitData(0X40); |
displaymodule | 0:d6ff5fa503e8 | 202 | send8BitData(0X08); |
displaymodule | 0:d6ff5fa503e8 | 203 | send8BitData(0xBE); |
displaymodule | 0:d6ff5fa503e8 | 204 | send8BitData(0x00); |
displaymodule | 0:d6ff5fa503e8 | 205 | send8BitData(0x03); |
displaymodule | 0:d6ff5fa503e8 | 206 | send8BitData(0x0F); |
displaymodule | 0:d6ff5fa503e8 | 207 | send8BitData(0x00); |
displaymodule | 0:d6ff5fa503e8 | 208 | send8BitData(0x01); |
displaymodule | 0:d6ff5fa503e8 | 209 | send8BitData(0x73); |
displaymodule | 0:d6ff5fa503e8 | 210 | send8BitData(0x00); |
displaymodule | 0:d6ff5fa503e8 | 211 | send8BitData(0x72); |
displaymodule | 0:d6ff5fa503e8 | 212 | send8BitData(0x03); |
displaymodule | 0:d6ff5fa503e8 | 213 | send8BitData(0xB0); |
displaymodule | 0:d6ff5fa503e8 | 214 | send8BitData(0x0F); |
displaymodule | 0:d6ff5fa503e8 | 215 | send8BitData(0x08); |
displaymodule | 0:d6ff5fa503e8 | 216 | send8BitData(0x00); |
displaymodule | 0:d6ff5fa503e8 | 217 | send8BitData(0x0F); |
displaymodule | 0:d6ff5fa503e8 | 218 | sendCommand(0x3A); |
displaymodule | 0:d6ff5fa503e8 | 219 | send8BitData(0x05); |
displaymodule | 0:d6ff5fa503e8 | 220 | sendCommand(0x36); |
displaymodule | 0:d6ff5fa503e8 | 221 | send8BitData(0xC0); |
displaymodule | 0:d6ff5fa503e8 | 222 | sendCommand(0x11); |
displaymodule | 0:d6ff5fa503e8 | 223 | delay(150); |
displaymodule | 0:d6ff5fa503e8 | 224 | sendCommand(0x29); |
displaymodule | 0:d6ff5fa503e8 | 225 | delay(150); |
displaymodule | 0:d6ff5fa503e8 | 226 | sendCommand(0x2D); |
displaymodule | 0:d6ff5fa503e8 | 227 | uint8_t i=0; |
displaymodule | 0:d6ff5fa503e8 | 228 | |
displaymodule | 0:d6ff5fa503e8 | 229 | for(i=0;i<32;i++) { |
displaymodule | 0:d6ff5fa503e8 | 230 | send8BitData(2*i); |
displaymodule | 0:d6ff5fa503e8 | 231 | } //Red |
displaymodule | 0:d6ff5fa503e8 | 232 | |
displaymodule | 0:d6ff5fa503e8 | 233 | for(i=0;i<64;i++) { |
displaymodule | 0:d6ff5fa503e8 | 234 | send8BitData(1*i); |
displaymodule | 0:d6ff5fa503e8 | 235 | } //Green |
displaymodule | 0:d6ff5fa503e8 | 236 | |
displaymodule | 0:d6ff5fa503e8 | 237 | for(i=0;i<32;i++) |
displaymodule | 0:d6ff5fa503e8 | 238 | { |
displaymodule | 0:d6ff5fa503e8 | 239 | send8BitData(2*i); |
displaymodule | 0:d6ff5fa503e8 | 240 | } //Blue |
displaymodule | 0:d6ff5fa503e8 | 241 | sendCommand(0x2C); |
displaymodule | 0:d6ff5fa503e8 | 242 | |
displaymodule | 0:d6ff5fa503e8 | 243 | delay(150); |
displaymodule | 0:d6ff5fa503e8 | 244 | clearScreen(); |
displaymodule | 0:d6ff5fa503e8 | 245 | } |
displaymodule | 0:d6ff5fa503e8 | 246 | |
displaymodule | 0:d6ff5fa503e8 | 247 | /********************************************************************************************************* |
displaymodule | 0:d6ff5fa503e8 | 248 | END FILE |
displaymodule | 0:d6ff5fa503e8 | 249 | *********************************************************************************************************/ |
displaymodule | 0:d6ff5fa503e8 | 250 | |
displaymodule | 0:d6ff5fa503e8 | 251 |