*키트는 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;
}
'AVR 기초 > LED 제어하기' 카테고리의 다른 글
[AVR 기초] LED로 1~255 표현하기 (0) | 2020.07.12 |
---|---|
[AVR 기초] LED로 X-MAS 트리 만들기2 (0) | 2020.07.12 |
[AVR 기초]LED로 X-MAS 트리 만들기 (0) | 2020.07.12 |
[AVR 기초]delay 헤더파일 간단히 만들어보기 (0) | 2020.07.12 |
LED 켜고 끄기 (0) | 2020.07.12 |