k og / Mbed 2 deprecated Aitendo_2P-REL225L01

Dependencies:   LCD192GC00 mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 /**
00002     reference:
00003     http://www.picfun.com/PIC24F/AP/app24F15.html
00004 
00005     NNUCLEO_F103RB  処理速度が遅い
00006     NNUCLEO_F446RE  Ok
00007     ARCH_PRO        Ok
00008     LPC1768 + Mbed Shield   電源の問題あり
00009 **/
00010 
00011 #include "mbed.h"
00012 #include "LCD192GC00.h"
00013 #include "imagedata.h"
00014 
00015 
00016 #if defined(TARGET_ARCH_PRO)
00017 LCD192GC00 tft(A0, A1, A2, A3, A4, D2, D3, D4, D5, D6, D7, D8, D9);
00018 Serial pc(USBTX, USBRX);
00019 //SDFileSystem sd(D11, D12, D13, D10, "sd"); // mosi miso sclk cs
00020 #elif defined(TARGET_LPC1768)
00021 LCD192GC00 tft(p15, p16, p17, p18, p19, p8, p26, p25, p24, p23, p10, p9, p22);
00022 Serial pc(USBTX, USBRX);
00023 //SDFileSystem sd(p5, p6, p7, p21, "sd"); // mosi miso sclk cs
00024 #elif defined TARGET_NUCLEO_F446RE
00025 /* D0, D1 short SB62,SB63*/
00026 LCD192GC00 tft(A0, A1, A2, A3, A4, D2, D3, D4, D5, D6, D7, D8, D9);
00027 Serial pc(USBTX, USBRX);
00028 //SDFileSystem sd(D11, D12, D13, D10, "sd"); // mosi miso sclk cs
00029 
00030 #elif defined TARGET_NUCLEO_F103RB
00031 LCD192GC00 tft(A0, A1, A2, A3, A4, D2, D3, D4, D5, D6, D7, D8, D9);
00032 Serial pc(USBTX, USBRX);
00033 //SDFileSystem sd(D11, D12, D13, D10, "sd"); // mosi miso sclk cs
00034 #endif
00035 
00036 int16_t i, j, SW, Flag, Size, XOffset, YOffset;
00037 uint8_t ASCII;
00038 /* Prototyping  */
00039 void D2Graph(short Hight);
00040 
00041 int main() {
00042     tft.lcd_Init();
00043     tft.lcd_Clear(BLACK);
00044     SW=6;
00045     while(1) {
00046         SW++;
00047         if(SW==7)
00048             SW = 0;
00049         /* スイッチの値により各処理へ分岐 */
00050         switch(SW){
00051             /****** ANK文字表示 *********/
00052             case 0:                                         // 文字表示テスト              
00053                 tft.lcd_Clear(BLACK);                               // クリア
00054                 for(j=0; j<4; j++){                         // ASCII文字全表示 XChar文字/行
00055                     for(i=0; i<XChar; i++){
00056                         ASCII = j*XChar+i+0x20;             // XChar文字で繰り返し
00057                         tft.lcd_Char(i, j, ASCII, WHITE, BLACK);    // 文字表示制御
00058                     }
00059                 }
00060                 for(j=4; j<8; j++){                         // ASCII文字全表示 XChar文字/行
00061                     for(i=0; i<XChar; i++){
00062                         ASCII = j*XChar+i+0x20;             // XChar文字で繰り返し
00063                         tft.lcd_Char(i, j, ASCII, GREEN, BLACK);    // 文字表示制御
00064                     }
00065                 }
00066                 for(j=8; j<12; j++){                            // ASCII文字全表示 Xchar文字/行
00067                     for(i=0; i<XChar; i++){
00068                         ASCII = j*XChar+i+0x20;             // XChar文字で繰り返し
00069                         tft.lcd_Char(i, j, ASCII, RED, BLACK);      // 文字表示制御
00070                     }
00071                 }
00072                 for(j=12; j<YLine; j++){                        // ASCII文字全表示 XChar文字/行
00073                     for(i=0; i<XChar; i++){
00074                         ASCII = j*XChar+i+0x20;             // XChar文字で繰り返し
00075                         tft.lcd_Char(i, j, ASCII, YELLOW, BLACK);   // 文字表示制御
00076                     }
00077                 }
00078                 wait_ms(3000);                             // 1.5秒待ち
00079                 break;
00080             /******** 文字列表示テスト *******/
00081             case 1:                                         // 文字列の表示テスト
00082                 tft.lcd_Clear(BLACK);
00083                 wait_ms(100);              
00084                 tft.lcd_Str(0, 0, "Hello World!!", RED, BLACK);
00085                 tft.lcd_Str(0, 2, "Graphic LCD Test", GREEN, BLACK);
00086                 tft.lcd_Str(0, 4, "This is Yellow. ", YELLOW, BLACK);
00087                 tft.lcd_Str(0, 6, "This is Cyan.   ", CYAN, BLACK);
00088                 tft.lcd_Str(0, 8, "This is Magenta.", MAGENTA, BLACK);
00089                 tft.lcd_Str(0, 10, "This is Blue and over 30 character case.", BLUE, BLACK); 
00090                 tft.lcd_Str(0, 12, "This is WHITE.", WHITE, BLACK);
00091                 tft.lcd_Str(0, 14, "This is PINK.", PINK, BLACK);
00092                 tft.lcd_Str(0, YLine-1, "This is ORANGE.", ORANGE, BLACK);
00093                 wait_ms(3000);
00094                 break;
00095             /***** 直線描画テスト(斜め直線) *********/         
00096             case 2:                                         /* ピクセル表示機能 */                          
00097                 tft.lcd_Clear(BLACK);                               // 全クリア
00098                 for(i=0; i<=ENDPAGE; i++){                      // 斜め直線の表示
00099                     tft.lcd_Pixel(i*1.33,i,RED);                    // CS1側
00100                 }
00101                 wait_ms(2000);                             // 2秒待ち
00102                 tft.lcd_Clear(WHITE);                               // 全部白
00103                 for(i=0; i<=ENDCOL; i++){                       // 斜め直線表示
00104                     tft.lcd_Pixel(i*1.33, i, BLUE);
00105                 }
00106                 wait_ms(1500);                             // 1.5秒待ち
00107                 break;
00108             /************ 直線ボックス表示 **************/
00109             case 3:                                         // 直線描画テスト
00110                 tft.lcd_Clear(BLACK);
00111                 if(ENDPAGE < ENDCOL){
00112                     Size = ENDPAGE;
00113                     XOffset = (ENDCOL - ENDPAGE) / 2;
00114                     YOffset = 0;
00115                 }
00116                 else{
00117                     Size = ENDCOL;
00118                     XOffset = 0;
00119                     YOffset = (ENDPAGE - ENDCOL) / 2;
00120                 }       
00121                 for(j=0; j<Size/2; j+=4){                       // ボックス表示
00122                     if(Flag){
00123                         Flag = 0;
00124                         // 次第に小さなボックスへ
00125                         tft.lcd_Line(j+XOffset,j+YOffset, Size-j+XOffset, j+YOffset, RED);
00126                         tft.lcd_Line(j+XOffset,j+YOffset, j+XOffset, Size-j+YOffset, GREEN);
00127                         tft.lcd_Line(Size-j+XOffset,Size-j+YOffset, Size-j+XOffset,j+YOffset, RED);
00128                         tft.lcd_Line(Size-j+XOffset,Size-j+YOffset, j+XOffset,Size-j+YOffset, GREEN);
00129                     }
00130                     else{
00131                         Flag = 1;
00132                         // 次第に小さなボックスへ
00133                         tft.lcd_Line(j+XOffset,j+YOffset, Size-j+XOffset, j+YOffset, YELLOW);
00134                         tft.lcd_Line(j+XOffset,j+YOffset, j+XOffset, Size-j+YOffset, BLUE);
00135                         tft.lcd_Line(Size-j+XOffset,Size-j+YOffset, Size-j+XOffset,j+YOffset, YELLOW);
00136                         tft.lcd_Line(Size-j+XOffset,Size-j+YOffset, j+XOffset,Size-j+YOffset, BLUE);
00137                     }
00138                 }
00139                 wait_ms(3000);
00140                 break;
00141             /**************** 曲線描画(2次元グラフ表示)****************/
00142             case 4:
00143                 for(i=0; i<8; i++){                     // 曲線描画
00144                     tft.lcd_Clear(BLACK);                           
00145                     tft.lcd_Str(0, 0, "Graphic Display", BLUE, BLACK);
00146                     D2Graph(20*i);                      //曲面グラフ表示
00147                     wait_ms(2000);
00148                 }
00149                 break;
00150             /******* イメージグラフィック表示 ********/
00151             case 5:                                     // イメージの表示テスト
00152                 tft.lcd_Clear(BLACK);
00153                 tft.lcd_Image(0, Header1, MAGENTA, BLACK);
00154                 tft.lcd_Image(8, Header2, CYAN, BLACK);
00155                 wait_ms(3000);
00156                 break;
00157             /******** 全画面クリア(各色クリア) ***********/
00158             case 6:                                     // 全画面クリアのテスト   
00159                 tft.lcd_Clear(WHITE);                           // 各色の表示
00160                 wait_ms(1500);
00161                 tft.lcd_Clear(RED);
00162                 wait_ms(500);
00163                 tft.lcd_Clear(GREEN);
00164                 wait_ms(500);
00165                 tft.lcd_Clear(BLUE);
00166                 wait_ms(500);
00167                 tft.lcd_Clear(CYAN);
00168                 wait_ms(500);
00169                 tft.lcd_Clear(MAGENTA);
00170                 wait_ms(500);
00171                 tft.lcd_Clear(YELLOW);
00172                 wait_ms(500);
00173                 tft.lcd_Clear(BROWN);
00174                 wait_ms(500);
00175                 tft.lcd_Clear(ORANGE);
00176                 wait_ms(500);
00177                 tft.lcd_Clear(PINK);
00178                 wait_ms(500);
00179                 tft.lcd_Clear(BLACK);
00180                 wait_ms(1000);
00181                 break;
00182             /**** default **********/       
00183             default: wait_ms(300);
00184                  break;
00185         }
00186 
00187     }
00188 }
00189 
00190 /*********************************************
00191 *  2次元立体グラフ描画関数
00192 *   z(x,y) = 1/(1+SQRT(x2+y2))*COS(SQRT(x2+y2))
00193 *    (-3*PI< x,y < 3*PIの範囲)
00194 *   zの最大値をPOTで変更する
00195 **********************************************/
00196 /* グローバル定数 */
00197 #define X0  5
00198 #define Y0  20
00199 #define PI  3.141592654f
00200 #define NODES   38
00201 #define SIDE    6
00202 // 描画関数
00203 void D2Graph(short Hight) {
00204     short i, j, px, py,x, y, z;
00205     float zf, xf, yf, sf;
00206     struct{
00207         short x;
00208         short y;
00209     } edge[NODES], prev;
00210 
00211     tft.lcd_Line(X0, 3, X0, ENDPAGE-12 ,GREEN);             // z axis
00212     tft.lcd_Line(X0-3, Y0, ENDCOL, Y0, GREEN);              // x axis
00213     tft.lcd_Line(X0, Y0-2, X0+140, Y0+140, GREEN);          // y axis
00214     for(j=0; j<NODES; j++) {
00215         edge[j].x = X0 + j*SIDE/2;
00216         edge[j].y = Y0 + j*SIDE/2;
00217     }
00218     for(i=0; i<NODES; i++) {
00219         x = i *SIDE;
00220         xf = (6 * PI / 200) *(float)(x-100);
00221         prev.y = Y0;
00222         prev.x = X0 + x;
00223         for(j=0; j<NODES; j++) {
00224             y = j * SIDE;
00225             yf = (6 * PI /200) * (float)(y -100);
00226             sf = sqrt(xf * xf + yf * yf);
00227             zf = 1/(1+sf) * cos(sf);
00228             z = zf * Hight;
00229             px = X0 + x + y/2;
00230             py = Y0 + z + y/2;
00231             tft.lcd_Pixel(px, ENDPAGE-5-py, 1);
00232             tft.lcd_Line(px, py, prev.x, prev.y, RED);
00233             tft.lcd_Line(px, py, edge[j].x, edge[j].y, RED);
00234             prev.x = px;
00235             prev.y = py;
00236             edge[j].x = px;
00237             edge[j].y = py;
00238         }
00239     }
00240 }
00241 
00242 
00243