programme pour l'ecran TFT-ST7735

Dependencies:   mbed DmTftLibrary

Committer:
displaymodule
Date:
Tue May 20 15:37:27 2014 +0000
Revision:
0:486bf9d63b80
Child:
1:4a281af0d8e6
First version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
displaymodule 0:486bf9d63b80 1 /**********************************************************************************************
displaymodule 0:486bf9d63b80 2 Copyright (c) 2014 DisplayModule. All rights reserved.
displaymodule 0:486bf9d63b80 3
displaymodule 0:486bf9d63b80 4 Redistribution and use of this source code, part of this source code or any compiled binary
displaymodule 0:486bf9d63b80 5 based on this source code is permitted as long as the above copyright notice and following
displaymodule 0:486bf9d63b80 6 disclaimer is retained.
displaymodule 0:486bf9d63b80 7
displaymodule 0:486bf9d63b80 8 DISCLAIMER:
displaymodule 0:486bf9d63b80 9 THIS SOFTWARE IS SUPPLIED "AS IS" WITHOUT ANY WARRANTIES AND SUPPORT. DISPLAYMODULE ASSUMES
displaymodule 0:486bf9d63b80 10 NO RESPONSIBILITY OR LIABILITY FOR THE USE OF THE SOFTWARE.
displaymodule 0:486bf9d63b80 11 ********************************************************************************************/
displaymodule 0:486bf9d63b80 12
displaymodule 0:486bf9d63b80 13 /******************************************************************************
displaymodule 0:486bf9d63b80 14 * Includes
displaymodule 0:486bf9d63b80 15 *****************************************************************************/
displaymodule 0:486bf9d63b80 16
displaymodule 0:486bf9d63b80 17 #include "mbed.h"
displaymodule 0:486bf9d63b80 18
displaymodule 0:486bf9d63b80 19 #include "DmTftHX8353C.h"
displaymodule 0:486bf9d63b80 20 #include "DmTftS6D0164.h"
displaymodule 0:486bf9d63b80 21 #include "DmTftIli9325.h"
displaymodule 0:486bf9d63b80 22 #include "DmTftIli9341.h"
displaymodule 0:486bf9d63b80 23 #include "DmTftSsd2119.h"
displaymodule 0:486bf9d63b80 24
displaymodule 0:486bf9d63b80 25 /******************************************************************************
displaymodule 0:486bf9d63b80 26 * Typedefs and defines
displaymodule 0:486bf9d63b80 27 *****************************************************************************/
displaymodule 0:486bf9d63b80 28
displaymodule 0:486bf9d63b80 29 //#define log(...) printf(__VA_ARGS__)
displaymodule 0:486bf9d63b80 30 #define log(...)
displaymodule 0:486bf9d63b80 31
displaymodule 0:486bf9d63b80 32 /******************************************************************************
displaymodule 0:486bf9d63b80 33 * Local variables
displaymodule 0:486bf9d63b80 34 *****************************************************************************/
displaymodule 0:486bf9d63b80 35
displaymodule 0:486bf9d63b80 36 //DmTftHX8353C tft; /* DM_TFT18_101 */
displaymodule 0:486bf9d63b80 37 //DmTftS6D0164 tft; /* DM_TFT22_102 */
displaymodule 0:486bf9d63b80 38 //DmTftIli9325 tft; /* DM_TFT28_103 and DM_TFT24_104 */
displaymodule 0:486bf9d63b80 39 DmTftIli9341 tft; /* DM_TFT28_105 */
displaymodule 0:486bf9d63b80 40 //DmTftSsd2119 tft; /* DM_TFT35_107 */
displaymodule 0:486bf9d63b80 41
displaymodule 0:486bf9d63b80 42 int bmpWidth, bmpHeight;
displaymodule 0:486bf9d63b80 43 uint8_t bmpImageoffset;
displaymodule 0:486bf9d63b80 44
displaymodule 0:486bf9d63b80 45 /******************************************************************************
displaymodule 0:486bf9d63b80 46 * Global variables
displaymodule 0:486bf9d63b80 47 *****************************************************************************/
displaymodule 0:486bf9d63b80 48
displaymodule 0:486bf9d63b80 49 extern uint8_t dmlogo[];
displaymodule 0:486bf9d63b80 50
displaymodule 0:486bf9d63b80 51 /******************************************************************************
displaymodule 0:486bf9d63b80 52 * Local functions
displaymodule 0:486bf9d63b80 53 *****************************************************************************/
displaymodule 0:486bf9d63b80 54
displaymodule 0:486bf9d63b80 55 // LITTLE ENDIAN!
displaymodule 0:486bf9d63b80 56 uint16_t read16(uint8_t *src)
displaymodule 0:486bf9d63b80 57 {
displaymodule 0:486bf9d63b80 58 uint16_t d;
displaymodule 0:486bf9d63b80 59 uint8_t b;
displaymodule 0:486bf9d63b80 60 b = *src;
displaymodule 0:486bf9d63b80 61 d = *(src+1);
displaymodule 0:486bf9d63b80 62 d <<= 8;
displaymodule 0:486bf9d63b80 63 d |= b;
displaymodule 0:486bf9d63b80 64 return d;
displaymodule 0:486bf9d63b80 65 }
displaymodule 0:486bf9d63b80 66
displaymodule 0:486bf9d63b80 67 // LITTLE ENDIAN!
displaymodule 0:486bf9d63b80 68 uint32_t read32(uint8_t *src)
displaymodule 0:486bf9d63b80 69 {
displaymodule 0:486bf9d63b80 70 uint32_t d;
displaymodule 0:486bf9d63b80 71 uint16_t b;
displaymodule 0:486bf9d63b80 72
displaymodule 0:486bf9d63b80 73 b = read16(src);
displaymodule 0:486bf9d63b80 74 d = read16(src+2);
displaymodule 0:486bf9d63b80 75 d <<= 16;
displaymodule 0:486bf9d63b80 76 d |= b;
displaymodule 0:486bf9d63b80 77 return d;
displaymodule 0:486bf9d63b80 78 }
displaymodule 0:486bf9d63b80 79
displaymodule 0:486bf9d63b80 80 void drawBmpFromFlash(int x, int y)
displaymodule 0:486bf9d63b80 81 {
displaymodule 0:486bf9d63b80 82 uint16_t pos = bmpImageoffset;
displaymodule 0:486bf9d63b80 83
displaymodule 0:486bf9d63b80 84 uint16_t p; // pixel
displaymodule 0:486bf9d63b80 85 uint8_t g, b;
displaymodule 0:486bf9d63b80 86 int i, j; // line, column
displaymodule 0:486bf9d63b80 87
displaymodule 0:486bf9d63b80 88 for(i=bmpHeight; i>0; i--) {
displaymodule 0:486bf9d63b80 89 for(j=0; j<bmpWidth; j++) {
displaymodule 0:486bf9d63b80 90 b = *(dmlogo+pos++);
displaymodule 0:486bf9d63b80 91 g = *(dmlogo+pos++);
displaymodule 0:486bf9d63b80 92 p = *(dmlogo+pos++);
displaymodule 0:486bf9d63b80 93
displaymodule 0:486bf9d63b80 94 p >>= 3;
displaymodule 0:486bf9d63b80 95 p <<= 6;
displaymodule 0:486bf9d63b80 96
displaymodule 0:486bf9d63b80 97 g >>= 2;
displaymodule 0:486bf9d63b80 98 p |= g;
displaymodule 0:486bf9d63b80 99 p <<= 5;
displaymodule 0:486bf9d63b80 100
displaymodule 0:486bf9d63b80 101 b >>= 3;
displaymodule 0:486bf9d63b80 102 p |= b;
displaymodule 0:486bf9d63b80 103
displaymodule 0:486bf9d63b80 104 // write out the 16 bits of color
displaymodule 0:486bf9d63b80 105 tft.setPixel(j, i+y, p);
displaymodule 0:486bf9d63b80 106 }
displaymodule 0:486bf9d63b80 107 }
displaymodule 0:486bf9d63b80 108 }
displaymodule 0:486bf9d63b80 109
displaymodule 0:486bf9d63b80 110
displaymodule 0:486bf9d63b80 111 int bmpReadHeader() {
displaymodule 0:486bf9d63b80 112 uint32_t fileSize;
displaymodule 0:486bf9d63b80 113 uint32_t headerSize;
displaymodule 0:486bf9d63b80 114 uint16_t bmpDepth;
displaymodule 0:486bf9d63b80 115 uint16_t pos = 0;
displaymodule 0:486bf9d63b80 116 log("reading bmp header\r\n");
displaymodule 0:486bf9d63b80 117 log("Magic byte is: %d \r\n", read16(dmlogo));
displaymodule 0:486bf9d63b80 118
displaymodule 0:486bf9d63b80 119 if (read16(dmlogo) !=0x4D42){ // read magic byte
displaymodule 0:486bf9d63b80 120 log("Magic byte not found\r\n");
displaymodule 0:486bf9d63b80 121 return false;
displaymodule 0:486bf9d63b80 122 }
displaymodule 0:486bf9d63b80 123 pos += 2;
displaymodule 0:486bf9d63b80 124
displaymodule 0:486bf9d63b80 125 // read file size
displaymodule 0:486bf9d63b80 126 fileSize = read32(dmlogo+pos);
displaymodule 0:486bf9d63b80 127 log("filesize is: %d \r\n", fileSize);
displaymodule 0:486bf9d63b80 128 log("");
displaymodule 0:486bf9d63b80 129 pos += 4;
displaymodule 0:486bf9d63b80 130
displaymodule 0:486bf9d63b80 131 pos += 4; // Skip creator bytes
displaymodule 0:486bf9d63b80 132
displaymodule 0:486bf9d63b80 133 bmpImageoffset = read32(dmlogo+pos);
displaymodule 0:486bf9d63b80 134 pos += 4;
displaymodule 0:486bf9d63b80 135
displaymodule 0:486bf9d63b80 136 // read DIB header
displaymodule 0:486bf9d63b80 137 headerSize = read32(dmlogo+pos);
displaymodule 0:486bf9d63b80 138 pos +=4;
displaymodule 0:486bf9d63b80 139 bmpWidth = read32(dmlogo+pos);
displaymodule 0:486bf9d63b80 140 pos += 4;
displaymodule 0:486bf9d63b80 141 bmpHeight = read32(dmlogo+pos);
displaymodule 0:486bf9d63b80 142 pos += 4;
displaymodule 0:486bf9d63b80 143
displaymodule 0:486bf9d63b80 144 log("Image size: %d\r\n", fileSize);
displaymodule 0:486bf9d63b80 145 log("Image offset: %d\r\n", bmpImageoffset);
displaymodule 0:486bf9d63b80 146 log("Header size: %d\r\n", headerSize);
displaymodule 0:486bf9d63b80 147 log("Image width: %d\r\n", bmpWidth );
displaymodule 0:486bf9d63b80 148 log("Image height: %d\r\n", bmpHeight );
displaymodule 0:486bf9d63b80 149
displaymodule 0:486bf9d63b80 150 if (read16(dmlogo+pos) != 1){
displaymodule 0:486bf9d63b80 151 // number of color planes must be 1
displaymodule 0:486bf9d63b80 152 return false;
displaymodule 0:486bf9d63b80 153 }
displaymodule 0:486bf9d63b80 154 pos += 2;
displaymodule 0:486bf9d63b80 155
displaymodule 0:486bf9d63b80 156 bmpDepth = read16(dmlogo+pos);
displaymodule 0:486bf9d63b80 157 pos +=2;
displaymodule 0:486bf9d63b80 158 log("Bitdepth: %d\r\n", bmpDepth);
displaymodule 0:486bf9d63b80 159
displaymodule 0:486bf9d63b80 160 if (read16(dmlogo+pos) != 0) {
displaymodule 0:486bf9d63b80 161 // compression not supported!
displaymodule 0:486bf9d63b80 162 return false;
displaymodule 0:486bf9d63b80 163 }
displaymodule 0:486bf9d63b80 164 pos += 2; // Should really be 2??
displaymodule 0:486bf9d63b80 165
displaymodule 0:486bf9d63b80 166 return true;
displaymodule 0:486bf9d63b80 167 }
displaymodule 0:486bf9d63b80 168
displaymodule 0:486bf9d63b80 169 /******************************************************************************
displaymodule 0:486bf9d63b80 170 * Main
displaymodule 0:486bf9d63b80 171 *****************************************************************************/
displaymodule 0:486bf9d63b80 172
displaymodule 0:486bf9d63b80 173 int main() {
displaymodule 0:486bf9d63b80 174 log("init tft \r\n");
displaymodule 0:486bf9d63b80 175 tft.init();
displaymodule 0:486bf9d63b80 176
displaymodule 0:486bf9d63b80 177 tft.drawString(0,32,"www.");
displaymodule 0:486bf9d63b80 178 tft.drawString(12,48,"displaymodule");
displaymodule 0:486bf9d63b80 179 tft.drawString(88,64,".com");
displaymodule 0:486bf9d63b80 180
displaymodule 0:486bf9d63b80 181 tft.drawRectangle(20,85,40,105,GREEN);
displaymodule 0:486bf9d63b80 182 tft.drawCircle(60,95,10,BLUE);
displaymodule 0:486bf9d63b80 183 tft.drawTriangle(90,85, 80,105, 100,105, RED);
displaymodule 0:486bf9d63b80 184
displaymodule 0:486bf9d63b80 185 if (! bmpReadHeader()) {
displaymodule 0:486bf9d63b80 186 log("bad bmp\r\n");
displaymodule 0:486bf9d63b80 187 return -1;
displaymodule 0:486bf9d63b80 188 }
displaymodule 0:486bf9d63b80 189
displaymodule 0:486bf9d63b80 190 drawBmpFromFlash(0, 0);
displaymodule 0:486bf9d63b80 191 drawBmpFromFlash(0, 130);
displaymodule 0:486bf9d63b80 192
displaymodule 0:486bf9d63b80 193 while(1) {
displaymodule 0:486bf9d63b80 194 }
displaymodule 0:486bf9d63b80 195 }