ポインタ変数の応用例 / 2重ループを1重化する
pp.154-157
2次元排列に格納された値を順番にポートBに出力する。
#include <xc.h> #pragma config FOSC = INTOSC #pragma config WDTE = OFF #pragma config MCLRE = OFF #define _XTAL_FREQ 4000000 int main(){ OSCCON = 0x68; // 4 MHZ TRISA = 0x0f; // ポートAの下位4ビットのIOをINにする。0でOUT、1でIN。 ANSELA = 0x00; // ポートAを全部ディジタル入力端子にする。 TRISB = 0x00; // ポートBのIOを全部OUTにする。0でOUT、1でIN。 LATB = 0xff; // ポートBに接続されたLEDを一旦全部消す。 const int sute0[4][2] = {{1, 2}, {3, 4}, {5, 6}, {7, 0},}; const int sute1[4][2] = {{0x10, 0x20}, {0x30, 0x40}, {0x50, 0x60}, {0x70, 0x00},}; while(1){ // 普通は2重ループにするが、 for(int r=0; r<4; r++){ for(int c=0; c<2; c++){ LATB = ~sute0[r][c]; __delay_ms(200); } } // 順番に読み出しているだけなのでポインタ変数を使えば1重ループには一往できる。 int* p = sute1; for(int i=0; i<8; i++){ LATB = ~(*p); p++; __delay_ms(200); } } return 0; }