ディジタル入力を試す / 問題2-6-6
p.106
問題2-6-6の別解
#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。 int leds = 0; while(1){ // スイッチがどれも押されていなかったら、 // 点灯するLEDを右から左へ1つずつずらす、を繰り返す。 while(PORTA == 0xf){ for(int i=0; i<8; i++){ LATB = ~(1 << i); __delay_ms(100); } } // スイッチがどれか押されていたら、 // 点灯するLEDを右から左へ1つずつ積んでゆく、を繰り返す。 leds = 0; for(int i=0; i<8; i++){ leds |= (1 << i); LATB = ~leds; __delay_ms(100); } } return 0; }