さまざまな点灯パターンを試す
pp.84-99
#include <xc.h> #define _XTAL_FREQ 4000000 // クロックを定義する(ディレイ函数用)。4 MHz。 __CONFIG( FOSC_INTOSC // 内蔵オシレーターを使う。 & MCLRE_OFF // MCLRを無効化する。だからRA5が使える。 & WDTE_OFF // ウォッチドッグタイマーを無効化する。 ); int main(){ OSCCON = (0b1101 << 3); // OSCILLATOR CONTROL REGISTER。4 MHz。 TRISB = 0x00; // ポートBのIOを全部OUTにする。0でOUT、1でIN。 LATB = 0xff; // 一旦ポートBを全部Hにする。シンクなので全部のLEDが消える。 int leds; while(1){ // 0~255を順番にポートBに表示する。 for(int i=0; i<255; i++){ LATB = ~i; __delay_ms(20); } // 点灯するLEDを右から左へ1つずつずらす。 for(int i=0; i<8; i++){ LATB = ~(1 << i); __delay_ms(200); } // 点灯するLEDを左から右へ1つずつずらす。 for(int i=0; i<8; i++){ LATB = ~(0b10000000 >> i); __delay_ms(200); } // 点灯するLEDを右から左へ1つずつ積んでゆく。 leds = 0; for(int i=0; i<8; i++){ leds |= (1 << i); LATB = ~leds; __delay_ms(400); } // 点灯するLEDを左から右へ1つずつ積んでゆく。 leds = 0; for(int i=0; i<8; i++){ leds |= (0b10000000 >> i); LATB = ~leds; __delay_ms(400); } } return 0; }