Driver Library for our displays

Dependents:   dm_bubbles dm_calc dm_paint dm_sdcard_with_adapter ... more

Committer:
displaymodule
Date:
Mon Oct 12 08:35:35 2015 +0000
Revision:
14:2db7065edbec
Parent:
0:d6ff5fa503e8
Important updates, compatible with the new mbed library?more platforms support. Recommended updates.

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 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