/********************************************************************* * PIC32MX モノクログラフィックLCDテスト * プロジェクト名: MONO_GLCD_TEST * 汎用ユニットで動作 * * Graphic LCD(Monochrome): SG12864A * * カラー液晶テストプログラムを元にモディファイ * * デバッグ年月日: 2013/4/2 N.Ishii *********************************************************************/ #include /* PIC32 peripheral library */ #include "glcd_lib32k.h" #include "imagedata.h" #include // コンフィギュレーション設定 // 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 /* 3次元グラフ用定数宣言 */ #define X0 3 #define Y0 3 #define PI 3.141592654f #define NODES 20 #define SIDE 6 /* グローバル変数宣言 */ short i, j, index, SW, Upper, Lower; char Line, Colum; /// Prototyping void D2Graph(short Hight); //////////////////////////////////////////// // 漢字メッセージ シフトJISコードデータ //////////////////////////////////////////// const short Message[] ={ // 試験中!! // PIC32MX // 漢字メッセージ表示 0x8e,0x8e,0x8c,0xb1,0x92,0x86,0x81,0x49,0x81,0x49,0x81,0x40,0x81,0x40,0x81,0x40,0x81,0x40,0x81,0x40, 0x82,0x6f,0x82,0x68,0x82,0x62,0x82,0x52,0x82,0x51,0x82,0x6c,0x82,0x77,0x81,0x40,0x81,0x40,0x81,0x40, 0x8a,0xbf,0x8e,0x9a,0x83,0x81,0x83,0x62,0x83,0x5a,0x81,0x5b,0x83,0x57,0x95,0x5c,0x8e,0xa6,0x00 }; /****************************************** * スイッチ状態変化割り込み処理 *******************************************/ void __ISR(7, ipl2) INT1Handler(void){ SW++; // SW5 テスト順次アップ if(SW > 8) SW = 0; delay_ms(50); // チャッタ回避 mINT1ClearIntFlag(); // 割り込みフラグクリア } void __ISR(11, ipl2) INT2Handler(void){ SW = 7; // SW4 漢字コード指定による漢字表示テストへ delay_ms(50); mINT2ClearIntFlag(); // 割り込みフラグクリア } void __ISR(15, ipl2) INT3Handler(void){ SW = 5; // SW3 直線描画へ delay_ms(50); mINT3ClearIntFlag(); // 割り込みフラグクリア } void __ISR(19, ipl2) INT4Handler(void){ SW = 6; // SW2 曲線描画へ delay_ms(50); mINT4ClearIntFlag(); // 割り込みフラグクリア } /******* メインルーチン ***********/ int main(void) { //システム最適設定 SYSTEMConfigPerformance(80000000); mJTAGPortEnable(DEBUG_JTAGPORT_OFF); // JTAGを無効化 //I/O設定 AD1PCFG = 0xFFFE; // デジタルに // GLCD制御信号レベルの初期化 LCD_E = 0; LCD_CS1 = 1; LCD_CS2 = 1; LCD_RW = 1; LCD_DI = 1; LCD_TRIS = 0x0000; // LCDデータバス(DB0-DB7)オール出力(TRISE= 0) // TRISD = 0xFF8E; // LCD_CS1,CS2,DI:全て出力・デバッグLED:出力・SW2-5:入力、他未使用ピンは入力設定 TRISD = 0xFF17; // LCD_CS1,CS2,DI:全て出力・デバッグLED:出力・SW2-5:入力、他未使用ピンは入力設定 TRISF = 0xFFFC; // LCD_E,RW:全て出力、他未使用ピンは入力設定 LATDbits.LATD3 = 1; // デバッグLED消灯 // 液晶表示器の初期化 lcd_Init(); // 漢字コード初期値 2バイトコード Upper = 0x81; Lower = 0x40; SW = 0; i = 0; // D2Graph Hight変数初期化 //外部割込み許可 ConfigINT1(EXT_INT_ENABLE | RISING_EDGE_INT | EXT_INT_PRI_2); ConfigINT2(EXT_INT_ENABLE | RISING_EDGE_INT | EXT_INT_PRI_2); ConfigINT3(EXT_INT_ENABLE | RISING_EDGE_INT | EXT_INT_PRI_2); ConfigINT4(EXT_INT_ENABLE | RISING_EDGE_INT | EXT_INT_PRI_2); mINT1ClearIntFlag(); mINT2ClearIntFlag(); mINT3ClearIntFlag(); mINT4ClearIntFlag(); //マルチベクタ割り込み設定、割り込み許可 INTEnableSystemMultiVectoredInt(); //// メイン ループ while(1){ /// スイッチの値により各処理へ分岐 switch(SW){ case 0: /// 全画面クリアのテスト delay_ms(1000); lcd_Clear(0); // 全体消去 delay_ms(1000); lcd_Clear(0xFF);// 全体表示 break; case 1: /// ピクセル表示機能 lcd_Clear(0); for(i=0; i<64; i++){ // 斜め直線の表示 lcd_Pixel(i,i,1); // CS1 Side lcd_Pixel(64+i, i,1); // CS2 Side } delay_ms(3000); lcd_Clear(0xFF); // 全部黒 for(i=0; i<64; i++){ // 斜め直線白抜き表示 lcd_Pixel(i,i,0); // add 120305 lcd_Pixel(64+i, i,0); } delay_ms(3000); break; case 2: // アスキー文字表示テスト lcd_Clear(0); for(j=0; j<8; j++){ // ASCII文字全表示 16文字/行 for(i=0; i<16; i++){ index = j*16+i+0x20; // 96文字で繰り返し lcd_Char(j, i, index); // 文字表示制御 } } delay_ms(3000); lcd_Clear(0); for(j=0; j<8; j++){ // ASCII文字全表示 18文字/行 for(i=0; i<18; i++){ index = j*18+i+0x50; lcd_Char1(j, i, index); // 文字表示制御 } } delay_ms(3000); break; case 3: // イメージの表示テスト lcd_Image(Header2); delay_ms(3000); lcd_Scroll(50); // lcd_Image(Header3); // delay_ms(3000); // lcd_Scroll(100); // Change Image lcd_Image(My_PIC_Scope); delay_ms(3000); lcd_Scroll(100); break; case 4: // アスキー文字列の表示テスト lcd_Clear(0); delay_ms(1000); lcd_Str(0, 0, "Hello World!!"); lcd_Str(2, 0, "Graphic LCD Test!"); delay_ms(3000); break; case 5: // 直線描画テスト lcd_Clear(0); delay_ms(1000); i = 0; for(j=0; j<32; j+=2){ // ボックス表示 lcd_Line(j,j, 127-j, j); // 次第に小さなボックスへ lcd_Line(j,j, j, 63 -j); lcd_Line(127-j,63-j, 127-j,j); lcd_Line(128-j,63-j, j,63-j); delay_ms(500); } break; case 6: // 直線描画(曲線) lcd_Clear(0); delay_ms(1000); if(i>10) i=0; D2Graph(10*i++); delay_ms(1000); break; case 7: // 漢字コード指定による漢字表示 lcd_Clear(0); for(Line=0; Line<8; Line= Line+2){ // 12x12フォントなので、1行に、10文字表示した後 // Lineを2つ進める必要がある。 130319 for(Colum=0; Colum<10; Colum++){ // 10文字/行 KanjiCode(Line, Colum, Upper, Lower); // 漢字コードによる、1文字表示 // 漢字コードアップ Lower++; if(Lower > 0xFC){ Upper++; Lower = 0x40; if(Upper > 0x9F) Upper = 0x81; } } } delay_ms(1000); break; case 8: // 漢字メッセージ表示 lcd_Clear(0); delay_ms(1500); Kanji_Str(0, 0, Message); delay_ms(1500); break; /// default default: break; } } } /********************************************* * Drawing two dimensions graph * z(x,y) = 1/(1+SQRT(x2+y2))*COS(SQRT(x2+y2)) * (-3*PI< x,y < 3*PI) ***********************************************/ void D2Graph(short Hight) { short i, j, px, py,x, y, z; float zf, xf, yf, sf; struct{ int x; int y; } edge[NODES], prev; lcd_Line(X0, 3, X0, 63); // z axis lcd_Line(X0-3, Y0, 123, Y0); // x axis lcd_Line(X0-2, Y0-2, X0+60, Y0+60); // y axis for(j=0; j