ILI9341_SPI
Dependents: ov7670_dma_nucleo_f4 NUCLEO-F446RE_testDCMI
Revision 3:e56304370ff3, committed 2016-11-20
- Comitter:
- tmnt
- Date:
- Sun Nov 20 11:30:18 2016 +0000
- Parent:
- 0:2d4605aef62f
- Commit message:
- i
Changed in this revision
diff -r 2d4605aef62f -r e56304370ff3 ILI9341.cpp --- a/ILI9341.cpp Fri Apr 29 13:36:39 2016 +0000 +++ b/ILI9341.cpp Sun Nov 20 11:30:18 2016 +0000 @@ -1,6 +1,7 @@ #include <mbed.h> #include "ILI9341.h" +#include "font6x12.h" ili9341_spi::ili9341_spi(SPI& _spi, PinName _cs,PinName _dc,PinName _rs) : spi(_spi), cs(_cs),dc(_dc),rs(_rs) {} @@ -204,14 +205,14 @@ spi.write(0); spi.write(0); spi.write(0); - spi.write(0x95); + spi.write(0x95);//95 cs = 1; wr_cmd(0x2B); spi.write(0); spi.write(0); spi.write(0x00); - spi.write(0x90); + spi.write(0x90);//90 cs = 1; //wr_cmd(0x34); // tearing effect off @@ -310,7 +311,7 @@ int h = y1 - y0 + 1; int w = x1 - x0 + 1; int pixel = h * w; - //window(x0,y0,w,h); + window(x0,y0,w,h); wr_cmd(0x2C); // send pixel //#if defined TARGET_KL25Z // 8 Bit SPI for (int p=0; p<pixel; p++) { @@ -328,11 +329,61 @@ //WindowMax(); return; } + +void ili9341_spi::draw_str(const char* str,uint8_t line) +{ + uint8_t len = strlen(str); + + for (int i = 0; i < len; i++) + { + if(i==0){draw_char(str[i],1,line);} + else draw_char(str[i],0,line); + } +} + +void ili9341_spi::draw_char(char ch,uint8_t rs,uint8_t line) +{ +static ushort col=0,row=0; +static ushort pos_x = LEFT_PADDING, pos_y = TOP_PADDING; + // 画面の右側に達したら改行する + if(rs){pos_x=2;} + pos_y = line*(FONT_6x12_HEIGHT + 2); + if(pos_y==0){pos_y=2;} + if (/*(col > 240 - 1) ||*/ ch == 10) + { + col = 0; row++; + pos_x = LEFT_PADDING; pos_y += FONT_6x12_HEIGHT + 2; + } + if (ch == 10) return; + // 文字の出力範囲を設定 + window(pos_x,pos_y, FONT_6x12_WIDTH+1,FONT_6x12_HEIGHT+1); + // 文字がASCII表にある位置を探す + const byte* fc = fc_tab[(ushort)ch]; + if (fc != 0) + { + wr_cmd(0x2C); + + for (int y = 0; y < FONT_6x12_HEIGHT; y++) + { + for (int x = 0; x <= FONT_6x12_WIDTH; x++) + { + ushort k = (*fc) & (1 << (FONT_6x12_WIDTH - x)); + // フォントのピクセルを出力する + spi.write(k ? /*(fcolor >> 8)*/0xff : /*(bcolor >> 8)*/0xf8); + spi.write(k ? /*fcolor*/0xff : /*bcolor*/0x00); + } + fc++; + } + } + col++; + pos_x += FONT_6x12_WIDTH + 2; +} + void ili9341_spi::select() { //Set CS low to start transmission (interrupts conversion) - cs = 0; + cs = 0; spi.frequency(60000000); } void ili9341_spi::deselect() { //Set CS high to stop transmission (restarts conversion) - cs = 1; + cs = 1; spi.frequency(20000000); } \ No newline at end of file
diff -r 2d4605aef62f -r e56304370ff3 ILI9341.h --- a/ILI9341.h Fri Apr 29 13:36:39 2016 +0000 +++ b/ILI9341.h Sun Nov 20 11:30:18 2016 +0000 @@ -3,7 +3,8 @@ #include "mbed.h" - +#define TOP_PADDING 3 +#define LEFT_PADDING 3 class ili9341_spi { SPI& spi; @@ -14,7 +15,9 @@ public: ili9341_spi(SPI& _spi, PinName _cs,PinName _dc,PinName _rs); void select(); - void deselect(); +void deselect(); +void draw_str(const char* str,uint8_t line); +void draw_char(char ch,uint8_t rs,uint8_t line); void window (unsigned int x, unsigned int y, unsigned int w, unsigned int h); void pixel(int x, int y, int color); void vline(int x, int y0, int y1, int color);
diff -r 2d4605aef62f -r e56304370ff3 fonts.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fonts.lib Sun Nov 20 11:30:18 2016 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/users/tmnt/code/fonts/#5a1975647d7f