/******************************************************************** * PIC32MX_カラーOLED表示テスト * プロジェクト名: PIC32MX_OLED_TEST_2 * * PIC32MXトレーニング基板を使い、カラーOLED表示テストを行った。 * * Condition: * 8MHz External X'tal Oscillator, 20x PLL (8MHzx20= 160MHz) * Fcy=160MHz/2=80MHz, Tcy=12.5ns * * CPU: PIC32MX340F256H * * 1.5インチカラーOLED: Adafruit_1.5INCH_RGBOLED * * デバッグ年月日: 2018/1/27 N.Ishii *********************************************************************/ #include // PIC32 peripheral library #include "SSD1351_OLEDlibPIC32MX.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 /******************************************** * 漢字メッセージ シフトJISコードデータ ********************************************/ const short Message[] ={ // 試験中!! // PIC32MX // 漢字メッセージ表示 0x8e,0x8e,0x8c,0xb1,0x92,0x86,0x81,0x49,0x81,0x49,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, 0x8a,0xbf,0x8e,0x9a,0x83,0x81,0x83,0x62,0x83,0x5a,0x81,0x5b,0x83,0x57,0x95,0x5c,0x8e,0xa6,0x00 }; int main(void) { short i,j,index; short temp; short Flag, Size, XOffset, YOffset; short Line, Colum; short Upper, Lower; char end= 0; /* システム最適設定 */ SYSTEMConfigPerformance(80000000); mJTAGPortEnable(DEBUG_JTAGPORT_OFF); // JTAGを無効化 /* I/O初期設定 */ AD1PCFG = 0xFFFF; // デジタルに TRISE = 0x0000; // LED-RE0 〜 RE7 TRISF = 0x0034; // VS1011_SDI, VS1011_SDO, VS1011_SCK, VOL_UP_SW, VOL_DWN_SW, LED-RF1, LED-RF0 TRISC = 0xF000; // OSC,SOSC TRISD = 0x0F00; // RD7:OLED_RST, RD3(RD4 NGで変更180125), OLED_CS, SW2〜SW5(未使用) TRISB = 0x40CF; // RB3:SD_CD, RB4:OLED_DC, RB5:SD_CS,VS1011e制御信号, SKIP_SW, BASS_SW TRISG = 0x0280; // RG6:SCK(SD/OLED共用),RG7:SD_SDI, RG8:SDO(SD/OLED共用), MAIN_RTN_SW, EEPROM_SDA.SCL /// LEDモジュールの全セグメントOFF LATE = 0; LATFbits.LATF0 = 0; LATFbits.LATF1 = 0; /// スイッチ状態変化割込み許可(今回は未使用) mCNOpen(CN_ON, CN3_ENABLE | CN4_ENABLE | CN11_ENABLE | CN17_ENABLE | CN18_ENABLE, CN5_PULLUP_ENABLE); // SKIP_SW, BASS_SW, MAIN_RTN_SW, VOL_UP_SW, VOL_DWN_SW, SD-CD_PULLIP temp = PORTB; // 状態合わせ temp = PORTF; temp = PORTG; /// OLEDの初期化 OLEDInit(); // OLEDコントローラー初期化 delay_ms(100); OLED_Clear(BLACK); // 全画面クリア OLED_Str(0, 0, "Start Test", CYAN, BLACK); delay_ms(2000); OLED_Clear(BLACK); // クリア /// 定義カラーコードでの、全画面フィルBOX描画---------------------------------------------------------------------------- OLED_Clear(WHITE); delay_ms(2000); OLED_Clear(BLACK); delay_ms(2000); OLED_Clear(RED); delay_ms(2000); OLED_Clear(GREEN); delay_ms(2000); OLED_Clear(BLUE); delay_ms(2000); OLED_Clear(CYAN); delay_ms(2000); OLED_Clear(MAGENTA); delay_ms(2000); OLED_Clear(YELLOW); delay_ms(2000); OLED_Clear(BROWN); delay_ms(2000); OLED_Clear(ORANGE); delay_ms(2000); OLED_Clear(PERPLE); delay_ms(2000); OLED_Clear(COBALT); delay_ms(2000); delay_ms(5000); // 5秒待ち OLED_Clear(BLACK); // クリア ///文字列描画(ASCII 8x8dot文字用)---------------------------------------------------------------------------- OLED_Str(0,0,"Hellow",BLACK,WHITE); OLED_Str(1,1,"World !!",RED,WHITE); OLED_Str(2,2,"Japan",BLUE,WHITE); OLED_Str(3,3,"Tokyo",WHITE,BLACK); OLED_Str(4,4,"Chiyodaku",RED,BLACK); OLED_Str(5,5,"Sotokanda",GREEN,BLACK); OLED_Str(6,6,"Akihabara",RED,YELLOW); OLED_Str(7,7,"AKB48",GREEN,YELLOW); delay_ms(5000); // 5秒待ち OLED_Clear(BLACK); // クリア ///-------------------------------------------------------------------------------------------------------- /// ASCII 8x8dot文字(全192文字)の描画--------------------------------------------------------------------- for(j=0; j<16; j++){ for(i=0; i<16; i++){ index = j*16+i+0x20; // スペースコードから開始し、1行16文字で繰返し if (j<3) OLED_Char(i, j, index, WHITE, BLACK); // 文字表示制御 if ((j>2) && (j<6)) OLED_Char(i, j, index, GREEN, BLACK); if ((j>5) && (j<9)) OLED_Char(i, j, index, RED, BLACK); if ((j>8) && (j<12)) OLED_Char(i, j, index, YELLOW, BLACK); } } delay_ms(5000); // 5秒待ち OLED_Clear(BLACK); // クリア ///-------------------------------------------------------------------------------------------------------- /// 漢字コードでの全漢字フォント表示 ---------------------------------------------------------------------- /// 81文字/1画面表示で、S-JISの8140h〜9FFFhまで表示 /// 漢字コード初期値 2バイトコード Upper = 0x81; Lower = 0x40; /// 漢字表示 while(!end){ for(Line=0; Line<9; Line++){ // 9行 for(Colum=0; Colum<9; Colum++){ // 9文字/行 KanjiCode(Line, Colum, Upper, Lower, WHITE, BLACK); // 漢字コードアップ Lower++; if(Lower > 0xFC){ // 下位コードがFChだったら Upper++; // 上位コードをアップ Lower = 0x40; // 下位コードは区切りの40hとする(初期化) if(Upper > 0x9F){ // 上位コードがA0hだったら Upper = 0x81; // 上位コードを初期化 end= 1; // 全フォント表示の終了フラグをセット Colum= 9; // 最後は1画面に満たないところで終了するのでforループ強制脱出のためColum上限にセット Line= 9; // 最後は1画面に満たないところで終了するのでforループ強制脱出のためLine上限にセット } } } } delay_ms(2000); OLED_Clear(BLACK); // 黒でクリア } end= 0; ///-------------------------------------------------------------------------------------------------------- /// 漢字メッセージ表示-------------------------------------------------------------------------------------- Kanji_Str(0, 0, Message, WHITE, BLACK); delay_ms(5000); // 5秒待ち OLED_Clear(BLACK); // クリア ///----------------------------------------------------------------------------------------------------- /// 斜め直線描画------------------------------------------------------------------------------------------ OLED_Line(0, ENDROW-1, ENDCOL-1, 0, RED); // 右肩下がり OLED_Line(0, 0, ENDCOL-1, ENDROW-1, BLUE); // 右肩上がり delay_ms(5000); // 5秒待ち OLED_Clear(BLACK); // クリア ///----------------------------------------------------------------------------------------------------- /// 直線描画テスト-------------------------------------------------------------------------------------------- if(ENDROW-1 < ENDCOL-1){ Size = ENDROW-1; XOffset = ((ENDCOL-1) - (ENDROW-1)) / 2; YOffset = 0; } else{ Size = ENDCOL-1; XOffset = 0; YOffset = ((ENDCOL-1) - (ENDROW-1)) / 2; } for(j=0; j