#define F_CPU 16000000UL // 클럭값 설정
#include <avr/io.h> //avr 헤더 설정
#include <util/delay.h> //util/delay 헤더 설정
#include <avr/interrupt.h> // avr/interrupt 헤더 설정
unsigned char fnd[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x27, 0x7f, 0x6f}; //fnd 0~9
#include <avr/io.h> //avr 헤더 설정
volatile int i = 0; //정수 i설정
ISR(INT0_vect){ //인터럽트 이벤트 발생
i++; // i를 1씩 증가
if(i==4) i=0; // 만약 i가 4와 같으면 i는 0이다,
}
int main(void) // 프로그램 작성 시작
{
/* Replace with your application code */ //??
DDRA=0xff; //PA0~7 전체 OUTPUT 선언
DDRC=0xff; //PC0~7 전체 OUTPUT 선언
DDRB=0xff; //??
DDRD=0x00; //PA0~7 전체 INPUT 선언
EICRA=0x03; //인터럽트 INT0 사용 선언
EICRB=0x00; //인터럽트 INT4~7 미사용 선언
EIMSK=0x01; //인터럽트 INT0 사용 선언
PORTB=0xff; //high가 되야 콘단자 작동
sei(); // 인터럽트 발생을 전역적으로 허용
while (1) //??
{
if(i==1){ //만약 i가 1일 경우
PORTA=fnd[1]; //?
PORTC=~0x01; //?
}
else if(i==2){ //만약 i가 2 아닌 경우
PORTA=fnd[2]; //??
PORTC=~0x02; //??
}
else if(i==3){ //만약 i가 3 아닌 경우
PORTA=fnd[3]; //??
PORTC=~0x03; //??
}
else{
PORTA=fnd[0]; //??
PORTC=~0x00; //??
}
}
}
AVR 프로그램으로 학교 과제를 받았었는데 제가 잘못된 부분이나 물음표 부분에 답좀 알려주시면 감사하겠습니다.
PORTA에는 FND 배열에 저장된 값을 출력합니다.
예를 들어 PORTA = fnd[1] 이면 PORTA는 0x06값이 출력됩니다.
회로 결선에 따라서 0x06이 FND의 각 세그먼트가 켜지게 됩니다.
소스코드 참조 : fnd[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x27, 0x7f, 0x6f}; //fnd 0~9
PORTC = ~0x01은 PORTC에 0x01의 inverting(0은 1로 1은 0으로)된 값 0xFE를 출력하라는 것입니다.
PORTC 또한 FND의 어느 회로와 연결되어 있겠지요..