TFTLCD with FastIO
Fork of TFTLCD by
ili9328.cpp@30:1e9905bdfd15, 2015-07-30 (annotated)
- Committer:
- nameless129
- Date:
- Thu Jul 30 02:35:08 2015 +0000
- Revision:
- 30:1e9905bdfd15
- Parent:
- 28:45e8aa1fc420
change:use FastIO
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ttodorov | 23:eca4414196ca | 1 | /* |
ttodorov | 23:eca4414196ca | 2 | * Copyright (C)2010-2012 Henning Karlsen. All right reserved. |
ttodorov | 23:eca4414196ca | 3 | * Copyright (C)2012-2013 Todor Todorov. |
ttodorov | 23:eca4414196ca | 4 | * |
ttodorov | 23:eca4414196ca | 5 | * This library is free software; you can redistribute it and/or |
ttodorov | 23:eca4414196ca | 6 | * modify it under the terms of the GNU Lesser General Public |
ttodorov | 23:eca4414196ca | 7 | * License as published by the Free Software Foundation; either |
ttodorov | 23:eca4414196ca | 8 | * version 2.1 of the License, or (at your option) any later version. |
ttodorov | 23:eca4414196ca | 9 | * |
ttodorov | 23:eca4414196ca | 10 | * This library is distributed in the hope that it will be useful, |
ttodorov | 23:eca4414196ca | 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
ttodorov | 23:eca4414196ca | 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
ttodorov | 23:eca4414196ca | 13 | * Lesser General Public License for more details. |
ttodorov | 23:eca4414196ca | 14 | * |
ttodorov | 23:eca4414196ca | 15 | * You should have received a copy of the GNU Lesser General Public |
ttodorov | 23:eca4414196ca | 16 | * License along with this library; if not, write to: |
ttodorov | 23:eca4414196ca | 17 | * |
ttodorov | 23:eca4414196ca | 18 | * Free Software Foundation, Inc. |
ttodorov | 23:eca4414196ca | 19 | * 51 Franklin St, 5th Floor, Boston, MA 02110-1301, USA |
ttodorov | 23:eca4414196ca | 20 | * |
ttodorov | 23:eca4414196ca | 21 | *********************************************************************/ |
ttodorov | 23:eca4414196ca | 22 | #include "ili9328.h" |
ttodorov | 23:eca4414196ca | 23 | #include "helpers.h" |
nameless129 | 30:1e9905bdfd15 | 24 | #include "FastIO.h" |
nameless129 | 30:1e9905bdfd15 | 25 | |
nameless129 | 30:1e9905bdfd15 | 26 | FastOut<P1_28> _D0; |
nameless129 | 30:1e9905bdfd15 | 27 | FastOut<P2_3> _D1; |
nameless129 | 30:1e9905bdfd15 | 28 | FastOut<P1_18> _D2; |
nameless129 | 30:1e9905bdfd15 | 29 | FastOut<P1_24> _D3; |
nameless129 | 30:1e9905bdfd15 | 30 | FastOut<P1_19> _D4; |
nameless129 | 30:1e9905bdfd15 | 31 | FastOut<P1_26> _D5; |
nameless129 | 30:1e9905bdfd15 | 32 | FastOut<P1_27> _D6; |
nameless129 | 30:1e9905bdfd15 | 33 | FastOut<P1_25> _D7; |
ttodorov | 23:eca4414196ca | 34 | |
ttodorov | 23:eca4414196ca | 35 | ILI9328_LCD::ILI9328_LCD( PinName CS, PinName RESET, PinName RS, PinName WR, BusOut* DATA_PORT, PinName BL, PinName RD, backlight_t blType, float defaultBackLightLevel ) |
ttodorov | 23:eca4414196ca | 36 | : LCD( 240, 320, CS, RS, RESET, BL, blType, defaultBackLightLevel ), _lcd_pin_wr( WR ) |
ttodorov | 23:eca4414196ca | 37 | { |
ttodorov | 23:eca4414196ca | 38 | _lcd_port = DATA_PORT; |
ttodorov | 23:eca4414196ca | 39 | if ( RD != NC ) _lcd_pin_rd = new DigitalOut( RD ); |
ttodorov | 23:eca4414196ca | 40 | else _lcd_pin_rd = 0; |
ttodorov | 23:eca4414196ca | 41 | } |
ttodorov | 23:eca4414196ca | 42 | |
ttodorov | 23:eca4414196ca | 43 | void ILI9328_LCD::Initialize( orientation_t orientation, colordepth_t colors ) |
ttodorov | 23:eca4414196ca | 44 | { |
ttodorov | 23:eca4414196ca | 45 | _orientation = orientation; |
ttodorov | 23:eca4414196ca | 46 | _colorDepth = colors; |
ttodorov | 23:eca4414196ca | 47 | |
ttodorov | 23:eca4414196ca | 48 | _lcd_pin_reset = HIGH; |
ttodorov | 23:eca4414196ca | 49 | wait_ms( 50 ); |
ttodorov | 23:eca4414196ca | 50 | _lcd_pin_reset = LOW; |
ttodorov | 23:eca4414196ca | 51 | wait_ms( 100 ); |
ttodorov | 23:eca4414196ca | 52 | _lcd_pin_reset = HIGH; |
ttodorov | 23:eca4414196ca | 53 | wait_ms( 1000 ); |
ttodorov | 23:eca4414196ca | 54 | _lcd_pin_cs = HIGH; |
ttodorov | 23:eca4414196ca | 55 | if ( _lcd_pin_bl != 0 ) |
ttodorov | 23:eca4414196ca | 56 | *_lcd_pin_bl = HIGH; |
ttodorov | 23:eca4414196ca | 57 | else if ( _bl_pwm != 0 ) |
ttodorov | 23:eca4414196ca | 58 | *_bl_pwm = _bl_pwm_default; |
ttodorov | 23:eca4414196ca | 59 | if ( _lcd_pin_rd != 0 ) |
ttodorov | 23:eca4414196ca | 60 | *_lcd_pin_rd = HIGH; |
ttodorov | 23:eca4414196ca | 61 | _lcd_pin_wr = HIGH; |
ttodorov | 23:eca4414196ca | 62 | wait_ms( 15 ); |
ttodorov | 23:eca4414196ca | 63 | |
ttodorov | 23:eca4414196ca | 64 | Activate(); |
ttodorov | 25:6cffb758c075 | 65 | |
ttodorov | 25:6cffb758c075 | 66 | short drivOut = 0; |
ttodorov | 25:6cffb758c075 | 67 | short entryMod = 0; |
ttodorov | 25:6cffb758c075 | 68 | short gateScan = 0x2700; |
ttodorov | 24:ac6e35658037 | 69 | switch ( _orientation ) |
ttodorov | 24:ac6e35658037 | 70 | { |
ttodorov | 25:6cffb758c075 | 71 | case LANDSCAPE: |
ttodorov | 25:6cffb758c075 | 72 | drivOut = 0x0100; |
ttodorov | 25:6cffb758c075 | 73 | entryMod |= 0x0038; |
ttodorov | 25:6cffb758c075 | 74 | gateScan |= 0x0000; |
ttodorov | 25:6cffb758c075 | 75 | break; |
ttodorov | 25:6cffb758c075 | 76 | |
ttodorov | 25:6cffb758c075 | 77 | case LANDSCAPE_REV: |
ttodorov | 25:6cffb758c075 | 78 | drivOut = 0x0000; |
ttodorov | 25:6cffb758c075 | 79 | entryMod |= 0x0038; |
ttodorov | 25:6cffb758c075 | 80 | gateScan |= 0x8000; |
ttodorov | 25:6cffb758c075 | 81 | break; |
ttodorov | 25:6cffb758c075 | 82 | |
ttodorov | 25:6cffb758c075 | 83 | case PORTRAIT_REV: |
ttodorov | 25:6cffb758c075 | 84 | drivOut = 0x0000; |
ttodorov | 25:6cffb758c075 | 85 | entryMod |= 0x0030; |
ttodorov | 25:6cffb758c075 | 86 | gateScan |= 0x0000; |
ttodorov | 25:6cffb758c075 | 87 | break; |
ttodorov | 25:6cffb758c075 | 88 | |
ttodorov | 24:ac6e35658037 | 89 | case PORTRAIT: |
ttodorov | 24:ac6e35658037 | 90 | default: |
ttodorov | 25:6cffb758c075 | 91 | drivOut = 0x0100; |
ttodorov | 25:6cffb758c075 | 92 | entryMod |= 0x0030; |
ttodorov | 25:6cffb758c075 | 93 | gateScan |= 0x8000; |
ttodorov | 24:ac6e35658037 | 94 | break; |
ttodorov | 24:ac6e35658037 | 95 | } |
ttodorov | 24:ac6e35658037 | 96 | switch ( _colorDepth ) |
ttodorov | 24:ac6e35658037 | 97 | { |
ttodorov | 26:28f64fbcf7df | 98 | case RGB18: |
ttodorov | 26:28f64fbcf7df | 99 | entryMod |= 0x9000; |
ttodorov | 26:28f64fbcf7df | 100 | break; |
ttodorov | 26:28f64fbcf7df | 101 | |
ttodorov | 24:ac6e35658037 | 102 | case RGB16: |
ttodorov | 24:ac6e35658037 | 103 | default: |
ttodorov | 25:6cffb758c075 | 104 | entryMod |= 0x1000; |
ttodorov | 24:ac6e35658037 | 105 | break; |
ttodorov | 24:ac6e35658037 | 106 | } |
nameless129 | 28:45e8aa1fc420 | 107 | |
nameless129 | 28:45e8aa1fc420 | 108 | WriteCmdData( ILI932X_DRIV_OUT_CTRL, drivOut ); // set Driver Output Control |
nameless129 | 28:45e8aa1fc420 | 109 | WriteCmdData( ILI932X_DRIV_WAV_CTRL, 0x0700 ); // set 1 line inversion |
nameless129 | 28:45e8aa1fc420 | 110 | WriteCmdData( ILI932X_ENTRY_MOD, entryMod ); // set GRAM write direction and BGR=1. |
nameless129 | 28:45e8aa1fc420 | 111 | WriteCmdData( ILI932X_RESIZE_CTRL, 0x0000 ); // Resize register |
nameless129 | 28:45e8aa1fc420 | 112 | WriteCmdData( ILI932X_DISP_CTRL2, 0x0202 ); // set the back porch and front porch |
nameless129 | 28:45e8aa1fc420 | 113 | WriteCmdData( ILI932X_DISP_CTRL3, 0x0000 ); // set non-display area refresh cycle ISC[3:0] |
nameless129 | 28:45e8aa1fc420 | 114 | WriteCmdData( ILI932X_DISP_CTRL4, 0x0000 ); // FMARK function |
nameless129 | 28:45e8aa1fc420 | 115 | WriteCmdData( ILI932X_RGB_DISP_IF_CTRL1, 0x0000 ); // RGB interface setting |
nameless129 | 28:45e8aa1fc420 | 116 | WriteCmdData( ILI932X_FRM_MARKER_POS, 0x0000 ); // Frame marker Position |
nameless129 | 28:45e8aa1fc420 | 117 | WriteCmdData( ILI932X_RGB_DISP_IF_CTRL2, 0x0000 ); // RGB interface polarity |
ttodorov | 24:ac6e35658037 | 118 | // ----------- Power On sequence ----------- // |
nameless129 | 28:45e8aa1fc420 | 119 | WriteCmdData( ILI932X_POW_CTRL1, 0x0000 ); // SAP, BT[3:0], AP, DSTB, SLP, STB |
nameless129 | 28:45e8aa1fc420 | 120 | WriteCmdData( ILI932X_POW_CTRL2, 0x0007 ); // DC1[2:0], DC0[2:0], VC[2:0] |
nameless129 | 28:45e8aa1fc420 | 121 | WriteCmdData( ILI932X_POW_CTRL3, 0x0000 ); // VREG1OUT voltage |
nameless129 | 28:45e8aa1fc420 | 122 | WriteCmdData( ILI932X_POW_CTRL4, 0x0000 ); // VDV[4:0] for VCOM amplitude |
ttodorov | 24:ac6e35658037 | 123 | wait_ms( 200 ); // Dis-charge capacitor power voltage |
nameless129 | 28:45e8aa1fc420 | 124 | WriteCmdData( ILI932X_POW_CTRL1, 0x1690 ); // SAP, BT[3:0], AP, DSTB, SLP, STB |
nameless129 | 28:45e8aa1fc420 | 125 | WriteCmdData( ILI932X_POW_CTRL2, 0x0227 ); // Set DC1[2:0], DC0[2:0], VC[2:0] |
ttodorov | 24:ac6e35658037 | 126 | wait_ms( 50 ); // Delay 50ms |
nameless129 | 28:45e8aa1fc420 | 127 | WriteCmdData( ILI932X_POW_CTRL3, 0x001A ); // 0012 |
ttodorov | 24:ac6e35658037 | 128 | wait_ms( 50 ); // Delay 50ms |
nameless129 | 28:45e8aa1fc420 | 129 | WriteCmdData( ILI932X_POW_CTRL4, 0x1800 ); // VDV[4:0] for VCOM amplitude |
nameless129 | 28:45e8aa1fc420 | 130 | WriteCmdData( ILI932X_POW_CTRL7, 0x002A ); // 04 VCM[5:0] for VCOMH |
ttodorov | 24:ac6e35658037 | 131 | wait_ms( 50 ); // Delay 50ms |
nameless129 | 28:45e8aa1fc420 | 132 | WriteCmdData( ILI932X_GRAM_HOR_AD, 0x0000 ); // GRAM horizontal Address |
nameless129 | 28:45e8aa1fc420 | 133 | WriteCmdData( ILI932X_GRAM_VER_AD, 0x0000 ); // GRAM Vertical Address |
ttodorov | 24:ac6e35658037 | 134 | // ----------- Adjust the Gamma Curve ----------// |
nameless129 | 28:45e8aa1fc420 | 135 | WriteCmdData( ILI932X_GAMMA_CTRL1, 0x0000 ); |
nameless129 | 28:45e8aa1fc420 | 136 | WriteCmdData( ILI932X_GAMMA_CTRL2, 0x0000 ); |
nameless129 | 28:45e8aa1fc420 | 137 | WriteCmdData( ILI932X_GAMMA_CTRL3, 0x0000 ); |
nameless129 | 28:45e8aa1fc420 | 138 | WriteCmdData( ILI932X_GAMMA_CTRL4, 0x0206 ); |
nameless129 | 28:45e8aa1fc420 | 139 | WriteCmdData( ILI932X_GAMMA_CTRL5, 0x0808 ); |
nameless129 | 28:45e8aa1fc420 | 140 | WriteCmdData( ILI932X_GAMMA_CTRL6, 0x0007 ); |
nameless129 | 28:45e8aa1fc420 | 141 | WriteCmdData( ILI932X_GAMMA_CTRL7, 0x0201 ); |
nameless129 | 28:45e8aa1fc420 | 142 | WriteCmdData( ILI932X_GAMMA_CTRL8, 0x0000 ); |
nameless129 | 28:45e8aa1fc420 | 143 | WriteCmdData( ILI932X_GAMMA_CTRL9, 0x0000 ); |
nameless129 | 28:45e8aa1fc420 | 144 | WriteCmdData( ILI932X_GAMMA_CTRL10, 0x0000 ); |
ttodorov | 24:ac6e35658037 | 145 | //------------------ Set GRAM area ---------------// |
nameless129 | 28:45e8aa1fc420 | 146 | WriteCmdData( ILI932X_HOR_END_AD, 0x00EF ); // Horizontal GRAM End Address |
nameless129 | 28:45e8aa1fc420 | 147 | WriteCmdData( ILI932X_VER_START_AD, 0x0000 ); // Vertical GRAM Start Address |
nameless129 | 28:45e8aa1fc420 | 148 | WriteCmdData( ILI932X_VER_END_AD, 0x013F ); // Vertical GRAM Start Address |
nameless129 | 28:45e8aa1fc420 | 149 | WriteCmdData( ILI932X_GATE_SCAN_CTRL1, gateScan ); // Gate Scan Line (0xA700) |
nameless129 | 28:45e8aa1fc420 | 150 | WriteCmdData( ILI932X_GATE_SCAN_CTRL2, 0x0003 ); // NDL,VLE, REV |
nameless129 | 28:45e8aa1fc420 | 151 | WriteCmdData( ILI932X_GATE_SCAN_CTRL3, 0x0000 ); // set scrolling line |
ttodorov | 24:ac6e35658037 | 152 | //-------------- Panel Control -------------------// |
nameless129 | 28:45e8aa1fc420 | 153 | WriteCmdData( ILI932X_PANEL_IF_CTRL1, 0x0010 ); |
nameless129 | 28:45e8aa1fc420 | 154 | WriteCmdData( ILI932X_PANEL_IF_CTRL2, 0x0000 ); |
nameless129 | 28:45e8aa1fc420 | 155 | WriteCmdData( ILI932X_PANEL_IF_CTRL4, 0X1100 ); |
nameless129 | 28:45e8aa1fc420 | 156 | WriteCmdData( ILI932X_DISP_CTRL1, 0x0133 ); // 262K color and display ON |
ttodorov | 24:ac6e35658037 | 157 | |
ttodorov | 23:eca4414196ca | 158 | Deactivate(); |
ttodorov | 23:eca4414196ca | 159 | } |
ttodorov | 23:eca4414196ca | 160 | |
ttodorov | 23:eca4414196ca | 161 | void ILI9328_LCD::Sleep( void ) |
ttodorov | 23:eca4414196ca | 162 | { |
ttodorov | 27:26491d710e72 | 163 | Activate(); |
ttodorov | 27:26491d710e72 | 164 | WriteCmdData( 0x10, 0x1692 ); // enter sleep mode |
ttodorov | 27:26491d710e72 | 165 | wait_ms( 200 ); |
ttodorov | 23:eca4414196ca | 166 | LCD::Sleep(); |
ttodorov | 27:26491d710e72 | 167 | Deactivate(); |
ttodorov | 23:eca4414196ca | 168 | } |
ttodorov | 23:eca4414196ca | 169 | |
ttodorov | 23:eca4414196ca | 170 | void ILI9328_LCD::WakeUp( void ) |
ttodorov | 23:eca4414196ca | 171 | { |
ttodorov | 27:26491d710e72 | 172 | Activate(); |
ttodorov | 27:26491d710e72 | 173 | WriteCmdData( 0x10, 0x1690 ); // exit sleep mode |
ttodorov | 27:26491d710e72 | 174 | wait_ms( 200 ); |
ttodorov | 23:eca4414196ca | 175 | LCD::WakeUp(); |
ttodorov | 27:26491d710e72 | 176 | Deactivate(); |
ttodorov | 23:eca4414196ca | 177 | } |
ttodorov | 23:eca4414196ca | 178 | |
nameless129 | 28:45e8aa1fc420 | 179 | //fix to 8bit mode |
ttodorov | 23:eca4414196ca | 180 | void ILI9328_LCD::WriteCmd( unsigned short cmd ) |
ttodorov | 23:eca4414196ca | 181 | { |
ttodorov | 23:eca4414196ca | 182 | _lcd_pin_rs = LOW; |
nameless129 | 30:1e9905bdfd15 | 183 | // _lcd_port->write( 0 ); |
nameless129 | 30:1e9905bdfd15 | 184 | |
nameless129 | 30:1e9905bdfd15 | 185 | _D0 = 0; |
nameless129 | 30:1e9905bdfd15 | 186 | _D1 = 0; |
nameless129 | 30:1e9905bdfd15 | 187 | _D2 = 0; |
nameless129 | 30:1e9905bdfd15 | 188 | _D3 = 0; |
nameless129 | 30:1e9905bdfd15 | 189 | _D4 = 0; |
nameless129 | 30:1e9905bdfd15 | 190 | _D5 = 0; |
nameless129 | 30:1e9905bdfd15 | 191 | _D6 = 0; |
nameless129 | 30:1e9905bdfd15 | 192 | _D7 = 0; |
nameless129 | 30:1e9905bdfd15 | 193 | |
nameless129 | 28:45e8aa1fc420 | 194 | pulseLow( _lcd_pin_wr ); |
nameless129 | 30:1e9905bdfd15 | 195 | // _lcd_port->write( cmd ); |
nameless129 | 30:1e9905bdfd15 | 196 | |
nameless129 | 30:1e9905bdfd15 | 197 | _D0 = cmd&0x01; |
nameless129 | 30:1e9905bdfd15 | 198 | _D1 = cmd&0x02; |
nameless129 | 30:1e9905bdfd15 | 199 | _D2 = cmd&0x04; |
nameless129 | 30:1e9905bdfd15 | 200 | _D3 = cmd&0x08; |
nameless129 | 30:1e9905bdfd15 | 201 | _D4 = cmd&0x10; |
nameless129 | 30:1e9905bdfd15 | 202 | _D5 = cmd&0x20; |
nameless129 | 30:1e9905bdfd15 | 203 | _D6 = cmd&0x40; |
nameless129 | 30:1e9905bdfd15 | 204 | _D7 = cmd&0x80; |
nameless129 | 30:1e9905bdfd15 | 205 | |
ttodorov | 23:eca4414196ca | 206 | pulseLow( _lcd_pin_wr ); |
ttodorov | 23:eca4414196ca | 207 | } |
nameless129 | 28:45e8aa1fc420 | 208 | //fix to 8bit mode |
ttodorov | 23:eca4414196ca | 209 | void ILI9328_LCD::WriteData( unsigned short data ) |
ttodorov | 23:eca4414196ca | 210 | { |
ttodorov | 23:eca4414196ca | 211 | _lcd_pin_rs = HIGH; |
nameless129 | 30:1e9905bdfd15 | 212 | // _lcd_port->write( data>>8 ); |
nameless129 | 30:1e9905bdfd15 | 213 | |
nameless129 | 30:1e9905bdfd15 | 214 | _D0 = data&0x0100; |
nameless129 | 30:1e9905bdfd15 | 215 | _D1 = data&0x0200; |
nameless129 | 30:1e9905bdfd15 | 216 | _D2 = data&0x0400; |
nameless129 | 30:1e9905bdfd15 | 217 | _D3 = data&0x0800; |
nameless129 | 30:1e9905bdfd15 | 218 | _D4 = data&0x1000; |
nameless129 | 30:1e9905bdfd15 | 219 | _D5 = data&0x2000; |
nameless129 | 30:1e9905bdfd15 | 220 | _D6 = data&0x4000; |
nameless129 | 30:1e9905bdfd15 | 221 | _D7 = data&0x8000; |
nameless129 | 30:1e9905bdfd15 | 222 | |
nameless129 | 28:45e8aa1fc420 | 223 | pulseLow( _lcd_pin_wr ); |
nameless129 | 30:1e9905bdfd15 | 224 | // _lcd_port->write( data&0xff ); |
nameless129 | 30:1e9905bdfd15 | 225 | |
nameless129 | 30:1e9905bdfd15 | 226 | _D0 = data&0x01; |
nameless129 | 30:1e9905bdfd15 | 227 | _D1 = data&0x02; |
nameless129 | 30:1e9905bdfd15 | 228 | _D2 = data&0x04; |
nameless129 | 30:1e9905bdfd15 | 229 | _D3 = data&0x08; |
nameless129 | 30:1e9905bdfd15 | 230 | _D4 = data&0x10; |
nameless129 | 30:1e9905bdfd15 | 231 | _D5 = data&0x20; |
nameless129 | 30:1e9905bdfd15 | 232 | _D6 = data&0x40; |
nameless129 | 30:1e9905bdfd15 | 233 | _D7 = data&0x80; |
nameless129 | 30:1e9905bdfd15 | 234 | |
ttodorov | 23:eca4414196ca | 235 | pulseLow( _lcd_pin_wr ); |
ttodorov | 23:eca4414196ca | 236 | } |
ttodorov | 23:eca4414196ca | 237 | |
ttodorov | 23:eca4414196ca | 238 | void ILI9328_LCD::SetXY( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2 ) |
ttodorov | 23:eca4414196ca | 239 | { |
ttodorov | 25:6cffb758c075 | 240 | switch ( _orientation ) |
ttodorov | 25:6cffb758c075 | 241 | { |
ttodorov | 25:6cffb758c075 | 242 | case LANDSCAPE: |
ttodorov | 25:6cffb758c075 | 243 | case LANDSCAPE_REV: |
ttodorov | 25:6cffb758c075 | 244 | WriteCmdData( 0x20, y1 ); |
ttodorov | 25:6cffb758c075 | 245 | WriteCmdData( 0x21, x1 ); |
ttodorov | 25:6cffb758c075 | 246 | WriteCmdData( 0x50, y1 ); |
ttodorov | 25:6cffb758c075 | 247 | WriteCmdData( 0x52, x1 ); |
ttodorov | 25:6cffb758c075 | 248 | WriteCmdData( 0x51, y2 ); |
ttodorov | 25:6cffb758c075 | 249 | WriteCmdData( 0x53, x2 ); |
ttodorov | 25:6cffb758c075 | 250 | break; |
ttodorov | 25:6cffb758c075 | 251 | |
ttodorov | 25:6cffb758c075 | 252 | case PORTRAIT_REV: |
ttodorov | 25:6cffb758c075 | 253 | case PORTRAIT: |
ttodorov | 25:6cffb758c075 | 254 | default: |
ttodorov | 25:6cffb758c075 | 255 | WriteCmdData( 0x20, x1 ); |
ttodorov | 25:6cffb758c075 | 256 | WriteCmdData( 0x21, y1 ); |
ttodorov | 25:6cffb758c075 | 257 | WriteCmdData( 0x50, x1 ); |
ttodorov | 25:6cffb758c075 | 258 | WriteCmdData( 0x52, y1 ); |
ttodorov | 25:6cffb758c075 | 259 | WriteCmdData( 0x51, x2 ); |
ttodorov | 25:6cffb758c075 | 260 | WriteCmdData( 0x53, y2 ); |
ttodorov | 25:6cffb758c075 | 261 | break; |
ttodorov | 25:6cffb758c075 | 262 | } |
ttodorov | 23:eca4414196ca | 263 | WriteCmd( 0x22 ); |
ttodorov | 23:eca4414196ca | 264 | } |
ttodorov | 23:eca4414196ca | 265 | |
ttodorov | 23:eca4414196ca | 266 | void ILI9328_LCD::SetPixelColor( unsigned int color, colordepth_t mode ) |
ttodorov | 23:eca4414196ca | 267 | { |
ttodorov | 23:eca4414196ca | 268 | unsigned char r, g, b; |
ttodorov | 23:eca4414196ca | 269 | unsigned short clr; |
ttodorov | 26:28f64fbcf7df | 270 | r = g = b = 0; |
ttodorov | 23:eca4414196ca | 271 | if ( _colorDepth == RGB16 ) |
ttodorov | 23:eca4414196ca | 272 | { |
ttodorov | 23:eca4414196ca | 273 | switch ( mode ) |
ttodorov | 23:eca4414196ca | 274 | { |
ttodorov | 23:eca4414196ca | 275 | case RGB16: |
ttodorov | 23:eca4414196ca | 276 | WriteData( color & 0xFFFF ); |
ttodorov | 23:eca4414196ca | 277 | break; |
ttodorov | 23:eca4414196ca | 278 | case RGB18: |
ttodorov | 23:eca4414196ca | 279 | r = ( color >> 10 ) & 0xF8; |
ttodorov | 23:eca4414196ca | 280 | g = ( color >> 4 ) & 0xFC; |
ttodorov | 23:eca4414196ca | 281 | b = ( color >> 1 ) & 0x1F; |
ttodorov | 23:eca4414196ca | 282 | clr = ( ( r | ( g >> 5 ) ) << 8 ) | ( ( g << 3 ) | b ); |
ttodorov | 23:eca4414196ca | 283 | WriteData( clr ); |
ttodorov | 23:eca4414196ca | 284 | break; |
ttodorov | 23:eca4414196ca | 285 | case RGB24: |
ttodorov | 23:eca4414196ca | 286 | r = ( color >> 16 ) & 0xF8; |
ttodorov | 23:eca4414196ca | 287 | g = ( color >> 8 ) & 0xFC; |
ttodorov | 23:eca4414196ca | 288 | b = color & 0xF8; |
ttodorov | 23:eca4414196ca | 289 | clr = ( ( r | ( g >> 5 ) ) << 8 ) | ( ( g << 3 ) | ( b >> 3 ) ); |
ttodorov | 23:eca4414196ca | 290 | WriteData( clr ); |
ttodorov | 23:eca4414196ca | 291 | break; |
ttodorov | 23:eca4414196ca | 292 | } |
ttodorov | 23:eca4414196ca | 293 | } |
ttodorov | 23:eca4414196ca | 294 | else if ( _colorDepth == RGB18 ) |
ttodorov | 23:eca4414196ca | 295 | { |
ttodorov | 23:eca4414196ca | 296 | switch ( mode ) |
ttodorov | 23:eca4414196ca | 297 | { |
ttodorov | 23:eca4414196ca | 298 | case RGB16: |
ttodorov | 23:eca4414196ca | 299 | r = ( ( color >> 8 ) & 0xF8 ) | ( ( color & 0x8000 ) >> 13 ); |
ttodorov | 23:eca4414196ca | 300 | g = ( color >> 3 ) & 0xFC; |
ttodorov | 23:eca4414196ca | 301 | b = ( ( color << 3 ) & 0xFC ) | ( ( color >> 3 ) & 0x01 ); |
ttodorov | 23:eca4414196ca | 302 | break; |
ttodorov | 23:eca4414196ca | 303 | case RGB18: |
ttodorov | 23:eca4414196ca | 304 | b = ( color << 2 ) & 0xFC; |
ttodorov | 23:eca4414196ca | 305 | g = ( color >> 4 ) & 0xFC; |
ttodorov | 23:eca4414196ca | 306 | r = ( color >> 10 ) & 0xFC; |
ttodorov | 23:eca4414196ca | 307 | break; |
ttodorov | 23:eca4414196ca | 308 | case RGB24: |
ttodorov | 23:eca4414196ca | 309 | r = ( color >> 16 ) & 0xFC; |
ttodorov | 23:eca4414196ca | 310 | g = ( color >> 8 ) & 0xFC; |
ttodorov | 23:eca4414196ca | 311 | b = color & 0xFC; |
ttodorov | 23:eca4414196ca | 312 | break; |
ttodorov | 23:eca4414196ca | 313 | } |
ttodorov | 26:28f64fbcf7df | 314 | clr = ( r << 8 ) | ( g << 2 ) | ( b >> 4 ); |
ttodorov | 26:28f64fbcf7df | 315 | WriteData( clr ); |
ttodorov | 26:28f64fbcf7df | 316 | WriteData( b << 4 ); |
ttodorov | 23:eca4414196ca | 317 | } |
ttodorov | 23:eca4414196ca | 318 | } |