1.44 tft lcd display
Dependencies: TFT_fonts mbed-os
Fork of newTFTLCD by
hx8340bs.cpp@10:69571adcfad5, 2012-12-11 (annotated)
- Committer:
- ttodorov
- Date:
- Tue Dec 11 03:18:43 2012 +0000
- Revision:
- 10:69571adcfad5
- Parent:
- 9:58b328831d0a
- Child:
- 12:d0978272a340
- preliminary support for using 18-bit colors
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ttodorov | 4:3ac4239f6c9c | 1 | /* |
ttodorov | 4:3ac4239f6c9c | 2 | * Copyright (C)2010-2012 Henning Karlsen. All right reserved. |
ttodorov | 4:3ac4239f6c9c | 3 | * Copyright (C)2012 Todor Todorov. |
ttodorov | 4:3ac4239f6c9c | 4 | * |
ttodorov | 4:3ac4239f6c9c | 5 | * This library is free software; you can redistribute it and/or |
ttodorov | 4:3ac4239f6c9c | 6 | * modify it under the terms of the GNU Lesser General Public |
ttodorov | 4:3ac4239f6c9c | 7 | * License as published by the Free Software Foundation; either |
ttodorov | 4:3ac4239f6c9c | 8 | * version 2.1 of the License, or (at your option) any later version. |
ttodorov | 4:3ac4239f6c9c | 9 | * |
ttodorov | 4:3ac4239f6c9c | 10 | * This library is distributed in the hope that it will be useful, |
ttodorov | 4:3ac4239f6c9c | 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
ttodorov | 4:3ac4239f6c9c | 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
ttodorov | 4:3ac4239f6c9c | 13 | * Lesser General Public License for more details. |
ttodorov | 4:3ac4239f6c9c | 14 | * |
ttodorov | 4:3ac4239f6c9c | 15 | * You should have received a copy of the GNU Lesser General Public |
ttodorov | 4:3ac4239f6c9c | 16 | * License along with this library; if not, write to: |
ttodorov | 4:3ac4239f6c9c | 17 | * |
ttodorov | 4:3ac4239f6c9c | 18 | * Free Software Foundation, Inc. |
ttodorov | 4:3ac4239f6c9c | 19 | * 51 Franklin St, 5th Floor, Boston, MA 02110-1301, USA |
ttodorov | 4:3ac4239f6c9c | 20 | * |
ttodorov | 4:3ac4239f6c9c | 21 | *********************************************************************/ |
ttodorov | 4:3ac4239f6c9c | 22 | #include "hx8340bs.h" |
ttodorov | 4:3ac4239f6c9c | 23 | #include "helpers.h" |
ttodorov | 4:3ac4239f6c9c | 24 | |
ttodorov | 4:3ac4239f6c9c | 25 | HX8340S_LCD::HX8340S_LCD( PinName CS, PinName RESET, PinName SCL, PinName SDI, PinName BL ) |
ttodorov | 4:3ac4239f6c9c | 26 | : LCD( 176, 220, CS, NC, RESET ), _lcd_pin_scl( SCL ), _lcd_pin_sdi( SDI ) |
ttodorov | 4:3ac4239f6c9c | 27 | { |
ttodorov | 4:3ac4239f6c9c | 28 | if ( BL != NC ) _lcd_pin_bl = new DigitalOut( BL ); |
ttodorov | 4:3ac4239f6c9c | 29 | else _lcd_pin_bl = 0; |
ttodorov | 4:3ac4239f6c9c | 30 | } |
ttodorov | 9:58b328831d0a | 31 | |
ttodorov | 4:3ac4239f6c9c | 32 | void HX8340S_LCD::Initialize( orientation_t orientation ) |
ttodorov | 4:3ac4239f6c9c | 33 | { |
ttodorov | 4:3ac4239f6c9c | 34 | _orientation = orientation; |
ttodorov | 4:3ac4239f6c9c | 35 | |
ttodorov | 4:3ac4239f6c9c | 36 | wait_ms( 100 ); |
ttodorov | 4:3ac4239f6c9c | 37 | _lcd_pin_reset = HIGH; |
ttodorov | 4:3ac4239f6c9c | 38 | wait_ms( 5 ); |
ttodorov | 4:3ac4239f6c9c | 39 | _lcd_pin_reset = LOW; |
ttodorov | 4:3ac4239f6c9c | 40 | wait_ms( 15 ); |
ttodorov | 4:3ac4239f6c9c | 41 | _lcd_pin_reset = HIGH; |
ttodorov | 4:3ac4239f6c9c | 42 | _lcd_pin_cs = HIGH; |
ttodorov | 4:3ac4239f6c9c | 43 | _lcd_pin_scl = HIGH; |
ttodorov | 4:3ac4239f6c9c | 44 | _lcd_pin_sdi = HIGH; |
ttodorov | 4:3ac4239f6c9c | 45 | if ( _lcd_pin_bl != 0 ) |
ttodorov | 4:3ac4239f6c9c | 46 | *_lcd_pin_bl = HIGH; |
ttodorov | 4:3ac4239f6c9c | 47 | wait_ms( 55 ); |
ttodorov | 4:3ac4239f6c9c | 48 | |
ttodorov | 4:3ac4239f6c9c | 49 | Activate(); |
ttodorov | 4:3ac4239f6c9c | 50 | WriteCmd( 0xC1 ); |
ttodorov | 4:3ac4239f6c9c | 51 | WriteByteData( 0xFF ); |
ttodorov | 4:3ac4239f6c9c | 52 | WriteByteData( 0x83 ); |
ttodorov | 4:3ac4239f6c9c | 53 | WriteByteData( 0x40 ); |
ttodorov | 4:3ac4239f6c9c | 54 | WriteCmd( 0x11 ); |
ttodorov | 4:3ac4239f6c9c | 55 | wait_ms( 160 ); |
ttodorov | 4:3ac4239f6c9c | 56 | WriteCmd( 0xCA ); |
ttodorov | 4:3ac4239f6c9c | 57 | WriteByteData( 0x70 ); |
ttodorov | 4:3ac4239f6c9c | 58 | WriteByteData( 0x00 ); |
ttodorov | 4:3ac4239f6c9c | 59 | WriteByteData( 0xD9 ); |
ttodorov | 4:3ac4239f6c9c | 60 | WriteCmd( 0xB0 ); |
ttodorov | 4:3ac4239f6c9c | 61 | WriteByteData( 0x01 ); |
ttodorov | 4:3ac4239f6c9c | 62 | WriteByteData( 0x11 ); |
ttodorov | 4:3ac4239f6c9c | 63 | |
ttodorov | 4:3ac4239f6c9c | 64 | WriteCmd( 0xC9 ); |
ttodorov | 4:3ac4239f6c9c | 65 | WriteByteData( 0x90 ); |
ttodorov | 4:3ac4239f6c9c | 66 | WriteByteData( 0x49 ); |
ttodorov | 4:3ac4239f6c9c | 67 | WriteByteData( 0x10 ); |
ttodorov | 4:3ac4239f6c9c | 68 | WriteByteData( 0x28 ); |
ttodorov | 4:3ac4239f6c9c | 69 | WriteByteData( 0x28 ); |
ttodorov | 4:3ac4239f6c9c | 70 | WriteByteData( 0x10 ); |
ttodorov | 4:3ac4239f6c9c | 71 | WriteByteData( 0x00 ); |
ttodorov | 4:3ac4239f6c9c | 72 | WriteByteData( 0x06 ); |
ttodorov | 4:3ac4239f6c9c | 73 | wait_ms( 20 ); |
ttodorov | 4:3ac4239f6c9c | 74 | WriteCmd( 0xC2 ); |
ttodorov | 4:3ac4239f6c9c | 75 | WriteByteData( 0x60 ); |
ttodorov | 4:3ac4239f6c9c | 76 | WriteByteData( 0x71 ); |
ttodorov | 4:3ac4239f6c9c | 77 | WriteByteData( 0x01 ); |
ttodorov | 4:3ac4239f6c9c | 78 | WriteByteData( 0x0E ); |
ttodorov | 4:3ac4239f6c9c | 79 | WriteByteData( 0x05 ); |
ttodorov | 4:3ac4239f6c9c | 80 | WriteByteData( 0x02 ); |
ttodorov | 4:3ac4239f6c9c | 81 | WriteByteData( 0x09 ); |
ttodorov | 4:3ac4239f6c9c | 82 | WriteByteData( 0x31 ); |
ttodorov | 4:3ac4239f6c9c | 83 | WriteByteData( 0x0A ); |
ttodorov | 4:3ac4239f6c9c | 84 | |
ttodorov | 4:3ac4239f6c9c | 85 | WriteCmd( 0xc3 ); |
ttodorov | 4:3ac4239f6c9c | 86 | WriteByteData( 0x67 ); |
ttodorov | 4:3ac4239f6c9c | 87 | WriteByteData( 0x30 ); |
ttodorov | 4:3ac4239f6c9c | 88 | WriteByteData( 0x61 ); |
ttodorov | 4:3ac4239f6c9c | 89 | WriteByteData( 0x17 ); |
ttodorov | 4:3ac4239f6c9c | 90 | WriteByteData( 0x48 ); |
ttodorov | 4:3ac4239f6c9c | 91 | WriteByteData( 0x07 ); |
ttodorov | 4:3ac4239f6c9c | 92 | WriteByteData( 0x05 ); |
ttodorov | 4:3ac4239f6c9c | 93 | WriteByteData( 0x33 ); |
ttodorov | 4:3ac4239f6c9c | 94 | wait_ms( 10 ); |
ttodorov | 4:3ac4239f6c9c | 95 | WriteCmd( 0xB5 ); |
ttodorov | 4:3ac4239f6c9c | 96 | WriteByteData( 0x35 ); |
ttodorov | 4:3ac4239f6c9c | 97 | WriteByteData( 0x20 ); |
ttodorov | 4:3ac4239f6c9c | 98 | WriteByteData( 0x45 ); |
ttodorov | 4:3ac4239f6c9c | 99 | |
ttodorov | 4:3ac4239f6c9c | 100 | WriteCmd( 0xB4 ); |
ttodorov | 4:3ac4239f6c9c | 101 | WriteByteData( 0x33 ); |
ttodorov | 4:3ac4239f6c9c | 102 | WriteByteData( 0x25 ); |
ttodorov | 4:3ac4239f6c9c | 103 | WriteByteData( 0x4c ); |
ttodorov | 4:3ac4239f6c9c | 104 | wait_ms( 10 ); |
ttodorov | 4:3ac4239f6c9c | 105 | WriteCmd( 0x3a ); |
ttodorov | 4:3ac4239f6c9c | 106 | WriteByteData( 0x05 ); |
ttodorov | 4:3ac4239f6c9c | 107 | WriteCmd( 0x29 ); |
ttodorov | 4:3ac4239f6c9c | 108 | wait_ms( 10 ); |
ttodorov | 4:3ac4239f6c9c | 109 | WriteCmd( 0x2a ); |
ttodorov | 4:3ac4239f6c9c | 110 | WriteByteData( 0x00 ); |
ttodorov | 4:3ac4239f6c9c | 111 | WriteByteData( 0x00 ); |
ttodorov | 4:3ac4239f6c9c | 112 | WriteByteData( 0x00 ); |
ttodorov | 4:3ac4239f6c9c | 113 | WriteByteData( 0xaf ); |
ttodorov | 4:3ac4239f6c9c | 114 | WriteCmd( 0x2b ); |
ttodorov | 4:3ac4239f6c9c | 115 | WriteByteData( 0x00 ); |
ttodorov | 4:3ac4239f6c9c | 116 | WriteByteData( 0x00 ); |
ttodorov | 4:3ac4239f6c9c | 117 | WriteByteData( 0x00 ); |
ttodorov | 4:3ac4239f6c9c | 118 | WriteByteData( 0xdb ); |
ttodorov | 4:3ac4239f6c9c | 119 | WriteCmd( 0x2c ); |
ttodorov | 4:3ac4239f6c9c | 120 | Deactivate(); |
ttodorov | 4:3ac4239f6c9c | 121 | } |
ttodorov | 4:3ac4239f6c9c | 122 | |
ttodorov | 4:3ac4239f6c9c | 123 | void HX8340S_LCD::Sleep( void ) |
ttodorov | 4:3ac4239f6c9c | 124 | { |
ttodorov | 4:3ac4239f6c9c | 125 | Activate(); |
ttodorov | 4:3ac4239f6c9c | 126 | WriteCmd( 0x28 ); |
ttodorov | 4:3ac4239f6c9c | 127 | wait_ms( 10 ); |
ttodorov | 4:3ac4239f6c9c | 128 | WriteCmd( 0x10 ); |
ttodorov | 4:3ac4239f6c9c | 129 | wait_ms( 125 ); |
ttodorov | 4:3ac4239f6c9c | 130 | if ( _lcd_pin_bl != 0 ) |
ttodorov | 4:3ac4239f6c9c | 131 | *_lcd_pin_bl = LOW; |
ttodorov | 4:3ac4239f6c9c | 132 | Deactivate(); |
ttodorov | 4:3ac4239f6c9c | 133 | } |
ttodorov | 4:3ac4239f6c9c | 134 | |
ttodorov | 4:3ac4239f6c9c | 135 | void HX8340S_LCD::WakeUp( void ) |
ttodorov | 4:3ac4239f6c9c | 136 | { |
ttodorov | 4:3ac4239f6c9c | 137 | Activate(); |
ttodorov | 4:3ac4239f6c9c | 138 | WriteCmd( 0x29 ); |
ttodorov | 4:3ac4239f6c9c | 139 | wait_ms( 10 ); |
ttodorov | 4:3ac4239f6c9c | 140 | WriteCmd( 0x11 ); |
ttodorov | 4:3ac4239f6c9c | 141 | wait_ms( 125 ); |
ttodorov | 4:3ac4239f6c9c | 142 | if ( _lcd_pin_bl != 0 ) |
ttodorov | 4:3ac4239f6c9c | 143 | *_lcd_pin_bl = HIGH; |
ttodorov | 4:3ac4239f6c9c | 144 | Deactivate(); |
ttodorov | 4:3ac4239f6c9c | 145 | } |
ttodorov | 4:3ac4239f6c9c | 146 | |
ttodorov | 4:3ac4239f6c9c | 147 | void HX8340S_LCD::WriteCmd( unsigned short cmd ) |
ttodorov | 4:3ac4239f6c9c | 148 | { |
ttodorov | 4:3ac4239f6c9c | 149 | _lcd_pin_sdi = LOW; |
ttodorov | 4:3ac4239f6c9c | 150 | pulseLow( _lcd_pin_scl ); |
ttodorov | 4:3ac4239f6c9c | 151 | serializeByte( cmd & 0xFF ); |
ttodorov | 4:3ac4239f6c9c | 152 | } |
ttodorov | 4:3ac4239f6c9c | 153 | |
ttodorov | 4:3ac4239f6c9c | 154 | void HX8340S_LCD::WriteData( unsigned short data ) |
ttodorov | 4:3ac4239f6c9c | 155 | { |
ttodorov | 4:3ac4239f6c9c | 156 | _lcd_pin_sdi = HIGH; |
ttodorov | 4:3ac4239f6c9c | 157 | pulseLow( _lcd_pin_scl ); |
ttodorov | 4:3ac4239f6c9c | 158 | serializeByte( ( data >> 8 ) & 0xFF ); |
ttodorov | 4:3ac4239f6c9c | 159 | _lcd_pin_sdi = HIGH; |
ttodorov | 4:3ac4239f6c9c | 160 | pulseLow( _lcd_pin_scl ); |
ttodorov | 4:3ac4239f6c9c | 161 | serializeByte( data & 0xFF ); |
ttodorov | 4:3ac4239f6c9c | 162 | } |
ttodorov | 4:3ac4239f6c9c | 163 | |
ttodorov | 4:3ac4239f6c9c | 164 | void HX8340S_LCD::WriteByteData( unsigned char data ) |
ttodorov | 4:3ac4239f6c9c | 165 | { |
ttodorov | 4:3ac4239f6c9c | 166 | _lcd_pin_sdi = HIGH; |
ttodorov | 4:3ac4239f6c9c | 167 | pulseLow( _lcd_pin_scl ); |
ttodorov | 4:3ac4239f6c9c | 168 | serializeByte( data ); |
ttodorov | 4:3ac4239f6c9c | 169 | } |
ttodorov | 4:3ac4239f6c9c | 170 | |
ttodorov | 4:3ac4239f6c9c | 171 | void HX8340S_LCD::SetXY( uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2 ) |
ttodorov | 4:3ac4239f6c9c | 172 | { |
ttodorov | 4:3ac4239f6c9c | 173 | if ( _orientation == LANDSCAPE ) |
ttodorov | 4:3ac4239f6c9c | 174 | { |
ttodorov | 4:3ac4239f6c9c | 175 | swap( uint16_t, x1, y1 ) |
ttodorov | 4:3ac4239f6c9c | 176 | swap( uint16_t, x2, y2 ) |
ttodorov | 4:3ac4239f6c9c | 177 | y1 = _disp_height - y1; |
ttodorov | 4:3ac4239f6c9c | 178 | y2 = _disp_height - y2; |
ttodorov | 4:3ac4239f6c9c | 179 | swap( uint16_t, y1, y2 ) |
ttodorov | 4:3ac4239f6c9c | 180 | } |
ttodorov | 4:3ac4239f6c9c | 181 | |
ttodorov | 4:3ac4239f6c9c | 182 | WriteCmdData( 0x2a, x1 ); |
ttodorov | 4:3ac4239f6c9c | 183 | WriteData( x2 ); |
ttodorov | 4:3ac4239f6c9c | 184 | WriteCmdData( 0x2b, y1 ); |
ttodorov | 4:3ac4239f6c9c | 185 | WriteData( y2 ); |
ttodorov | 4:3ac4239f6c9c | 186 | WriteCmd( 0x2c ); |
ttodorov | 4:3ac4239f6c9c | 187 | } |
ttodorov | 4:3ac4239f6c9c | 188 | |
ttodorov | 10:69571adcfad5 | 189 | void HX8340S_LCD::SetPixelColor( unsigned short color ) |
ttodorov | 10:69571adcfad5 | 190 | { |
ttodorov | 10:69571adcfad5 | 191 | WriteData( color ); |
ttodorov | 10:69571adcfad5 | 192 | } |
ttodorov | 10:69571adcfad5 | 193 | |
ttodorov | 4:3ac4239f6c9c | 194 | void HX8340S_LCD::serializeByte( unsigned char data ) |
ttodorov | 4:3ac4239f6c9c | 195 | { |
ttodorov | 4:3ac4239f6c9c | 196 | for ( int i = 0; i < 8; i++ ) |
ttodorov | 4:3ac4239f6c9c | 197 | { |
ttodorov | 4:3ac4239f6c9c | 198 | if ( data & 0x80 ) _lcd_pin_sdi = HIGH; |
ttodorov | 4:3ac4239f6c9c | 199 | else _lcd_pin_sdi = LOW; |
ttodorov | 4:3ac4239f6c9c | 200 | pulseLow( _lcd_pin_scl ); |
ttodorov | 4:3ac4239f6c9c | 201 | data = data << 1; |
ttodorov | 4:3ac4239f6c9c | 202 | } |
ttodorov | 4:3ac4239f6c9c | 203 | } |