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:
4:92d019216e28
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 14:2db7065edbec 14
displaymodule 0:d6ff5fa503e8 15 #include "DmTftS6D0164.h"
displaymodule 0:d6ff5fa503e8 16
displaymodule 14:2db7065edbec 17 #if defined (DM_TOOLCHAIN_ARDUINO)
displaymodule 14:2db7065edbec 18 DmTftS6D0164::DmTftS6D0164(uint8_t wr, uint8_t cs, uint8_t dc, uint8_t rst) : DmTftBase(176, 220)
displaymodule 14:2db7065edbec 19 #elif defined (DM_TOOLCHAIN_MBED)
displaymodule 14:2db7065edbec 20 DmTftS6D0164::DmTftS6D0164(PinName wr, PinName cs, PinName dc, PinName rst) : DmTftBase(176, 220)
displaymodule 14:2db7065edbec 21 #endif
displaymodule 14:2db7065edbec 22 {
displaymodule 0:d6ff5fa503e8 23 _wr = wr;
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 DmTftS6D0164::~DmTftS6D0164() {
displaymodule 0:d6ff5fa503e8 30 #if defined (DM_TOOLCHAIN_MBED)
displaymodule 0:d6ff5fa503e8 31 delete _pinRST;
displaymodule 0:d6ff5fa503e8 32 delete _pinCS;
displaymodule 0:d6ff5fa503e8 33 delete _pinWR;
displaymodule 0:d6ff5fa503e8 34 delete _pinDC;
displaymodule 0:d6ff5fa503e8 35 delete _virtualPortD;
displaymodule 0:d6ff5fa503e8 36 _pinRST = NULL;
displaymodule 0:d6ff5fa503e8 37 _pinCS = NULL;
displaymodule 0:d6ff5fa503e8 38 _pinWR = NULL;
displaymodule 0:d6ff5fa503e8 39 _pinDC = NULL;
displaymodule 0:d6ff5fa503e8 40 _virtualPortD = NULL;
displaymodule 0:d6ff5fa503e8 41 #endif
displaymodule 0:d6ff5fa503e8 42 }
displaymodule 0:d6ff5fa503e8 43
displaymodule 0:d6ff5fa503e8 44 void DmTftS6D0164::writeBus(uint8_t data) {
displaymodule 0:d6ff5fa503e8 45 #if defined (DM_TOOLCHAIN_ARDUINO)
displaymodule 0:d6ff5fa503e8 46 PORTD = data;
displaymodule 0:d6ff5fa503e8 47 #elif defined (DM_TOOLCHAIN_MBED)
displaymodule 0:d6ff5fa503e8 48 *_virtualPortD = data;
displaymodule 0:d6ff5fa503e8 49 #endif
displaymodule 0:d6ff5fa503e8 50 pulse_low(_pinWR, _bitmaskWR);
displaymodule 0:d6ff5fa503e8 51 }
displaymodule 0:d6ff5fa503e8 52
displaymodule 0:d6ff5fa503e8 53 void DmTftS6D0164::sendCommand(uint8_t index) {
displaymodule 0:d6ff5fa503e8 54 cbi(_pinDC, _bitmaskDC);
displaymodule 0:d6ff5fa503e8 55 writeBus(index);
displaymodule 0:d6ff5fa503e8 56 }
displaymodule 0:d6ff5fa503e8 57
displaymodule 0:d6ff5fa503e8 58 void DmTftS6D0164::sendData(uint16_t data) {
displaymodule 0:d6ff5fa503e8 59 sbi(_pinDC, _bitmaskDC);
displaymodule 0:d6ff5fa503e8 60 writeBus(data>>8);
displaymodule 0:d6ff5fa503e8 61 writeBus(data);
displaymodule 0:d6ff5fa503e8 62 }
displaymodule 0:d6ff5fa503e8 63
displaymodule 0:d6ff5fa503e8 64 void DmTftS6D0164::setAddress(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) {
displaymodule 0:d6ff5fa503e8 65 sendCommand(0x37); // Set Column
displaymodule 0:d6ff5fa503e8 66 sendData(x0);
displaymodule 0:d6ff5fa503e8 67 sendCommand(0x36);
displaymodule 0:d6ff5fa503e8 68 sendData(x1);
displaymodule 0:d6ff5fa503e8 69
displaymodule 0:d6ff5fa503e8 70
displaymodule 0:d6ff5fa503e8 71 sendCommand(0x39); // Set Page
displaymodule 0:d6ff5fa503e8 72 sendData(y0);
displaymodule 0:d6ff5fa503e8 73 sendCommand(0x38);
displaymodule 0:d6ff5fa503e8 74 sendData(y1);
displaymodule 0:d6ff5fa503e8 75
displaymodule 0:d6ff5fa503e8 76 sendCommand(0x20);
displaymodule 0:d6ff5fa503e8 77 sendData(x0);
displaymodule 0:d6ff5fa503e8 78 sendCommand(0x21);
displaymodule 0:d6ff5fa503e8 79 sendData(y0);
displaymodule 0:d6ff5fa503e8 80 sendCommand(0x22);
displaymodule 0:d6ff5fa503e8 81 }
displaymodule 0:d6ff5fa503e8 82
displaymodule 0:d6ff5fa503e8 83 void DmTftS6D0164::init(void) {
displaymodule 0:d6ff5fa503e8 84 setTextColor(BLACK, WHITE);
displaymodule 0:d6ff5fa503e8 85 #if defined (DM_TOOLCHAIN_ARDUINO)
displaymodule 0:d6ff5fa503e8 86 /**************************************
displaymodule 0:d6ff5fa503e8 87 DM-DmTftS6D016422-102 Arduino UNO NUM
displaymodule 0:d6ff5fa503e8 88
displaymodule 0:d6ff5fa503e8 89 RST A2 16
displaymodule 0:d6ff5fa503e8 90 CS A3 17
displaymodule 0:d6ff5fa503e8 91 WR A4 18
displaymodule 0:d6ff5fa503e8 92 RS A5 19
displaymodule 0:d6ff5fa503e8 93
displaymodule 0:d6ff5fa503e8 94 DB8 0 0
displaymodule 0:d6ff5fa503e8 95 DB9 1 1
displaymodule 0:d6ff5fa503e8 96 DB10 2 2
displaymodule 0:d6ff5fa503e8 97 DB11 3 3
displaymodule 0:d6ff5fa503e8 98 DB12 4 4
displaymodule 0:d6ff5fa503e8 99 DB13 5 5
displaymodule 0:d6ff5fa503e8 100 DB14 6 6
displaymodule 0:d6ff5fa503e8 101 DB15 7 7
displaymodule 0:d6ff5fa503e8 102
displaymodule 0:d6ff5fa503e8 103 ***************************************/
displaymodule 0:d6ff5fa503e8 104 DDRD = DDRD | B11111111; // SET PORT D AS OUTPUT
displaymodule 0:d6ff5fa503e8 105
displaymodule 0:d6ff5fa503e8 106 _pinRST = portOutputRegister(digitalPinToPort(_rst));
displaymodule 0:d6ff5fa503e8 107 _bitmaskRST = digitalPinToBitMask(_rst);
displaymodule 0:d6ff5fa503e8 108 _pinCS = portOutputRegister(digitalPinToPort(_cs));
displaymodule 0:d6ff5fa503e8 109 _bitmaskCS = digitalPinToBitMask(_cs);
displaymodule 0:d6ff5fa503e8 110 _pinWR = portOutputRegister(digitalPinToPort(_wr));
displaymodule 0:d6ff5fa503e8 111 _bitmaskWR = digitalPinToBitMask(_wr);
displaymodule 0:d6ff5fa503e8 112 _pinDC = portOutputRegister(digitalPinToPort(_dc));
displaymodule 0:d6ff5fa503e8 113 _bitmaskDC = digitalPinToBitMask(_dc);
displaymodule 0:d6ff5fa503e8 114
displaymodule 0:d6ff5fa503e8 115 pinMode(_rst, OUTPUT);
displaymodule 0:d6ff5fa503e8 116 pinMode(_cs, OUTPUT);
displaymodule 0:d6ff5fa503e8 117 pinMode(_wr, OUTPUT);
displaymodule 0:d6ff5fa503e8 118 pinMode(_dc,OUTPUT);
displaymodule 0:d6ff5fa503e8 119 #elif defined (DM_TOOLCHAIN_MBED)
displaymodule 14:2db7065edbec 120 _pinRST = new DigitalOut(_rst);
displaymodule 14:2db7065edbec 121 _pinCS = new DigitalOut(_cs);
displaymodule 14:2db7065edbec 122 _pinWR = new DigitalOut(_wr);
displaymodule 14:2db7065edbec 123 _pinDC = new DigitalOut(_dc);
displaymodule 4:92d019216e28 124 _virtualPortD = new BusOut(D0, D1, D2, D3, D4, SPECIAL_D5, D6, D7);
displaymodule 0:d6ff5fa503e8 125 #endif
displaymodule 0:d6ff5fa503e8 126
displaymodule 0:d6ff5fa503e8 127 sbi(_pinRST, _bitmaskRST);
displaymodule 0:d6ff5fa503e8 128 delay(5);
displaymodule 0:d6ff5fa503e8 129 cbi(_pinRST, _bitmaskRST);
displaymodule 0:d6ff5fa503e8 130 delay(15);
displaymodule 0:d6ff5fa503e8 131 sbi(_pinRST, _bitmaskRST);
displaymodule 0:d6ff5fa503e8 132 sbi(_pinCS, _bitmaskCS);
displaymodule 0:d6ff5fa503e8 133 sbi(_pinWR, _bitmaskWR);
displaymodule 0:d6ff5fa503e8 134 delay(15);
displaymodule 0:d6ff5fa503e8 135 cbi(_pinCS, _bitmaskCS);
displaymodule 0:d6ff5fa503e8 136
displaymodule 0:d6ff5fa503e8 137 // Power up sequence
displaymodule 0:d6ff5fa503e8 138 sendCommand(0x11); sendData(0x001A); // S6D0164 INIT
displaymodule 0:d6ff5fa503e8 139 sendCommand(0x12); sendData(0x3121);
displaymodule 0:d6ff5fa503e8 140 sendCommand(0x13); sendData(0x006C);
displaymodule 0:d6ff5fa503e8 141 sendCommand(0x14); sendData(0x4249);
displaymodule 0:d6ff5fa503e8 142 sendCommand(0x10); sendData(0x0800);
displaymodule 0:d6ff5fa503e8 143 delay(10);
displaymodule 0:d6ff5fa503e8 144 sendCommand(0x11); sendData(0x011A);
displaymodule 0:d6ff5fa503e8 145 delay(10);
displaymodule 0:d6ff5fa503e8 146 sendCommand(0x11); sendData(0x031A);
displaymodule 0:d6ff5fa503e8 147 delay(10);
displaymodule 0:d6ff5fa503e8 148 sendCommand(0x11); sendData(0x071A);
displaymodule 0:d6ff5fa503e8 149 delay(10);
displaymodule 0:d6ff5fa503e8 150 sendCommand(0x11); sendData(0x0F1A);
displaymodule 0:d6ff5fa503e8 151 delay(20);
displaymodule 0:d6ff5fa503e8 152 sendCommand(0x11); sendData(0x0F3A);
displaymodule 0:d6ff5fa503e8 153 delay(30);
displaymodule 0:d6ff5fa503e8 154 // Initialization set sequence
displaymodule 0:d6ff5fa503e8 155 sendCommand(0x01); sendData(0x011C);
displaymodule 0:d6ff5fa503e8 156 sendCommand(0x02); sendData(0x0100);
displaymodule 0:d6ff5fa503e8 157 sendCommand(0x03); sendData(0x1030);
displaymodule 0:d6ff5fa503e8 158 sendCommand(0x07); sendData(0x0000);
displaymodule 0:d6ff5fa503e8 159 sendCommand(0x08); sendData(0x0808);
displaymodule 0:d6ff5fa503e8 160 sendCommand(0x0B); sendData(0x1100);
displaymodule 0:d6ff5fa503e8 161 sendCommand(0x0C); sendData(0x0000);
displaymodule 0:d6ff5fa503e8 162 sendCommand(0x0F); sendData(0x1401);
displaymodule 0:d6ff5fa503e8 163 sendCommand(0x15); sendData(0x0000);
displaymodule 0:d6ff5fa503e8 164 sendCommand(0x20); sendData(0x0000);
displaymodule 0:d6ff5fa503e8 165 sendCommand(0x21); sendData(0x0000);
displaymodule 0:d6ff5fa503e8 166
displaymodule 0:d6ff5fa503e8 167 sendCommand(0x38); sendData(0x00DB);
displaymodule 0:d6ff5fa503e8 168 sendCommand(0x39); sendData(0x0000);
displaymodule 0:d6ff5fa503e8 169 sendCommand(0x50); sendData(0x0001);
displaymodule 0:d6ff5fa503e8 170 sendCommand(0x51); sendData(0x020B);
displaymodule 0:d6ff5fa503e8 171 sendCommand(0x52); sendData(0x0805);
displaymodule 0:d6ff5fa503e8 172 sendCommand(0x53); sendData(0x0404);
displaymodule 0:d6ff5fa503e8 173 sendCommand(0x54); sendData(0x0C0C);
displaymodule 0:d6ff5fa503e8 174 sendCommand(0x55); sendData(0x000C);
displaymodule 0:d6ff5fa503e8 175 sendCommand(0x56); sendData(0x0101);
displaymodule 0:d6ff5fa503e8 176 sendCommand(0x57); sendData(0x0400);
displaymodule 0:d6ff5fa503e8 177 sendCommand(0x58); sendData(0x1108);
displaymodule 0:d6ff5fa503e8 178 sendCommand(0x59); sendData(0x050C);
displaymodule 0:d6ff5fa503e8 179 sendCommand(0x36); sendData(0x00AF);
displaymodule 0:d6ff5fa503e8 180 sendCommand(0x37); sendData(0x0000);
displaymodule 0:d6ff5fa503e8 181 sendCommand(0x38); sendData(0x00DB);
displaymodule 0:d6ff5fa503e8 182 sendCommand(0x39); sendData(0x0000);
displaymodule 0:d6ff5fa503e8 183 sendCommand(0x0F); sendData(0x0B01);
displaymodule 0:d6ff5fa503e8 184 sendCommand(0x07); sendData(0x0016);
displaymodule 0:d6ff5fa503e8 185 delay(2);
displaymodule 0:d6ff5fa503e8 186 sendCommand(0x07); sendData(0x0017);
displaymodule 0:d6ff5fa503e8 187 sendCommand(0x22);
displaymodule 0:d6ff5fa503e8 188 delay(10);
displaymodule 0:d6ff5fa503e8 189 sbi(_pinCS, _bitmaskCS);
displaymodule 0:d6ff5fa503e8 190
displaymodule 0:d6ff5fa503e8 191 clearScreen();
displaymodule 0:d6ff5fa503e8 192 }
displaymodule 0:d6ff5fa503e8 193
displaymodule 0:d6ff5fa503e8 194 /*********************************************************************************************************
displaymodule 0:d6ff5fa503e8 195 END FILE
displaymodule 0:d6ff5fa503e8 196 *********************************************************************************************************/
displaymodule 0:d6ff5fa503e8 197
displaymodule 0:d6ff5fa503e8 198