/********************************************************************* * PIC32MX370F 7セグLED風描画テスト * プロジェクト名: QVGA_7SEG_DISP_TEST * * PIC32MX370F512H実験基板を使用 * 原典:京谷氏著書「グラフィック表示モジュール応用製作集」 * * Condition: * 10MHz External X'tal Oscillator, 1/2 x 20x PLL (5MHzx20= 100MHz) * Fcy= Fosc= 100MHz, Tcy=10ns * * CPU: PIC32MX370F512H * * 2.4インチ・カラーQVGA液晶モジュール(aitendo): UL024TF互換品 * * デバッグ年月日: 2018/3/16 N.Ishii **********************************************************************/ #include #include "colorlcd_libPIC32MXVH_v2.h" /// 外部クロック 100MHzで動作、周辺クロック:システムクロック = 1:1(外部X'tal Oscillator= 10MHz) // DEVCFG3 #pragma config FSRSSEL = PRIORITY_7 // Shadow Register Set Priority Select (SRS Priority 7) #pragma config PMDL1WAY = OFF // Peripheral Module Disable Configuration (Allow multiple reconfigurations) #pragma config IOL1WAY = OFF // Peripheral Pin Select Configuration (Allow multiple reconfigurations) // DEVCFG2 #pragma config FPLLIDIV = DIV_2 // PLL Input Divider (2x Divider) #pragma config FPLLMUL = MUL_20 // PLL Multiplier (20x Multiplier) #pragma config FPLLODIV = DIV_1 // System PLL Output Clock Divider (PLL Divide by 1) // DEVCFG1 #pragma config FNOSC = PRIPLL // Oscillator Selection Bits (External X'tal Osc with PLL) #pragma config FSOSCEN = OFF // Secondary Oscillator Enable (Disabled) #pragma config IESO = OFF // Internal/External Switch Over (Disabled) #pragma config POSCMOD = XT // Primary Oscillator Configuration (XT osc mode) #pragma config FCKSM = CSDCMD // Clock Switching and Monitor Selection (Clock Switch Disable, FSCM Disabled) #pragma config WDTPS = PS1048576 // Watchdog Timer Postscaler (1:1048576) #pragma config WINDIS = OFF // Watchdog Timer Window Enable (Watchdog Timer is in Non-Window Mode) #pragma config FWDTEN = OFF // Watchdog Timer Enable (WDT Disabled (SWDTEN Bit Controls)) #pragma config FWDTWINSZ = WISZ_25 // Watchdog Timer Window Size (Window Size is 25%) // DEVCFG0 #pragma config DEBUG = OFF // Background Debugger Enable (Debugger is Disabled) #pragma config JTAGEN = OFF // JTAG Enable (JTAG Disabled) #pragma config ICESEL = ICS_PGx1 // ICE/ICD Comm Channel Select (Communicate on PGEC1/PGED1) #pragma config PWP = OFF // Program Flash Write Protect (Disable) #pragma config BWP = OFF // Boot Flash Write Protect bit (Protection Disabled) #pragma config CP = OFF // Code Protect (Protection Disabled) #define LED_1 LATDbits.LATD3 #define LED_2 LATGbits.LATG8 /// メッセージテーブル char str_Start[] = "Start Test!!"; char str_hPa[] = "hPa"; long int T0 = 5000; int main(void) { // Data Memory SRAM wait states: Default Setting = 1; set it to 0 BMXCONbits.BMXWSDRM = 0; // SRAMのウェイトステートを0にする // Flash PM Wait States: MX Flash runs at 3 wait states @ 100 MHz CHECONbits.PFMWS = 3; // フラッシュのプリフェッチを3ウェイトステートに対応(100MHz動作時) // Prefetch-cache: Enable prefetch for cacheable PFM instructions CHECONbits.PREFEN = 1; //プリフェッチキャッシュ有効 __builtin_mtc0(16, 0, (__builtin_mfc0(16, 0) & 0xfffffff8 | 3)); // キャッシュ有効化 /// I/O設定→ 簡易6CHロジアナ実験回路と同じ設定にしておく // AN*ピンと共用ピンになっているピンを、全てデジタル・ピンに設定(デフォルト=アナログ・ピン設定なので注意) ANSELB = 0x0000; // RB0-15として使用 ANSELD = 0x0000; // RD1-3として使用 ANSELE = 0x0000; // RE2,RE4-7として使用 ANSELG = 0x0000; // RG6-9として使用 TRISB = 0xFFFF; // RB1:TRG_SLOPE_SW, RB2:HOLD_SW入力, RB3:DSW-1入力、RB4:DSW-2入力、RB5:DSW-4入力、他未使用ピンも入力設定 TRISD = 0xFF07; // LCD_RS,CS,WR,RESET:全て出力・HOLD_LED:出力・SW2-5:入力、他未使用ピンは入力設定 TRISE = 0x0000; // LCDデータバス(DB0-DB7)オール出力 TRISF = 0xFFFF; // RF0-5:CH1-6入力(5Vトレラント・ピン) TRISG = 0xFEFF; // RG6:TRIG_MODE_SW, RG7:READY_SW入力, RG8:READY_LED出力 LED_1 = 1; // LED_1消灯 LED_2 = 1; // LED_2消灯 /// 内部プルアップ設定 CNPUBSET = 0x003F; // DSW-8,DSW-4.DSW-2,DSW-1,SLP_SW,HLD_SW CNPUGSET = 0x00C0; // RDY_SW,TRG_MODE /// 液晶表示器の初期化 Glcd_Init(); Glcd_Clear(BLACK); Glcd_Str(0, 0, str_Start, CYAN, BLACK); delay_ms(1000); Glcd_Clear(BLACK); /// デモ1:3桁:"999"の7セグを表示します。 Draw7seg(0, 0, 999, 3, GREEN, BLACK); delay_ms(T0); Glcd_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(T0); Glcd_Clear(BLACK); /// デモ3:温湿度・気圧の、7セグ表示デモ(128x128 OLED使用前提) 180316 Draw7seg(0, 0, 1020, 4, YELLOW, BLACK); // 気圧 Glcd_Str(6, 1, str_hPa, YELLOW, BLACK); // "hPa" Draw7seg(36, 33, 64, 2, CYAN, BLACK); // 湿度 Glcd_Char(6, 3, 0x25, CYAN, BLACK); // '%' Draw7seg(36, 66, 22, 2, MAGENTA, BLACK); // 温度 Glcd_Char(6, 5, 0xE0, MAGENTA, BLACK); // '℃' LED_1 = 0; // LED_1点灯 while(1); }