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를 순차적으로 점등시킨다.
728x90
'Language > AVR' 카테고리의 다른 글
ATmega 128 : LED Bar 구조체 동작 구현 (0) | 2024.05.28 |
---|---|
ATmega 128 : LED Bar 포인터 동작 구현 (1) | 2024.05.26 |
ATmega 128 : LED Bar 배열 동작 구현 (0) | 2024.05.25 |
ATmega 128 : LED Bar 중앙에서 밀어내는 동작 구현 (0) | 2024.05.25 |
ATmega 128 : LED Bar 점등하기 (0) | 2024.05.25 |