Language/AVR

ATmega 128 : LED Bar 순차적 점등하기

짱도르딘 2024. 5. 25. 15:43
728x90

이번에는 0번부터 7번까지 왔다 갔다 반복하는 코드를 구현해봤다.

 

 

#define 정의 함수를 사용하여 DDR 과 PORT를 묶어 정리한다.

 

uint8_t는 unsigned int 형과 비슷하며 크기는 8bit이다.

 

즉, 부호없는 8비트 정수를 의미한다.

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

#define LED_DDR DDRC 				// DDRC 포트를 LED_DDR로 정의한다.
#define LED_PORT PORTC	 	   	    // PORTC를 LED_PORT로 정의한다.

int main(void)
{
	LED_DDR = 0xff;           	    // DDRC 포트를 항상 출력으로 설정.
	
	while(1)
	{
		for(uint8_t i=0; i<8; i++)  //8비트짜리 unsigned i
		{
			LED_PORT = 0x01 << i;   // 1을 i만큼 밀어버린다.
			_delay_ms(200);
		}
		for (uint8_t i=6; i > 0; i--)  
		{
			PORTC = 0x01 << i;      // i만큼 << 방향을 밀어낸다는 의미인데,
						// 처음에 i=6이니까, 6칸 밀어내면
						// 0000 0001 << 6 -> 0100 0000이 된다.
						// 점차적으로 감소시키면서 밀어낸다는 의미임.
			_delay_ms(200);
		}
	}
}

 

for문 내에는 i를 증가시켜 PORT를 하나씩 밀어내는 동작을 구현하였다.

 

예를들면, 0000 0001 -> 0000 0010 -> 0000 0100 순서로 밀어내서 LED를 순차적으로 점등시킨다.

LED Bar 순차적 점등

 

728x90