/****************************************************************************** * PIC24F用の、カラーOLED_7セグLED風描画テスト * プロジェクト名: PIC24F_OLED_7SEG_DISP_TEST * * PIC24Fトレーニング基板を使用 * 原典:京谷氏著書「グラフィック表示モジュール応用製作集」 * * Condition: * 8MHz Internal RC oscillator, 4x PLL (8MHzx4= 32MHz) * Fcy=32MHz/2=16MHz, Tcy=62.5ns * * CPU: PIC24FJ64GA002 * * 1.5インチカラーOLED(aitendo): NVK-128SC008F * * デバッグ年月日: 2018/3/16 N.Ishii * * <追加テスト履歴> * 180325-27 * 表示桁数と数値桁数が合わない場合の表示確認(cColum < Value) * 180330 * ダイナミックなゼロブランクテスト追加 * ライブラリ更新:Draw7seg関数 *******************************************************************************/ #include "p24FJ64GA002.h" #include "LD50T5128M_OLEDlibPIC24F_v2.h" /// コンフィギュレーション ビットの設定 _CONFIG1( JTAGEN_OFF // JTAGの使用:無効 & GCP_OFF // コードプロテクト:しない & GWRP_OFF // 書き込みプロテクト:しない & BKBUG_OFF // バックグラウンドデバッグ:無効 & COE_OFF // クリップオンエミュレーション:無効 & ICS_PGx1 // EMUC/EMUDをPCG1/PGD1と共用 & FWDTEN_OFF // WDT:無効 ) /// Fosc = FRC (Fosc=32MHz) _CONFIG2( IESO_OFF // 2速度スタートアップ:無効 & FNOSC_FRCPLL // 8MHz Internal RC oscillator, 4x PLL-> 8MHzx4=32MHz & FCKSM_CSDCMD // クロック切り替え・クロックモニタ:供に無効 & OSCIOFNC_ON // OSCOピン機能:RA3ポートとする 161118 & IOL1WAY_OFF // RPレジスタプロテクト:プロテクトしない & I2C1SEL_PRI // I2C1のピン選択:主ピンを使用する & POSCMOD_NONE // 主発振器:使用しない ) int main(void) { unsigned short i; //// I/O設定 AD1PCFG = 0xFFFF; // A/D Digi 選択:全デジタルI/Oに設定 CLKDIV = 0x0000; // System Clock devider 1:1 /// Setup PORT In/Out TRISB = 0x000F; // RB4-15は、OLED制御出力 他は未使用入力 TRISA = 0x0006; // RA0= OLED_VCC_ON出力, RA3= 赤LED、RA4= OLED_RESET出力、他は入力 /// Set Pull Up CNPU1 = 0x0030; // Pull Up Port is RB0(ピン1), RB1(ピン2) TRISAbits.TRISA3= 0; // 赤LED:デバッグ用 LATAbits.LATA3 = 1; // 赤LED消灯 OLEDInit(); // OLEDコントローラー初期化 OLED_Clear(BLACK); // 画面消去 // OLED_Str(0, 0, "Start Test!!", CYAN, BLACK); // 8x8フォント用 OLED_Str(0, 0, "Start Test", CYAN, BLACK); // 12x12フォント用 delay_ms(2000); OLED_Clear(BLACK); // クリア /// デモ1:3桁:"999"の7セグを表示します。 Draw7seg(0, 0, 999, 3, GREEN, BLACK); delay_ms(5000); OLED_Clear(BLACK); /// デモ2:7セグ・パターン(16進表示)を全て表示します。 Draw7seg(0, 0, 0, 1, GREEN, BLACK); // 1行目-1 Draw7seg(18, 0, 1234, 4, GREEN, BLACK); // 1行目-2 Draw7seg(0, 25, 56789, 5, BLUE, BLACK); // 2行目 Draw7seg_(0, 50, 0x77, YELLOW, BLACK); // 3行目'A' Draw7seg_(18, 50, 0x7C, YELLOW, BLACK); // 3行目'b' Draw7seg_(36, 50, 0x39, YELLOW, BLACK); // 3行目'c' Draw7seg_(54, 50, 0x5E, YELLOW, BLACK); // 3行目'd' Draw7seg_(72, 50, 0x79, YELLOW, BLACK); // 3行目'E' Draw7seg_(90, 50, 0x71, YELLOW, BLACK); // 3行目'F' delay_ms(5000); OLED_Clear(BLACK); /// デモ3:表示桁数と数値桁数が合わない場合の表示確認(Value < cColum) Draw7seg(0, 0, 50, 3, GREEN, BLACK); // 表示結果= " 50"→ 3桁目ゼロブランク 180327 delay_ms(5000); OLED_Clear(BLACK); Draw7seg(0, 0, 3, 5, GREEN, BLACK); // 表示結果= " 3"→ 5〜2桁目ゼロブランク 180327 delay_ms(5000); OLED_Clear(BLACK); /// デモ5:温湿度・気圧の、7セグ表示デモ(128x128 OLED使用前提) Draw7seg(0, 19, 940, 4, YELLOW, BLACK); // 気圧:1100hpa max OLED_Str(6, 2, "hPa", YELLOW, BLACK); // "hPa" Draw7seg(18, 52, 64, 3, CYAN, BLACK); // 湿度:100%max OLED_Char(6, 4, 0x25, CYAN, BLACK); // '%' Draw7seg(36, 86, 5, 2, MAGENTA, BLACK); // 温度:85°C max OLED_Char(6, 7, 0xE0, MAGENTA, BLACK); // '°c' delay_ms(5000); OLED_Clear(BLACK); /// デモ6:ゼロブランク・テスト_2:数値をインクリメントしながら確認:0〜19999 i= 0; while(i != 20000) { Draw7seg(0, 0, i, 5, CYAN, BLACK); delay_ms(200); ++i; } LATAbits.LATA3 = 0; // 赤LED点灯 while(1); }