test
Dependencies: SDFileSystem mbed-dev
Fork of Nucleo_Ex06_EMU by
TFT/tft.cpp@4:53ef91c87d74, 2017-05-27 (annotated)
- Committer:
- charliex
- Date:
- Sat May 27 02:17:37 2017 +0000
- Revision:
- 4:53ef91c87d74
- Parent:
- 3:8d6e6aec9b01
test
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
charliex | 3:8d6e6aec9b01 | 1 | /*===================================================================*/ |
charliex | 3:8d6e6aec9b01 | 2 | /* */ |
charliex | 3:8d6e6aec9b01 | 3 | /* tft.cpp : TFT(ILI9341) function */ |
charliex | 3:8d6e6aec9b01 | 4 | /* */ |
charliex | 3:8d6e6aec9b01 | 5 | /* 2016/1/20 Racoon */ |
charliex | 3:8d6e6aec9b01 | 6 | /* */ |
charliex | 3:8d6e6aec9b01 | 7 | /*===================================================================*/ |
charliex | 3:8d6e6aec9b01 | 8 | |
charliex | 3:8d6e6aec9b01 | 9 | #include "mbed.h" |
charliex | 3:8d6e6aec9b01 | 10 | #include "tft.h" |
charliex | 3:8d6e6aec9b01 | 11 | |
charliex | 3:8d6e6aec9b01 | 12 | #ifdef OLD_BOARD |
charliex | 3:8d6e6aec9b01 | 13 | DigitalOut cs ( PB_5, PullUp ); // TFT chipselect pin |
charliex | 3:8d6e6aec9b01 | 14 | #else |
charliex | 3:8d6e6aec9b01 | 15 | DigitalOut cs ( PC_7, PullUp ); // TFT chipselect pin |
charliex | 3:8d6e6aec9b01 | 16 | #endif |
charliex | 3:8d6e6aec9b01 | 17 | |
charliex | 3:8d6e6aec9b01 | 18 | DigitalOut dc ( PA_8, PullUp ); // TFT data command select pin |
charliex | 3:8d6e6aec9b01 | 19 | |
charliex | 3:8d6e6aec9b01 | 20 | //mopho |
charliex | 3:8d6e6aec9b01 | 21 | #if defined( MOPHO_BOARD) |
charliex | 3:8d6e6aec9b01 | 22 | DigitalOut rst ( PA_2, PullUp ); // TFT reset pin |
charliex | 3:8d6e6aec9b01 | 23 | #endif |
charliex | 3:8d6e6aec9b01 | 24 | |
charliex | 3:8d6e6aec9b01 | 25 | // standalone |
charliex | 3:8d6e6aec9b01 | 26 | #if defined( STANDALONE_BOARD) |
charliex | 3:8d6e6aec9b01 | 27 | DigitalOut rst ( PC_8, PullUp ); // TFT reset pin |
charliex | 3:8d6e6aec9b01 | 28 | #endif |
charliex | 3:8d6e6aec9b01 | 29 | |
charliex | 3:8d6e6aec9b01 | 30 | //DigitalOut back ( PC_9 ); |
charliex | 3:8d6e6aec9b01 | 31 | |
charliex | 3:8d6e6aec9b01 | 32 | PwmOut back ( PC_9 ); |
charliex | 3:8d6e6aec9b01 | 33 | /*-------------------------------------------------------------------*/ |
charliex | 3:8d6e6aec9b01 | 34 | /* Write command */ |
charliex | 3:8d6e6aec9b01 | 35 | /*-------------------------------------------------------------------*/ |
charliex | 3:8d6e6aec9b01 | 36 | void write_cmd ( uint8_t cmd ) |
charliex | 3:8d6e6aec9b01 | 37 | { |
charliex | 3:8d6e6aec9b01 | 38 | dc = 0; |
charliex | 3:8d6e6aec9b01 | 39 | spi_write ( cmd ); |
charliex | 3:8d6e6aec9b01 | 40 | } |
charliex | 3:8d6e6aec9b01 | 41 | |
charliex | 3:8d6e6aec9b01 | 42 | /*-------------------------------------------------------------------*/ |
charliex | 3:8d6e6aec9b01 | 43 | /* Write data */ |
charliex | 3:8d6e6aec9b01 | 44 | /*-------------------------------------------------------------------*/ |
charliex | 3:8d6e6aec9b01 | 45 | void write_data ( uint8_t data ) |
charliex | 3:8d6e6aec9b01 | 46 | { |
charliex | 3:8d6e6aec9b01 | 47 | dc = 1; |
charliex | 3:8d6e6aec9b01 | 48 | spi_write ( data ); |
charliex | 3:8d6e6aec9b01 | 49 | } |
charliex | 3:8d6e6aec9b01 | 50 | |
charliex | 3:8d6e6aec9b01 | 51 | uint8_t read_diag ( void ) |
charliex | 3:8d6e6aec9b01 | 52 | { |
charliex | 3:8d6e6aec9b01 | 53 | uint8_t status; |
charliex | 3:8d6e6aec9b01 | 54 | |
charliex | 3:8d6e6aec9b01 | 55 | write_cmd ( 0xf ); |
charliex | 3:8d6e6aec9b01 | 56 | // dummy read |
charliex | 3:8d6e6aec9b01 | 57 | spi_read(); |
charliex | 3:8d6e6aec9b01 | 58 | status = spi_read(); |
charliex | 3:8d6e6aec9b01 | 59 | |
charliex | 3:8d6e6aec9b01 | 60 | if ( status == 0 ) { |
charliex | 3:8d6e6aec9b01 | 61 | return 0; |
charliex | 3:8d6e6aec9b01 | 62 | } |
charliex | 3:8d6e6aec9b01 | 63 | |
charliex | 3:8d6e6aec9b01 | 64 | return 1; |
charliex | 3:8d6e6aec9b01 | 65 | |
charliex | 3:8d6e6aec9b01 | 66 | } |
charliex | 3:8d6e6aec9b01 | 67 | |
charliex | 3:8d6e6aec9b01 | 68 | /*-------------------------------------------------------------------*/ |
charliex | 3:8d6e6aec9b01 | 69 | /* TFT reset */ |
charliex | 3:8d6e6aec9b01 | 70 | /*-------------------------------------------------------------------*/ |
charliex | 3:8d6e6aec9b01 | 71 | void tft_reset() |
charliex | 3:8d6e6aec9b01 | 72 | { |
charliex | 3:8d6e6aec9b01 | 73 | // reset |
charliex | 3:8d6e6aec9b01 | 74 | rst = 0; |
charliex | 3:8d6e6aec9b01 | 75 | wait_ms ( 200 ); |
charliex | 3:8d6e6aec9b01 | 76 | rst = 1; |
charliex | 3:8d6e6aec9b01 | 77 | // delay for RST |
charliex | 3:8d6e6aec9b01 | 78 | wait_ms ( 200 ); |
charliex | 3:8d6e6aec9b01 | 79 | |
charliex | 3:8d6e6aec9b01 | 80 | |
charliex | 3:8d6e6aec9b01 | 81 | // reset ili9341 |
charliex | 3:8d6e6aec9b01 | 82 | write_cmd ( 0x1 ); |
charliex | 3:8d6e6aec9b01 | 83 | wait_ms ( 500 ); |
charliex | 3:8d6e6aec9b01 | 84 | |
charliex | 3:8d6e6aec9b01 | 85 | cs = 1; |
charliex | 3:8d6e6aec9b01 | 86 | dc = 1; |
charliex | 3:8d6e6aec9b01 | 87 | |
charliex | 3:8d6e6aec9b01 | 88 | wait_ms ( 200 ); |
charliex | 3:8d6e6aec9b01 | 89 | rst = 0; |
charliex | 3:8d6e6aec9b01 | 90 | wait_us ( 10 ); |
charliex | 3:8d6e6aec9b01 | 91 | rst = 1; |
charliex | 3:8d6e6aec9b01 | 92 | wait_ms ( 120 ); |
charliex | 3:8d6e6aec9b01 | 93 | cs = 0; |
charliex | 3:8d6e6aec9b01 | 94 | wait_ms ( 10 ); |
charliex | 3:8d6e6aec9b01 | 95 | |
charliex | 3:8d6e6aec9b01 | 96 | write_cmd ( 0x3A ); // Pixel Format |
charliex | 3:8d6e6aec9b01 | 97 | write_data ( 0x55 ); // 16bit Color |
charliex | 3:8d6e6aec9b01 | 98 | |
charliex | 3:8d6e6aec9b01 | 99 | write_cmd ( 0xB1 ); // Frame Control |
charliex | 3:8d6e6aec9b01 | 100 | write_data ( 0 ); |
charliex | 3:8d6e6aec9b01 | 101 | write_data ( 0x1f ); |
charliex | 3:8d6e6aec9b01 | 102 | // 11101000b e8 |
charliex | 3:8d6e6aec9b01 | 103 | // 00101000b 28 |
charliex | 3:8d6e6aec9b01 | 104 | unsigned char mac = 0xe8;//(0xe8 + (1 << 7)); |
charliex | 3:8d6e6aec9b01 | 105 | write_cmd ( 0x36 ); // Memory Access Control |
charliex | 3:8d6e6aec9b01 | 106 | #if !defined( STANDALONE_BOARD) |
charliex | 3:8d6e6aec9b01 | 107 | write_data ( 0xe8 ); // MY MX MV BGR |
charliex | 3:8d6e6aec9b01 | 108 | #else |
charliex | 3:8d6e6aec9b01 | 109 | write_data ( 0x28 ); // MY MX MV BGR |
charliex | 3:8d6e6aec9b01 | 110 | #endif |
charliex | 3:8d6e6aec9b01 | 111 | |
charliex | 3:8d6e6aec9b01 | 112 | write_cmd ( 0x11 ); // Sleep Out |
charliex | 3:8d6e6aec9b01 | 113 | wait_ms ( 5 ); |
charliex | 3:8d6e6aec9b01 | 114 | |
charliex | 3:8d6e6aec9b01 | 115 | write_cmd ( 0x29 ); // Display On |
charliex | 3:8d6e6aec9b01 | 116 | |
charliex | 3:8d6e6aec9b01 | 117 | } |
charliex | 3:8d6e6aec9b01 | 118 | |
charliex | 3:8d6e6aec9b01 | 119 | /*-------------------------------------------------------------------*/ |
charliex | 3:8d6e6aec9b01 | 120 | /* Set windows size, start memory write */ |
charliex | 3:8d6e6aec9b01 | 121 | /*-------------------------------------------------------------------*/ |
charliex | 3:8d6e6aec9b01 | 122 | void tft_set_window ( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1 ) |
charliex | 3:8d6e6aec9b01 | 123 | { |
charliex | 3:8d6e6aec9b01 | 124 | write_cmd ( 0x2A ); // Column Address Set |
charliex | 3:8d6e6aec9b01 | 125 | write_data ( x0 >> 8 ); |
charliex | 3:8d6e6aec9b01 | 126 | write_data ( x0 ); |
charliex | 3:8d6e6aec9b01 | 127 | write_data ( x1 >> 8 ); |
charliex | 3:8d6e6aec9b01 | 128 | write_data ( x1 ); |
charliex | 3:8d6e6aec9b01 | 129 | |
charliex | 3:8d6e6aec9b01 | 130 | write_cmd ( 0x2B ); // Page Address Set |
charliex | 3:8d6e6aec9b01 | 131 | write_data ( y0 >> 8 ); |
charliex | 3:8d6e6aec9b01 | 132 | write_data ( y0 ); |
charliex | 3:8d6e6aec9b01 | 133 | write_data ( y1 >> 8 ); |
charliex | 3:8d6e6aec9b01 | 134 | write_data ( y1 ); |
charliex | 3:8d6e6aec9b01 | 135 | |
charliex | 3:8d6e6aec9b01 | 136 | write_cmd ( 0x2C ); // Memory Write |
charliex | 3:8d6e6aec9b01 | 137 | |
charliex | 3:8d6e6aec9b01 | 138 | wait_us ( 20 ); |
charliex | 3:8d6e6aec9b01 | 139 | |
charliex | 3:8d6e6aec9b01 | 140 | dc = 1; |
charliex | 3:8d6e6aec9b01 | 141 | } |
charliex | 3:8d6e6aec9b01 | 142 | |
charliex | 3:8d6e6aec9b01 | 143 | /*-------------------------------------------------------------------*/ |
charliex | 3:8d6e6aec9b01 | 144 | /* Clear screen */ |
charliex | 3:8d6e6aec9b01 | 145 | /*-------------------------------------------------------------------*/ |
charliex | 3:8d6e6aec9b01 | 146 | void tft_clear ( uint16_t color ) |
charliex | 3:8d6e6aec9b01 | 147 | { |
charliex | 3:8d6e6aec9b01 | 148 | tft_set_window ( 0, 0, TFT_WIDTH, TFT_HEIGHT ); |
charliex | 3:8d6e6aec9b01 | 149 | |
charliex | 3:8d6e6aec9b01 | 150 | for ( int i = 0; i < TFT_WIDTH * TFT_HEIGHT; ++i ) { |
charliex | 3:8d6e6aec9b01 | 151 | spi_writew ( color ); |
charliex | 3:8d6e6aec9b01 | 152 | } |
charliex | 3:8d6e6aec9b01 | 153 | } |
charliex | 3:8d6e6aec9b01 | 154 | |
charliex | 3:8d6e6aec9b01 | 155 | /*-------------------------------------------------------------------*/ |
charliex | 3:8d6e6aec9b01 | 156 | /* Put char */ |
charliex | 3:8d6e6aec9b01 | 157 | /*-------------------------------------------------------------------*/ |
charliex | 3:8d6e6aec9b01 | 158 | void tft_put_char ( int x, int y, char chr, uint16_t color, uint16_t bgcolor ) |
charliex | 3:8d6e6aec9b01 | 159 | { |
charliex | 3:8d6e6aec9b01 | 160 | if ( chr < 0x20 || chr > 0x7f ) { |
charliex | 3:8d6e6aec9b01 | 161 | chr = 0x3f; |
charliex | 3:8d6e6aec9b01 | 162 | |
charliex | 3:8d6e6aec9b01 | 163 | } else { |
charliex | 3:8d6e6aec9b01 | 164 | chr = ( chr < 0x60 ) ? chr - 0x20 : chr - 0x40; |
charliex | 3:8d6e6aec9b01 | 165 | } |
charliex | 3:8d6e6aec9b01 | 166 | |
charliex | 3:8d6e6aec9b01 | 167 | tft_set_window ( x, y, x + 7, y + 6 ); |
charliex | 3:8d6e6aec9b01 | 168 | |
charliex | 3:8d6e6aec9b01 | 169 | for ( int dy = 0; dy < 7; ++dy ) { |
charliex | 3:8d6e6aec9b01 | 170 | unsigned char img = chrimg[chr][dy]; |
charliex | 3:8d6e6aec9b01 | 171 | |
charliex | 3:8d6e6aec9b01 | 172 | for ( int dx = 0; dx < 8; ++dx ) { |
charliex | 3:8d6e6aec9b01 | 173 | if ( img & 0x80 ) { |
charliex | 3:8d6e6aec9b01 | 174 | spi_writew ( color ); |
charliex | 3:8d6e6aec9b01 | 175 | |
charliex | 3:8d6e6aec9b01 | 176 | } else { |
charliex | 3:8d6e6aec9b01 | 177 | spi_writew ( bgcolor ); |
charliex | 3:8d6e6aec9b01 | 178 | } |
charliex | 3:8d6e6aec9b01 | 179 | |
charliex | 3:8d6e6aec9b01 | 180 | img <<= 1; |
charliex | 3:8d6e6aec9b01 | 181 | } |
charliex | 3:8d6e6aec9b01 | 182 | } |
charliex | 3:8d6e6aec9b01 | 183 | |
charliex | 3:8d6e6aec9b01 | 184 | } |
charliex | 3:8d6e6aec9b01 | 185 | |
charliex | 3:8d6e6aec9b01 | 186 | /*-------------------------------------------------------------------*/ |
charliex | 3:8d6e6aec9b01 | 187 | /* Text out */ |
charliex | 3:8d6e6aec9b01 | 188 | /*-------------------------------------------------------------------*/ |
charliex | 3:8d6e6aec9b01 | 189 | void tft_text ( int x, int y, char *text, uint16_t color, uint16_t bgcolor ) |
charliex | 3:8d6e6aec9b01 | 190 | { |
charliex | 3:8d6e6aec9b01 | 191 | while ( *text != 0 ) { |
charliex | 3:8d6e6aec9b01 | 192 | tft_put_char ( x, y, *text, color, bgcolor ); |
charliex | 3:8d6e6aec9b01 | 193 | x += 8; |
charliex | 3:8d6e6aec9b01 | 194 | text++; |
charliex | 3:8d6e6aec9b01 | 195 | } |
charliex | 3:8d6e6aec9b01 | 196 | } |
charliex | 3:8d6e6aec9b01 | 197 | |
charliex | 3:8d6e6aec9b01 | 198 | /*-------------------------------------------------------------------*/ |
charliex | 3:8d6e6aec9b01 | 199 | /* Horizontal Line */ |
charliex | 3:8d6e6aec9b01 | 200 | /*-------------------------------------------------------------------*/ |
charliex | 3:8d6e6aec9b01 | 201 | void tft_hline ( int x1, int y, int x2, uint16_t color ) |
charliex | 3:8d6e6aec9b01 | 202 | { |
charliex | 3:8d6e6aec9b01 | 203 | tft_set_window ( x1, y, x2, y ); |
charliex | 3:8d6e6aec9b01 | 204 | |
charliex | 3:8d6e6aec9b01 | 205 | for ( ; x1 < x2; ++x1 ) { |
charliex | 3:8d6e6aec9b01 | 206 | spi_writew ( color ); |
charliex | 3:8d6e6aec9b01 | 207 | } |
charliex | 3:8d6e6aec9b01 | 208 | } |
charliex | 3:8d6e6aec9b01 | 209 | |
charliex | 3:8d6e6aec9b01 | 210 | /*-------------------------------------------------------------------*/ |
charliex | 3:8d6e6aec9b01 | 211 | /* Vertical Line */ |
charliex | 3:8d6e6aec9b01 | 212 | /*-------------------------------------------------------------------*/ |
charliex | 3:8d6e6aec9b01 | 213 | void tft_vline ( int x, int y1, int y2, uint16_t color ) |
charliex | 3:8d6e6aec9b01 | 214 | { |
charliex | 3:8d6e6aec9b01 | 215 | tft_set_window ( x, y1, x, y2 ); |
charliex | 3:8d6e6aec9b01 | 216 | |
charliex | 3:8d6e6aec9b01 | 217 | for ( ; y1 < y2; ++y1 ) { |
charliex | 3:8d6e6aec9b01 | 218 | spi_writew ( color ); |
charliex | 3:8d6e6aec9b01 | 219 | } |
charliex | 3:8d6e6aec9b01 | 220 | } |
charliex | 3:8d6e6aec9b01 | 221 | |
charliex | 3:8d6e6aec9b01 | 222 | /*-------------------------------------------------------------------*/ |
charliex | 3:8d6e6aec9b01 | 223 | /* Box */ |
charliex | 3:8d6e6aec9b01 | 224 | /*-------------------------------------------------------------------*/ |
charliex | 3:8d6e6aec9b01 | 225 | void tft_box ( int x1, int y1, int x2, int y2, uint16_t color ) |
charliex | 3:8d6e6aec9b01 | 226 | { |
charliex | 3:8d6e6aec9b01 | 227 | tft_hline ( x1, y1, x2, color ); |
charliex | 3:8d6e6aec9b01 | 228 | tft_vline ( x1, y1, y2, color ); |
charliex | 3:8d6e6aec9b01 | 229 | tft_vline ( x2, y1, y2, color ); |
charliex | 3:8d6e6aec9b01 | 230 | tft_hline ( x1, y2, x2, color ); |
charliex | 3:8d6e6aec9b01 | 231 | } |
charliex | 3:8d6e6aec9b01 | 232 | |
charliex | 3:8d6e6aec9b01 | 233 | /*-------------------------------------------------------------------*/ |
charliex | 3:8d6e6aec9b01 | 234 | /* Box Fill */ |
charliex | 3:8d6e6aec9b01 | 235 | /*-------------------------------------------------------------------*/ |
charliex | 3:8d6e6aec9b01 | 236 | void tft_boxfill ( int x1, int y1, int x2, int y2, uint16_t color ) |
charliex | 3:8d6e6aec9b01 | 237 | { |
charliex | 3:8d6e6aec9b01 | 238 | tft_set_window ( x1, y1, x2, y2 ); |
charliex | 3:8d6e6aec9b01 | 239 | |
charliex | 3:8d6e6aec9b01 | 240 | for ( int i = 0; i < ( x2 - x1 + 1 ) * ( y2 - y1 + 1 ); ++i ) { |
charliex | 3:8d6e6aec9b01 | 241 | spi_writew ( color ); |
charliex | 3:8d6e6aec9b01 | 242 | } |
charliex | 3:8d6e6aec9b01 | 243 | } |
charliex | 3:8d6e6aec9b01 | 244 | |
charliex | 3:8d6e6aec9b01 | 245 | /*-------------------------------------------------------------------*/ |
charliex | 3:8d6e6aec9b01 | 246 | /* Draw 4bit BMP */ |
charliex | 3:8d6e6aec9b01 | 247 | /*-------------------------------------------------------------------*/ |
charliex | 3:8d6e6aec9b01 | 248 | bool draw_bmp_4bpp ( const unsigned char *imgdata, int x, int y ) |
charliex | 3:8d6e6aec9b01 | 249 | { |
charliex | 3:8d6e6aec9b01 | 250 | BITMAPFILEHEADER *bf = ( BITMAPFILEHEADER * ) imgdata; |
charliex | 3:8d6e6aec9b01 | 251 | BITMAPINFOHEADER *bi = ( BITMAPINFOHEADER * ) ( imgdata + sizeof ( BITMAPFILEHEADER ) ); |
charliex | 3:8d6e6aec9b01 | 252 | |
charliex | 3:8d6e6aec9b01 | 253 | |
charliex | 3:8d6e6aec9b01 | 254 | if ( bi->biBitCount != 4 ) { |
charliex | 3:8d6e6aec9b01 | 255 | return false; |
charliex | 3:8d6e6aec9b01 | 256 | } |
charliex | 3:8d6e6aec9b01 | 257 | |
charliex | 3:8d6e6aec9b01 | 258 | unsigned char *pRGBPal = ( unsigned char* ) imgdata + sizeof ( BITMAPFILEHEADER ) + bi->biSize; |
charliex | 3:8d6e6aec9b01 | 259 | unsigned short palette[16]; |
charliex | 3:8d6e6aec9b01 | 260 | |
charliex | 3:8d6e6aec9b01 | 261 | for ( int i = 0; pRGBPal < imgdata + bf->bfOffBits && i < 16; ++i ) { |
charliex | 3:8d6e6aec9b01 | 262 | unsigned short r, g, b; |
charliex | 3:8d6e6aec9b01 | 263 | b = *pRGBPal++ >> 3; |
charliex | 3:8d6e6aec9b01 | 264 | g = *pRGBPal++ >> 2; |
charliex | 3:8d6e6aec9b01 | 265 | r = *pRGBPal++ >> 3; |
charliex | 3:8d6e6aec9b01 | 266 | pRGBPal++; |
charliex | 3:8d6e6aec9b01 | 267 | palette[i] = ( ( g & 7 ) << 13 ) | ( b << 8 ) | ( r << 3 ) | ( g >> 3 ); |
charliex | 3:8d6e6aec9b01 | 268 | } |
charliex | 3:8d6e6aec9b01 | 269 | |
charliex | 3:8d6e6aec9b01 | 270 | unsigned short HLine[320]; |
charliex | 3:8d6e6aec9b01 | 271 | int linesize = ( bi->biWidth / 2 + 3 ) & 0xfffc; |
charliex | 3:8d6e6aec9b01 | 272 | |
charliex | 3:8d6e6aec9b01 | 273 | tft_set_window ( x, y, x + bi->biWidth - 1, y + bi->biHeight - 1 ); |
charliex | 3:8d6e6aec9b01 | 274 | |
charliex | 3:8d6e6aec9b01 | 275 | unsigned char *bmp; |
charliex | 3:8d6e6aec9b01 | 276 | |
charliex | 3:8d6e6aec9b01 | 277 | for ( int y = bi->biHeight - 1; y >= 0; --y ) { |
charliex | 3:8d6e6aec9b01 | 278 | bmp = ( unsigned char * ) imgdata + bf->bfOffBits + y * linesize; |
charliex | 3:8d6e6aec9b01 | 279 | |
charliex | 3:8d6e6aec9b01 | 280 | for ( int x = 0; x < bi->biWidth; ++x ) { |
charliex | 3:8d6e6aec9b01 | 281 | char pal; |
charliex | 3:8d6e6aec9b01 | 282 | |
charliex | 3:8d6e6aec9b01 | 283 | |
charliex | 3:8d6e6aec9b01 | 284 | if ( x & 1 ) { |
charliex | 3:8d6e6aec9b01 | 285 | pal = *bmp & 0xf; |
charliex | 3:8d6e6aec9b01 | 286 | bmp++; |
charliex | 3:8d6e6aec9b01 | 287 | |
charliex | 3:8d6e6aec9b01 | 288 | } else { |
charliex | 3:8d6e6aec9b01 | 289 | pal = *bmp >> 4; |
charliex | 3:8d6e6aec9b01 | 290 | } |
charliex | 3:8d6e6aec9b01 | 291 | |
charliex | 3:8d6e6aec9b01 | 292 | HLine[x] = palette[pal]; |
charliex | 3:8d6e6aec9b01 | 293 | } |
charliex | 3:8d6e6aec9b01 | 294 | |
charliex | 3:8d6e6aec9b01 | 295 | HAL_SPI_Transmit ( &SpiHandle, ( uint8_t * ) HLine, bi->biWidth * 2, 100 ); |
charliex | 3:8d6e6aec9b01 | 296 | } |
charliex | 3:8d6e6aec9b01 | 297 | |
charliex | 3:8d6e6aec9b01 | 298 | return true; |
charliex | 3:8d6e6aec9b01 | 299 | } |
charliex | 3:8d6e6aec9b01 | 300 | |
charliex | 3:8d6e6aec9b01 | 301 | |
charliex | 3:8d6e6aec9b01 | 302 | void backlight ( float status ) |
charliex | 3:8d6e6aec9b01 | 303 | { |
charliex | 3:8d6e6aec9b01 | 304 | back = status; |
charliex | 3:8d6e6aec9b01 | 305 | } |
charliex | 3:8d6e6aec9b01 | 306 | |
charliex | 3:8d6e6aec9b01 | 307 | /*-------------------------------------------------------------------*/ |
charliex | 3:8d6e6aec9b01 | 308 | /* Initialize TFT */ |
charliex | 3:8d6e6aec9b01 | 309 | /*-------------------------------------------------------------------*/ |
charliex | 3:8d6e6aec9b01 | 310 | void tft_init ( void ) |
charliex | 3:8d6e6aec9b01 | 311 | { |
charliex | 3:8d6e6aec9b01 | 312 | |
charliex | 3:8d6e6aec9b01 | 313 | backlight ( .2 ); |
charliex | 3:8d6e6aec9b01 | 314 | |
charliex | 3:8d6e6aec9b01 | 315 | spi_init(); |
charliex | 3:8d6e6aec9b01 | 316 | |
charliex | 3:8d6e6aec9b01 | 317 | tft_reset(); |
charliex | 3:8d6e6aec9b01 | 318 | |
charliex | 3:8d6e6aec9b01 | 319 | //read_diag(); |
charliex | 3:8d6e6aec9b01 | 320 | } |
charliex | 3:8d6e6aec9b01 | 321 | |
charliex | 3:8d6e6aec9b01 | 322 | |
charliex | 3:8d6e6aec9b01 | 323 | |
charliex | 3:8d6e6aec9b01 | 324 |