*키트는 Atmega128A를 사용하였습니다*
#include <avr/io.h>
#define F_CPU 16000000UL
#include <util/delay.h>
unsigned char fnd[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x27, 0x7f, 0x6f};
unsigned char fnd_pos[4] = {0x01, 0x02, 0x04, 0x08} ;
void fourth(int x){ //fnd의 4번째 자리를 나타내는 함수
PORTG = fnd_pos[3]; //PORTG에 fnd_pos[3]의 값
PORTC = fnd[x]; //PORTC에 main 함수에서 x의 값을 받아 fnd[x] 저장
}
void third(int y){ //fnd의 3번째 자리를 나타내는 함수
PORTG = fnd_pos[2]; //PORTG에 fnd_pos[2]의 값
PORTC = fnd[y]; //PORTC에 main 함수에서 y의 값을 받아 fnd[y] 저장
}
void second(int o){ //fnd의 2번째 자리를 나타내는 함수
PORTG = fnd_pos[1]; //PORTG에 fnd_pos[1]의 값
PORTC = fnd[o]; //PORTC에 main 함수에서 o의 값을 받아 fnd[o] 저장
}
void first(int p){ //fnd의 1번째 자리를 나타내는 함수
PORTG = fnd_pos[0]; //PORTG에 fnd_pos[0]의 값
PORTC = fnd[p]; //PORTC에 main 함수에서 p의 값을 받아 fnd[p] 저장
}
int main(void) //main 함수
{
DDRC = 0xff; //fnd 다 사용
DDRG = 0x0f; //fnd자리 4자리 다 사용
while (1)
{
fourth(0); //fourth, third, second, first 각각의 함수에 0을 넣어줘서 모든 fnd에 0출력
third(0);
second(0);
first(0);
for (int x = 0 ; x <10 ; x++){ //x=0, x<10만큼 반복
for (int y = 0 ; y < 10; y++){ //x=0, x<10만큼 반복
for (int o = 0 ; o < 10; o++){ //x=0, x<10만큼 반복
for (int p = 0 ; p < 10 ; p++){ //x=0, x<10만큼 반복
for (int sec = 0 ; sec < 500 ; sec++)//sec가 0부터 1씩 증가해 499가 될때까지 반복
{
first(p); //첫번째자리
_delay_ms(1); //0.001 딜레이
second(o); //두번째 자리
_delay_ms(1); //0.001 딜레이
third(y); //세번째 자리
_delay_ms(1); //0.001 딜레이
fourth(x); //네번째 자리
_delay_ms(1); //0.001 딜레이
}
}
}
}
}
}
return 0 ;
}
'AVR 기초 > FND 제어하기' 카테고리의 다른 글
[AVR 기초] FND 0~9까지 나타낸 후 한칸씩 옮겨가기 (0) | 2020.07.12 |
---|---|
[AVR 기초] FND 1씩 옮기기 (0) | 2020.07.12 |