본문 바로가기
AVR

[AVR] LED 실습 6. LED 순차 점등 제어(for 문 이용)

by hseoy 2020. 6. 9.
반응형

[LED 실습 5. LED 순차 점등 제어(for 문 이용) ]

이 글에서는 AVR(Atmega128A)에서 LED제어하는 것을 실습한 내용을 다루려고 한다. 이 글은 지식을 나누고자 하는 목적이 아닌 개인 기록의 목적으로 작성했다는 점을 기억하기를 바란다.

# 실습 6. LED 순차 점등 제어(for 문 이용)

이 문제에서 알아야 할 것은 LED실습2와 같으므로 생략하겠다. 

회로의 경우, 실습1 과 동일하다.

코드의 핵심 동작은 LED 실습 5와 동일하다. 여기서 달라지는 것은 구현 방식이다. 기존에는 while문 안에서 buff 변수의 값이 모두 시프트되었는 지를 확인하여 모두 시프트되어 켜졌을 때 다시 buff 변수에 초깃값을 대입해줬다면, 아래의 코드는 while문의 반복이 시작되었을 때 buff 값을 초깃값으로 만들어주고 for문 안에서 LED가 모두 시프트되어 전부 켜지게 된다. 그러면 while문의 다음 반복이 왔을 때 다시 buff 값이 초깃값이 되면서 반복되게 된다. 요약하자면 이전 실습 5에서의 코드는 if문을, 이번 실습에서는 for문을 이용해서 구현했다고 보면 될 듯하다. 난 개인적으로 if문을 사용한 것이 더 보기 좋은 듯하다. 

#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
    unsigned char buff;
    int i;
    DDRC = 0xFF;
    PORTC = 0x00;
    
    while (1)
    {
        buff = 0x00;
        for(i = 0; i < 9; i++)
        {
            PORTC = buff;
            _delay_ms(500);
            buff = (buff << 1) + 1;
        }
    }
    return 0;
}

아래는 위 코드를 AVR에 업로드하여 실행한 영상이다.

 

반응형

댓글