7 Segment FND

     FND는 사용하여 숫자를 만드는 프로그램입니다. FND는 간단한 숫자를 표현하기 위하여 많이 사용하는 소자로 0 - 9 까지 숫자를 표현 할 수 있어, 숫자를 표현 할 수 있는 다양한 표시기를 만들 수 있다.



PIC16F687을 사용하기 위한 기본 회로

FND를 사용하여 숫자를 만들기 위하여 위의 회로와 같이 꾸미고 스위치를 누름에 따라 다른 기능을 할 수 있도록 코딩할 수 있다.


Anode Common (+ 공통)

     Anode Common은 FND의 위의 그림과 같이 8개 LED의 양극을 공통으로 사용하도록 설계 한 것으로, 공통선인 3/8번 핀을 주로 전원의 Vcc에 연결하여 사용한다.


Cathode Common (- 공통)



     Cathode Common은 FND의 위의 그림과 같이 8개 LED의 음극을 공통으로 사용하도록 설계 한 것으로, 공통선인 3/8번 핀을 주로 전원의 Gnd에 연결하여 사용한다.

     FND는 위 그림과 같이 FND 내부에 있는 8개의 LED의 음극을 공통으로 사용하는 Cathode Common FND(왼쪽)와 LED의 양극을 공통으로 사용하는 Anode Common FND(오른쪽)가 있다. 사용하려는 FND는 주변회로와 상황에 맞는 것을 선택하여야 한다. 일반적으로 Anode Common FND를 많이 사용한다.

     FND를 사용하기 위하여 아래 그림을 참고하면 쉽게 이해 할 수 있다. FND의 전원핀으로 사용하는 3/8 번핀을 5V(Anode Common)또는 0V(Vathode Common)에 얀결하고 (그림에서는 Anode Common을 사용하였기에 +5V에 연결)나머지 핀들을 저항과 스위치로 연결하고 스위치를 0V에 연결하고 어느 스위치를 연결하느냐에 따라 FND의 LED를 선택적으로 켤수 있다. 이러한 방법으로 숫자를 조합할 수 있고 스위치사용하여 그 숫자를 만들어 낼 수 있다.



스위치를 사용한 FND 사용방법
(그림을 마우스로 클릭하면 간단한 동영상을 볼 수 있다)


     아래 두 그림은 스위치의 눌림에 따라 숫자 2와 6이 FND에 어떻게 표현되는지를 알려주는 그림이다. 숫자 2를 표현하기위하여 스위치 a,b,d,e,g 를 켜면(닫으면) FND의 a,b,d,e,g에 해당하는 LED가 켜지게 되고 2의 모양이 나타나게 된다.

         
7 Segment FND의 구조


     위그림의 오른쪽은 숫자 6을 나타내기위하여 스위치를 어떻게 동작하여야 하는지를 보여 주는 그림으로 숫자 6를 표현하기위하여 스위치 a,c,d,e,f,g 를 켜면(닫으면) FND의 a,c,d,e,f,g에 해당하는 LED가 켜지게 되고 6의 모양이 나타나게 된다.

     FND를 사용하여 숫자를 표시하기위하여 위의 그림림과 같이 스위치를 사용할 수 있지만 수동으로 동작하여야 하므로 매우 번거롭다. 따라서 스위치대신 Microcontroller인 PIC16F18345의 포트 C를 사용하여 8개의 신호를 0V (스위치 On에 해당) 또는 5V (스위치 Off에 해당)를 프로그램으로 컨트롤 하여 FND를 동작시킬 수 있다. FND를 PIC16F18345를 사용하여 동작하기위하여 아래 그림과 같이 연결하고 코딩하여 숫자를 FND에 표현 할 수 있다.


PIC16F18345를 사용한 FND 연결방법 (PIC Pin 위치 무시)


     아래 그림은 위의 회로를 Breadboard에 꾸민 것으로 FND의 저항에 연결된 선(검정, 갈색,...보라)은 PIC16F18345의 C포트에 연결된 선(검정, 갈색,...보라)과 연결된 것이다. 예로 FND의 6번에 연결된 저항과 직렬로 연결된 갈색 선은 PIC16F18345의 15번 핀과 연결된 것이다. 그리고 FND 5번에 연결관 보라색 선은 PIC의 9번에 연결된 보라색 선으로 PIC의 9번과 연결되어있다


PIC16F18345을 사용하기 위하여 Breadboard에 꾸민 모양

     FND의 숫자에 해당하는 핀들의 출력 신호에 따른 출력 값을 아래 표에 정리하였다.
Number RC 7 RC 6 RC 6 RC 4 RC 3 RC 2 RC 1 RC 0 Hex
FND dp g f e d c b a -
0 1 1 0 0 0 0 0 0 0xC0
1 1 1 1 1 1 0 0 1 0xF9
2 1 0 1 0 0 1 0 0 0xA4
3 1 0 1 1 0 0 0 0 0xB0
4 1 0 0 1 1 0 0 1 0x99
5 1 0 0 1 0 0 1 0 0x92
6 1 0 0 0 0 0 1 0 0x82
7 1 1 0 1 1 0 0 0 0xD8
8 1 0 0 0 0 0 0 0 0x80
9 1 0 0 1 0 0 0 0 0x90
Anode Common FND를 사용한 표



PIC16F18345와 FND를 빵판에 연결하고 0을 표시한 모습


     PIC16F18345을 사용하여 Anode Common FND을 다루기 위한 프로그램은 다음과 같다. 위의 표의 16진수 값을 사용하여 프로그램 하고 스위치를 누르때 마다 숫자가 증가 하도록 하였다.

//**************************************************************************************************
// 스위치를 읽어 FND 켜기
//**************************************************************************************************  	
#include  <16f18345.h>					//* PIC16F18345 사용

#fuses    HS							//* 4 MHz:XT, 4 MHz 이상: HS
#use      delay (clock = 20000000)			//* 사용한 크리스탈

#define	IN_SW		input (PIN_B7)		//* 스위치 RB7에 연결

void main (void)
{	int8 idx ;
	int1 bitSW ;
	int8 fnd_data [15] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xD8, 0x80, 0x90} ; //* FND Data 0 ~ 9
 
	set_tris_c (0x00) ;					//* C 포트를 출력으로
	output_c (0xFF) ;					//* C 포트 출력을 0xFF 로, 포트 C가 모두 high로 FND 모두 꺼짐

	while (1) {
		if (IN_SW == 0) {				//* 스위치가 눌렸으면
			delay_ms (1) ;				//* 1 ms 기다림
			output_c (fnd_data [idx]) ;        //* 배열에 맞는 숫자를 켬
			idx ++ ; if (idx > 9) idx = 0 ;
			while (IN_SW == 0) ;			//* 스위치 땔 때까지 대기
		}
	} 
}     
//**************************************************************************************************     



FND 를 사용하여 숫자를 표시하는 모습