/********************************************************************* * PIC32MX カラーQVGA液晶テスト * プロジェクト名: PIC32MX_QVGA_TEST * PIC32MXトレーニング基板で動作 * * Condition: * 8MHz External X'tal Oscillator, 20x PLL (8MHzx20= 160MHz) * Fcy=160MHz/2=80MHz, Tcy=12.5ns * * CPU: PIC32MX340F256H * * 2.8インチQVGA液晶モジュール(aitendo): M028C9325TP * * * YS電子工作:斎藤氏のソースを元にモディファイ * * デバッグ年月日: 2013/5/18 N.Ishii *********************************************************************/ #include /* PIC32 peripheral library */ #include "colorlcd_libdsPICVH.h" #include #include "imagedata.h" // コンフィギュレーション設定 // CPU=80MHz Peri=80MHz,HS+PLL,Divider=1/2,PLL=x20,WDT=Off #pragma config FNOSC=PRIPLL, POSCMOD=HS, FPLLIDIV=DIV_2 #pragma config FPLLMUL=MUL_20, FPBDIV=DIV_1, FPLLODIV=DIV_1 #pragma config FWDTEN=OFF, ICESEL=ICS_PGx2 char Buf[17]; //文字列のバッファー用レジスタ char str_Hellow[] = "Hellow"; char str_World[] = "World !!"; char str_Tokyo[] = "Tokyo"; char str_Japan[] = "Japan"; char str_Chiyodaku[] = "Chiyodaku"; char str_Sotokanda[] = "Sotokanda"; char str_Akihabara[] = "Akihabara"; char str_AKB48[] = "AKB48"; long int T0 = 5000; ////--------------------------------------------------------------------------------------------------------- /********************************************* * 2次元立体グラフ描画関数 * z(x,y) = 1/(1+SQRT(x2+y2))*COS(SQRT(x2+y2)) * (-3*PI< x,y < 3*PIの範囲) * zの最大値をPOTで変更する * 追加:130517→ 後閑氏作成PIC24F用関数を、PIC32MX用に移植 *            と言っても殆ど同じだが・・・ **********************************************/ /* グローバル定数 */ #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; Glcd_Line(X0, 3, X0, ENDPAGE-12 ,GREEN); // z axis Glcd_Line(X0-3, Y0, ENDCOL, Y0, GREEN); // x axis Glcd_Line(X0, Y0-2, X0+140, Y0+140, GREEN); // y axis for(j=0; j3) && (j<8)) Glcd_Char(i, j, index, GREEN, BLACK); if ((j>7) && (j<12))Glcd_Char(i, j, index, RED, BLACK); if ((j>11) && (j<17))Glcd_Char(i, j, index, YELLOW, BLACK); } } delay_ms(T0); // 5秒待ち Glcd_Clear(BLACK); // クリア ///-------------------------------------------------------------------------------------------------------- /// 画面全体描画(16ビットカラー各色で順次全体描画)---------------------------------------------------------------- Glcd_Clear(WHITE); delay_ms(1000); Glcd_Clear(BLACK); delay_ms(1000); Glcd_Clear(RED); delay_ms(1000); Glcd_Clear(GREEN); delay_ms(1000); Glcd_Clear(BLUE); delay_ms(1000); Glcd_Clear(CYAN); delay_ms(1000); Glcd_Clear(MAGENTA); delay_ms(1000); Glcd_Clear(YELLOW); delay_ms(1000); Glcd_Clear(BROWN); delay_ms(1000); Glcd_Clear(ORANGE); delay_ms(1000); Glcd_Clear(PERPLE); delay_ms(1000); Glcd_Clear(COBALT); delay_ms(1000); delay_ms(T0); // 5秒待ち ///----------------------------------------------------------------------------------------------------- /// 斜め直線描画------------------------------------------------------------------------------------------ Glcd_Clear(WHITE); // クリア for(i=0; i<240; i++){ // 斜め直線の表示: 白ベタ背景・黒線表示 Glcd_Pixel(i,i,BLACK); Glcd_Pixel(240+i, i,BLACK); } delay_ms(T0); // 5秒待ち Glcd_Clear(BLACK); // クリア for(i=0; i<240; i++){ // 斜め直線: 黒ベタ背景・白線表示 Glcd_Pixel(i,i,WHITE); Glcd_Pixel(240+i, i,WHITE); } delay_ms(T0); // 5秒待ち Glcd_Clear(BLACK); // クリア ///----------------------------------------------------------------------------------------------------- /// 直線描画テスト-------------------------------------------------------------------------------------------- i = 0; for(j=0; j<120; j+=10){ // ボックス表示 Glcd_Line(j,j, 319-j, j,YELLOW); // 次第に小さなボックスへ Glcd_Line(j,j, j, 239 -j,YELLOW); Glcd_Line(319-j,239-j, 319-j,j,YELLOW); Glcd_Line(319-j,239-j, j,239-j,YELLOW); delay_ms(500); } delay_ms(T0); Glcd_Clear(BLACK); // クリア ///---------------------------------------------------------------------------------------------------------- /// 円の描画------------------------------------------------------------------------------------------------- for(i = 0; i < 10; i++){ Glcd_Circle(320/2 + 5*i,240/2,240/2,GREEN); } delay_ms(T0); Glcd_Clear(BLACK); // クリア ///---------------------------------------------------------------------------------------------------------- /// 曲線描画(2次元グラフ表示): 130517追加--------------------------------------------------------------------------- for(i=0; i<8; i++){ // 曲線描画 Glcd_Clear(BLACK); Glcd_Str(0, 0, "Graphic Display", BLUE, BLACK); D2Graph(20*i); //曲面グラフ表示 delay_ms(2000); } delay_ms(T0); Glcd_Clear(BLACK); // クリア ///---------------------------------------------------------------------------------------------------------- /// イメージグラフィック表示: 130518追加------------------------------------------------------------------------------ Glcd_Image(0, Header1, MAGENTA, BLACK); Glcd_Image(8, Header2, CYAN, BLACK); Glcd_Image(16, My_PIC_Scope, GREEN, BLACK); delay_ms(T0); Glcd_Clear(BLACK); // クリア ///---------------------------------------------------------------------------------------------------------- } ////------------------------------------------------------------------------------------------------------------- int main(void) { int i; //システム最適設定 SYSTEMConfigPerformance(80000000); mJTAGPortEnable(DEBUG_JTAGPORT_OFF); // JTAGを無効化 //I/O設定 AD1PCFG = 0xFFFE; // デジタルに TRISE = 0x0000; // LCDデータバス(DB0-DB7)オール出力 TRISD = 0xFF07; // LCD_RS,CS,WR,RESET:全て出力・デバッグLED:出力・SW2-5:入力、他未使用ピンは入力設定 TRISF = 0xFFFC; // 今回Fポートは未使用だが、RF0,RF1のみ出力設定にした LATDbits.LATD3 = 1; // デバッグLED消灯 // 液晶表示器の初期化 Glcd_Init(); Glcd_Clear(BLACK); while(1){ DisplayFunc(); } }