Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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
Generated on Tue Jul 12 2022 18:13:33 by
1.7.2