[아두이노] 4자리 FND 사용해보기



안녕하세요 디바이스마트 대짜이찐입니다.
오늘은 4자리 FND에 대해서 포스팅하겠습니다.


FND(Flexible Numeric Display)는 7-세그먼트(Segment)라고도 부르는 제품입니다.

이전에 포스팅한 1자리 FND와 다르게
https://devicemart.blogspot.com/2019/05/7-fnd.html

4자리 FND는 12핀으로 구성되어 있으며,
기존 1자리 FND와 같이 a에서 dp까지 8개의 핀이 있으며
추가적으로 1~4자리 까지 자리수를 제어하는데
사용하는 COM1~4까지 4개의 핀을 합해 총 12개의 핀이 있습니다. 




도트 매트릭스와 마찬가지로  잔상효과로 각 자리수의 숫자를 빠르게
on/off하면서 동시에 출력되는것처럼 보입니다.

1자리 FND의 경우 공통 애노드(+) 혹은 공통 캐소드(-)핀이 있었지만,
4자리 FND에서는 공통 단자가 각 자리별로 1개씩 있습니다.

4자리 FND의 각 자리 입니다.


공통 애노드(+) 타입입니다. 공통단자(Common)에 HIGH 신호를 주고,
원하는 단자에 LOW신호를 주어서 LED를 ON 시킬수 있습니다.


공통 캐소드(-) 타입입니다. 공통단자(Common)에 LOW 신호를 주고,
원하는 단자에 HIGH신호를 주어서 LED를 ON 시킬수 있습니다.


공통 캐소드(Cathode)
숫자
a
b
c
d
e
f
g
dp
16진수
0
1
1
1
1
1
1
0
0
0xFC
1
0
1
1
0
0
0
0
0
0x60
2
1
1
0
1
1
0
1
0
0xDA
3
1
1
1
1
0
0
1
0
0xF2
4
0
1
1
0
0
1
1
0
0x66
5
1
0
1
1
0
1
1
0
0xB6
6
1
0
1
1
1
1
1
0
0xBE
7
1
1
1
0
0
1
0
0
0xE4
8
1
1
1
1
1
1
1
0
0xFE
9
1
1
1
1
0
1
1
0
0xF6

공통 캐소드에서  숫자0은 a를 시작으로 했을때,
2진수로는 1111 1100이고 이 숫자를 16진수로 변환하면 0xFC입니다.

아래 예제는 캐소드 타입 4자리 수 FND를 출력해보는 예제입니다.

준비물: 아두이노 우노, 220Ω x 8EA, 점퍼선, 브레드 보드, 4자리 FND(cathode타입)


/*
7-segment(FND)
4 Digit 7-세그먼트(FND) 예제
공통 캐소드 타입
www.mcuboard.com
*/

// 0~9까지 숫자를 배열로 초기화
byte num[10][8] =
 { 1,1,1,1,1,1,0,0 },    // 0
 { 0,1,1,0,0,0,0,0 },    // 1
 { 1,1,0,1,1,0,1,0 },    // 2
 { 1,1,1,1,0,0,1,0 },    // 3
 { 0,1,1,0,0,1,1,0 },    // 4
 { 1,0,1,1,0,1,1,0 },    // 5
 { 1,0,1,1,1,1,1,0 },    // 6
 { 1,1,1,0,0,0,0,0 },    // 7
 { 1,1,1,1,1,1,1,0 },    // 8
 { 1,1,1,0,0,1,1,0 }     // 9
};
int delay_time = 2; // 지연시간 2ms로 초기화

// 자리수,  제어 핀 아두이노와 초기화
int digit_pin[4] = {10,11,12,13};
int segment_pin[8] = {2,3,4,5,6,7,8,9};

void setup()
{
 for(int i=0;i<4;i++) // 자리수 1~4핀 출력모드로 세팅
 {
   pinMode(digit_pin[i],OUTPUT);
 }
 for(int i=0;i<9;i++) // 세그먼트 1~8핀 출력모드로 세팅
 {
   pinMode(segment_pin[i],OUTPUT);
 }
}

void loop()
{
   show_num(9,1);
   show_num(8,2);
   show_num(7,3);
   show_num(6,4);
}

void show_num(int number, int digit) // 사용자 정의 함수 show_num 정의
{
 // 4자리 중 해당하는 자릿수의 선택 핀만 LOW로 설정
 for(int i = 0; i < 4; i++)
 {
  if(i + 1 == digit)
  {
    digitalWrite(digit_pin[i], LOW);
  }
  else
  {
    digitalWrite(digit_pin[i], HIGH);
  }
 }

 // 세그먼트에서 숫자 출력
 // a,b,c,d,e,f,g,dp 8개의 세그먼트를 배열에 맞춰서 on/off
 for (int i=0; i < 8; i++)
 {
  digitalWrite(segment_pin[i], num[number][i]);
 }
 delay(delay_time); // 잔상이 남아야 하므로 지연시간  
}

show_num()함수는 사용자 정의함수로 임의로 만든 함수입니다.
함수 호출로 number에는 0~9까지 원하는 숫자를,
digit에는 1~4까지 원하는 자리수를 넣어,
원하는 자리수의 숫자를 출력 할 수 있습니다.
아래링크에 관련 부품을 구매하실 수 있습니다.

-아두이노

-FND

감사합니다.

댓글 쓰기

0 댓글