*키트는 Atmega128A를 사용하였습니다*
- LED를 켜기 위해서는 1을 인가해야 합니다.(끄기 위해서는 0)
- 즉, LED에 해당하는 포트에 해당 비트에 1을 출력하여야 합니다.
- 포트에 1을 출력하려면
- DDRA의 해당 비트에 1을 입력하여 출력 상태로 만들고
- PORTA의 해당 비트에 1을 입력하면 됩니다.
코드는 다음과 같습니다.
#include <avr/io.h> //atmega 사용 헤더파일 선언
#define F_CPU 16000000 //클럭주기 설정
#include <util/delay.h> //util ->delay 헤더파일 사용 선언
void delay(int sec){ //delay 함수 사용 안할 시 delay 라는 이름의 함수 사용
volatile int j,k,l; //이 함수는 임의적으로 delay를 만들어줌(처리하는 시간을 이용)
for(j = 0; j< sec ; j++){ //변수 sec는 _delay_ms 사용시 입력받는 값 대신 넣어주는 값 ( 1 이면 _delay_ms(1000)
for(k = 0; k< 1000 ; k++){
for (l = 0; l<500;l++){
}
}
}
}
int main(void) //메인함수
{
DDRA = 0xff; //포트 A를 입출/력으로 사용하기 위해 선언.0xff는 0x<<HEX값을 사용한다는 의미. ff<= 15/15으로 다 사용한다는 의미.
//만약, 입력으로만 사용하고자 한다면 DDRx를 1로 출력으로 사용할 때는 1로 설정.
while (1) //반복문 while 사용. 1의 의미는 항상 참이라는 뜻으로 무한반복.
{
PORTA = 0x0F; //A를 출력<=0f 이기 때문에 오른쪽 4개만 LED ON
_delay_ms(1000); //딜레이를 1000만큼 줌.(_delay_ms(1000)==1초
//delay(1); //_dealy_ms를 사용하지 않을 시 사용
PORTA = 0xF0; //A를 출력<=f0 이기 때문에 왼쪽 4개 LED ON
_delay_ms(1000); //delay1000만큼 줌
//delay(1); //_dealy_ms를 사용하지 않을 시 사용
}
return 0; //메인함수가 끝날때, 0을 반환
}
//********************************************************//
// LED HEX 계산 >>> 16진수는 0~15까지 표현가능 //
// //
// LED [][][][] [][][][] //
// 8 4 2 1 / 8 4 2 1 >>더하면 15/15 //
// 15 == f 이므로 0xff //
//********************************************************//
클럭 주기를 설정해 주는 이유는 _dealy_ms 를 사용하려면 CPU의 클럭을 설정해 줘야 동작하기 때문입니다.
만약 F_CPU를 1MHz로 설정한다면 더 빠른속도로 동작하게 됩니다.
'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 기초]LED를 다양하게 켜보기 (0) | 2020.07.12 |
[AVR 기초]delay 헤더파일 간단히 만들어보기 (0) | 2020.07.12 |