본문 바로가기

Atmega128/AVR Atmega128

B포트를 이용한 LED 점멸

#include <avr/io.h>

#define S0 PB5
#define S1 PB6
#define S2 PB7

#define D0 PB0
#define D1 PB1
#define D2 PB2
#define D3 PB3
#define D4 PB4

int main(void)
{
	 //DDRB 레지스터 변수, 1<<은 1을 D0만큼 시프트 시키라는 의미
    DDRB = 1<<D0 | 1<<D1 | 1<<D2 | 1<<D3 | 1<<D4; 
    
    while(1){
    	// 'PINB와 1을 S0 비트값(PB5)만큼 시프트 시킨 값이 같다면' 의 부정(!)이니 같지 않으면
        if(!(PINB & (1<<S0)))
        	//PORTB는 1<<D0, 1<<D1 둘중 하나만 1이여도 PORTB에 값을 넣는다
            PORTB |= 1<<D0 | 1<<D1; // S0가 눌렸을 때 D0, D1 LED 켜기
        else
        	//PORTB는 1<<D0, 1<<D1 둘중 하나만 1이여도 1의 반전된 값을 PORTB에 넣는다
            PORTB &= ~(1<<D0 | 1<<D1); // S0가 눌리지 않았을 때 D0, D1 LED 끄기
        
        if(!(PINB & (1<<S1)))
            PORTB |= 1<<D2; // S1이 눌렸을 때 D2 LED 켜기
        else
            PORTB &= ~(1<<D2); // S1이 눌리지 않았을 때 D2 LED 끄기
        
        if(!(PINB & (1<<S2)))
            PORTB |= 1<<D3 | 1<<D4; // S2가 눌렸을 때 D3, D4 LED 켜기
        else
            PORTB &= ~(1<<D3 | 1<<D4); // S2가 눌리지 않았을 때 D3, D4 LED 끄기
    }
}