본문 바로가기

AVR 기초/FND 제어하기

[AVR 기초] FND 1씩 옮기기

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

 

FND란 7 세그먼트(7 Segment)는 7개의 획으로 숫자나 문자를 나타낼수 있는 표시장치입니다.

일반적으로 작고 단순한 구조를 가지기 때문에 전자시계, 게이지 또는 전자회로의 내부수치를 보여주는 곳에 주로 사용됩니다.

 

 

fnd 회로도

 

#include <avr/io.h>
#define F_CPU 16000000UL
#include <util/delay.h>

int main(void)
{
    /* Replace with your application code */
	 DDRC = 0xFF;																			//fnd 사용
	 DDRG = 0x0F;																			//fnd 자리 4개 사용
	 unsigned char fnd[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x27, 0x7f, 0x6f};	//fnd 0~9 까지 표현할 값
	 unsigned char fnd_pos = 0x01;															//자리수를 해줄 변수
    while (1) 
    {
		 for ( int i = 0; i < 10 ; i++)			//i = 0 부터 9까지
		 {
			 PORTG = fnd_pos;		//PORTG에 fnd_pos 값 저장
			 PORTC = fnd[i];		//PORTC에 fnd[i]값 저장
			 _delay_ms(1000);		//딜레이 약 1초
			 fnd_pos <<= 1;			//자리 한자리씩 쉬프트 
			 if (fnd_pos == 0x10)	//fnd_pos값이 0x10이라면
			 {
				 fnd_pos = 0x01;	//fnd_pos의 값 0x01로..
			 }
		 }
    }
}