//------------------------------------------------------------------------------ // // ロータリーエンコーダ テスト // ポーリング版 (ATmega88P) // Copyright (c) 2011 Let's Try It! // //------------------------------------------------------------------------------ #include #include int main() { DDRD = 0xff; // ポートDを出力にする PORTD = 0x08; // 中央のLEDを点灯させる DDRB = 0x00; // ポートBを入力にする PORTB = 0x03; // 0と1を内部プルアップ while (1) { if (bit_is_clear(PINB, PB0)) // A相のスイッチがオンの時 { // B相のスイッチがオンの時 // 反時計回り if (bit_is_clear(PINB, PB1)) { // 右にビットシフト PORTD >>= 1; if (PORTD == 0) { PORTD = 0x80; } } // B相のスイッチがオフの時 // 時計回り else { // 左にビットシフト PORTD <<= 1; if (PORTD == 0) { PORTD = 0x01; } } // チャタリング防止のためのディレイ _delay_ms(5); // A相がスイッチオフになるまで待つ loop_until_bit_is_set(PINB, PB0); // チャタリング防止のためのディレイ _delay_ms(5); } } return 0; }