k og
/
Aitendo_2P-REL225L01
Diff: main.cpp
- Revision:
- 0:3ab6473fa4f7
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Sep 30 13:25:38 2016 +0000 @@ -0,0 +1,243 @@ +/** + reference: + http://www.picfun.com/PIC24F/AP/app24F15.html + + NNUCLEO_F103RB 処理速度が遅い + NNUCLEO_F446RE Ok + ARCH_PRO Ok + LPC1768 + Mbed Shield 電源の問題あり +**/ + +#include "mbed.h" +#include "LCD192GC00.h" +#include "imagedata.h" + + +#if defined(TARGET_ARCH_PRO) +LCD192GC00 tft(A0, A1, A2, A3, A4, D2, D3, D4, D5, D6, D7, D8, D9); +Serial pc(USBTX, USBRX); +//SDFileSystem sd(D11, D12, D13, D10, "sd"); // mosi miso sclk cs +#elif defined(TARGET_LPC1768) +LCD192GC00 tft(p15, p16, p17, p18, p19, p8, p26, p25, p24, p23, p10, p9, p22); +Serial pc(USBTX, USBRX); +//SDFileSystem sd(p5, p6, p7, p21, "sd"); // mosi miso sclk cs +#elif defined TARGET_NUCLEO_F446RE +/* D0, D1 short SB62,SB63*/ +LCD192GC00 tft(A0, A1, A2, A3, A4, D2, D3, D4, D5, D6, D7, D8, D9); +Serial pc(USBTX, USBRX); +//SDFileSystem sd(D11, D12, D13, D10, "sd"); // mosi miso sclk cs + +#elif defined TARGET_NUCLEO_F103RB +LCD192GC00 tft(A0, A1, A2, A3, A4, D2, D3, D4, D5, D6, D7, D8, D9); +Serial pc(USBTX, USBRX); +//SDFileSystem sd(D11, D12, D13, D10, "sd"); // mosi miso sclk cs +#endif + +int16_t i, j, SW, Flag, Size, XOffset, YOffset; +uint8_t ASCII; +/* Prototyping */ +void D2Graph(short Hight); + +int main() { + tft.lcd_Init(); + tft.lcd_Clear(BLACK); + SW=6; + while(1) { + SW++; + if(SW==7) + SW = 0; + /* スイッチの値により各処理へ分岐 */ + switch(SW){ + /****** ANK文字表示 *********/ + case 0: // 文字表示テスト + tft.lcd_Clear(BLACK); // クリア + for(j=0; j<4; j++){ // ASCII文字全表示 XChar文字/行 + for(i=0; i<XChar; i++){ + ASCII = j*XChar+i+0x20; // XChar文字で繰り返し + tft.lcd_Char(i, j, ASCII, WHITE, BLACK); // 文字表示制御 + } + } + for(j=4; j<8; j++){ // ASCII文字全表示 XChar文字/行 + for(i=0; i<XChar; i++){ + ASCII = j*XChar+i+0x20; // XChar文字で繰り返し + tft.lcd_Char(i, j, ASCII, GREEN, BLACK); // 文字表示制御 + } + } + for(j=8; j<12; j++){ // ASCII文字全表示 Xchar文字/行 + for(i=0; i<XChar; i++){ + ASCII = j*XChar+i+0x20; // XChar文字で繰り返し + tft.lcd_Char(i, j, ASCII, RED, BLACK); // 文字表示制御 + } + } + for(j=12; j<YLine; j++){ // ASCII文字全表示 XChar文字/行 + for(i=0; i<XChar; i++){ + ASCII = j*XChar+i+0x20; // XChar文字で繰り返し + tft.lcd_Char(i, j, ASCII, YELLOW, BLACK); // 文字表示制御 + } + } + wait_ms(3000); // 1.5秒待ち + break; + /******** 文字列表示テスト *******/ + case 1: // 文字列の表示テスト + tft.lcd_Clear(BLACK); + wait_ms(100); + tft.lcd_Str(0, 0, "Hello World!!", RED, BLACK); + tft.lcd_Str(0, 2, "Graphic LCD Test", GREEN, BLACK); + tft.lcd_Str(0, 4, "This is Yellow. ", YELLOW, BLACK); + tft.lcd_Str(0, 6, "This is Cyan. ", CYAN, BLACK); + tft.lcd_Str(0, 8, "This is Magenta.", MAGENTA, BLACK); + tft.lcd_Str(0, 10, "This is Blue and over 30 character case.", BLUE, BLACK); + tft.lcd_Str(0, 12, "This is WHITE.", WHITE, BLACK); + tft.lcd_Str(0, 14, "This is PINK.", PINK, BLACK); + tft.lcd_Str(0, YLine-1, "This is ORANGE.", ORANGE, BLACK); + wait_ms(3000); + break; + /***** 直線描画テスト(斜め直線) *********/ + case 2: /* ピクセル表示機能 */ + tft.lcd_Clear(BLACK); // 全クリア + for(i=0; i<=ENDPAGE; i++){ // 斜め直線の表示 + tft.lcd_Pixel(i*1.33,i,RED); // CS1側 + } + wait_ms(2000); // 2秒待ち + tft.lcd_Clear(WHITE); // 全部白 + for(i=0; i<=ENDCOL; i++){ // 斜め直線表示 + tft.lcd_Pixel(i*1.33, i, BLUE); + } + wait_ms(1500); // 1.5秒待ち + break; + /************ 直線ボックス表示 **************/ + case 3: // 直線描画テスト + tft.lcd_Clear(BLACK); + if(ENDPAGE < ENDCOL){ + Size = ENDPAGE; + XOffset = (ENDCOL - ENDPAGE) / 2; + YOffset = 0; + } + else{ + Size = ENDCOL; + XOffset = 0; + YOffset = (ENDPAGE - ENDCOL) / 2; + } + for(j=0; j<Size/2; j+=4){ // ボックス表示 + if(Flag){ + Flag = 0; + // 次第に小さなボックスへ + tft.lcd_Line(j+XOffset,j+YOffset, Size-j+XOffset, j+YOffset, RED); + tft.lcd_Line(j+XOffset,j+YOffset, j+XOffset, Size-j+YOffset, GREEN); + tft.lcd_Line(Size-j+XOffset,Size-j+YOffset, Size-j+XOffset,j+YOffset, RED); + tft.lcd_Line(Size-j+XOffset,Size-j+YOffset, j+XOffset,Size-j+YOffset, GREEN); + } + else{ + Flag = 1; + // 次第に小さなボックスへ + tft.lcd_Line(j+XOffset,j+YOffset, Size-j+XOffset, j+YOffset, YELLOW); + tft.lcd_Line(j+XOffset,j+YOffset, j+XOffset, Size-j+YOffset, BLUE); + tft.lcd_Line(Size-j+XOffset,Size-j+YOffset, Size-j+XOffset,j+YOffset, YELLOW); + tft.lcd_Line(Size-j+XOffset,Size-j+YOffset, j+XOffset,Size-j+YOffset, BLUE); + } + } + wait_ms(3000); + break; + /**************** 曲線描画(2次元グラフ表示)****************/ + case 4: + for(i=0; i<8; i++){ // 曲線描画 + tft.lcd_Clear(BLACK); + tft.lcd_Str(0, 0, "Graphic Display", BLUE, BLACK); + D2Graph(20*i); //曲面グラフ表示 + wait_ms(2000); + } + break; + /******* イメージグラフィック表示 ********/ + case 5: // イメージの表示テスト + tft.lcd_Clear(BLACK); + tft.lcd_Image(0, Header1, MAGENTA, BLACK); + tft.lcd_Image(8, Header2, CYAN, BLACK); + wait_ms(3000); + break; + /******** 全画面クリア(各色クリア) ***********/ + case 6: // 全画面クリアのテスト + tft.lcd_Clear(WHITE); // 各色の表示 + wait_ms(1500); + tft.lcd_Clear(RED); + wait_ms(500); + tft.lcd_Clear(GREEN); + wait_ms(500); + tft.lcd_Clear(BLUE); + wait_ms(500); + tft.lcd_Clear(CYAN); + wait_ms(500); + tft.lcd_Clear(MAGENTA); + wait_ms(500); + tft.lcd_Clear(YELLOW); + wait_ms(500); + tft.lcd_Clear(BROWN); + wait_ms(500); + tft.lcd_Clear(ORANGE); + wait_ms(500); + tft.lcd_Clear(PINK); + wait_ms(500); + tft.lcd_Clear(BLACK); + wait_ms(1000); + break; + /**** default **********/ + default: wait_ms(300); + break; + } + + } +} + +/********************************************* +* 2次元立体グラフ描画関数 +* z(x,y) = 1/(1+SQRT(x2+y2))*COS(SQRT(x2+y2)) +* (-3*PI< x,y < 3*PIの範囲) +* zの最大値をPOTで変更する +**********************************************/ +/* グローバル定数 */ +#define X0 5 +#define Y0 20 +#define PI 3.141592654f +#define NODES 38 +#define SIDE 6 +// 描画関数 +void D2Graph(short Hight) { + short i, j, px, py,x, y, z; + float zf, xf, yf, sf; + struct{ + short x; + short y; + } edge[NODES], prev; + + tft.lcd_Line(X0, 3, X0, ENDPAGE-12 ,GREEN); // z axis + tft.lcd_Line(X0-3, Y0, ENDCOL, Y0, GREEN); // x axis + tft.lcd_Line(X0, Y0-2, X0+140, Y0+140, GREEN); // y axis + for(j=0; j<NODES; j++) { + edge[j].x = X0 + j*SIDE/2; + edge[j].y = Y0 + j*SIDE/2; + } + for(i=0; i<NODES; i++) { + x = i *SIDE; + xf = (6 * PI / 200) *(float)(x-100); + prev.y = Y0; + prev.x = X0 + x; + for(j=0; j<NODES; j++) { + y = j * SIDE; + yf = (6 * PI /200) * (float)(y -100); + sf = sqrt(xf * xf + yf * yf); + zf = 1/(1+sf) * cos(sf); + z = zf * Hight; + px = X0 + x + y/2; + py = Y0 + z + y/2; + tft.lcd_Pixel(px, ENDPAGE-5-py, 1); + tft.lcd_Line(px, py, prev.x, prev.y, RED); + tft.lcd_Line(px, py, edge[j].x, edge[j].y, RED); + prev.x = px; + prev.y = py; + edge[j].x = px; + edge[j].y = py; + } + } +} + + +