Lib for the new LCD Display with ILI9341 controller Modified for huge fonts (>255 bytes/char). Needs modified font.h files with 2-byte size parameter. Window size is set on a per-character basis to minimise the number of pixels written (speed-up, plus better detection of whether one last character will fit on the current line). NUCLEO & NXP DMA-enabled versions are modified but untested.
Fork of SPI_TFT_ILI9341 by
Diff: SPI_TFT_ILI9341_NUCLEO.cpp
- Revision:
- 17:8794e2eadd8d
- Parent:
- 12:98cc5c193ecd
diff -r 51b40ebe3280 -r 8794e2eadd8d SPI_TFT_ILI9341_NUCLEO.cpp --- a/SPI_TFT_ILI9341_NUCLEO.cpp Mon Dec 08 10:03:05 2014 +0000 +++ b/SPI_TFT_ILI9341_NUCLEO.cpp Mon Dec 08 13:20:28 2014 +0000 @@ -789,31 +789,32 @@ if ((c < 31) || (c > 127)) return; // test char range // read font parameter from start of array - offset = font[0]; // bytes / char - hor = font[1]; // get hor size of font - vert = font[2]; // get vert size of font - bpl = font[3]; // bytes per line + offset = font[0]<<8+font[1]; // bytes / char + hor = font[2]; // get hor size of font + vert = font[3]; // get vert size of font + bpl = font[4]; // bytes per line - if (char_x + hor > width()) { + zeichen = &font[((c -32) * offset) + 5]; // start of char bitmap + w = zeichen[0]; // width of actual char + + if (char_x + (w+2) > width()) { char_x = 0; char_y = char_y + vert; - if (char_y >= height() - font[2]) { + if (char_y >= height() - vert) { char_y = 0; } } - window(char_x, char_y,hor,vert); // setup char box + window(char_x, char_y,(w+2),vert); // setup char box wr_cmd(0x2C); spi_16(1); // switch to 16 bit Mode #ifdef use_ram - pixel = hor * vert; // calculate buffer size + pixel = (w+2) * vert; // calculate buffer size buffer = (uint16_t *) malloc (2*pixel); // we need a buffer for the font if(buffer != NULL) { // there is memory space -> use dma - zeichen = &font[((c -32) * offset) + 4]; // start of char bitmap - w = zeichen[0]; // width of actual char p = 0; // construct the font into the buffer for (j=0; j<vert; j++) { // vert line - for (i=0; i<hor; i++) { // horz line + for (i=0; i<(w+2); i++) { // horz line z = zeichen[bpl * i + ((j & 0xF8) >> 3)+1]; b = 1 << (j & 0x07); if (( z & b ) == 0x00) { @@ -895,10 +896,8 @@ else{ #endif - zeichen = &font[((c -32) * offset) + 4]; // start of char bitmap - w = zeichen[0]; // width of actual char for (j=0; j<vert; j++) { // vert line - for (i=0; i<hor; i++) { // horz line + for (i=0; i<(w+2); i++) { // horz line z = zeichen[bpl * i + ((j & 0xF8) >> 3)+1]; b = 1 << (j & 0x07); if (( z & b ) == 0x00) {