본문 바로가기

AVR 기초/LED 제어하기

[AVR 기초]LED를 다양하게 켜보기

*키트는 Atmega128A를 사용하였습니다*

 

LED를 다양하게 켜보는 방법입니다.

 

이 글에서는 delay 헤더파일을 이용한 delay 대신 delay 함수를 만들어 사용하였습니다.

 

#include <avr/io.h>	//avr사용 헤더파일 선언

void del(int sec){			//_delay_ms를 대신할 함수 del
	volatile int j,k,l; 
	for(j = 0; j< sec ; j++){
		for(k = 0; k< 1000 ; k++){
			for (l = 0; l<500;l++){
			}
		}
	}
}

int main(void)			//main함수
{
	DDRA  = 0XFF;				//포트 A(LED)를 입/출력으로 설정
    while (1)					//무한루프
    {
//가장자리 2개 OFF, 가운데 4개 ON
		/*
		del(1);						//del함수 이용>>sec에 1
		PORTA = 0xff;				//LED 8개 다 켜기
		del(1);						//del 함수 이용 >> sec 에 1
		PORTA = 0X3c;				//가운데 4개만 켜기
		*/

//1.LED를 왼쪽 4개는 켜고 오른쪽 4개는 끄기
		/*
		PORTA = 0xf0;		//LED 왼쪽 4개만 켜기
		del(1);				//del 함수를 이용해 딜레이
		PORTA = 0x0f;		//LED 왼쪽4개 끄고 오른쪽 4개 켜기
		del(1);				//del함수로 딜레이
		*/
//2.LED를 1칸씩 건너가면서 켜기
		
		PORTA = 0x01;				//LED 오른쪽 1개만 켜기
		for(int i = 0 ; i<8 ; i++){		//for 문을 이용한 반복문 사용 >> 변수 i를 이용해 8번 반복
			PORTA = 1<<i;		//LED를 1비트씩 왼쪽으로 쉬프트
			del(1);			//del 함수로 딜레이
		}				//for 문 종료
		
//3.LED를 내가 원하는 임의의 형태로 표현해 보기
/*
	char LED[5] = {0xff, 0x7e, 0x3c, 0x18, 0x00};	//LED라는 이름의 배열. 각각 LED를 얼마나 킬 것인지에 대한 값
	for (int i = 0 ; i<5 ; i++){	//for 문을 사용하여 5번 반복
		del(1);		//del 함수로 딜레이
		PORTA = LED[i];		//PORTA에 LED[i](i는 0부터 1씩증가)의 값을 넣어줌
		}		//반복문 종료
*/
    }
 return 0;
}