본문 바로가기

피지컬컴퓨팅/아두이노

FND 4 digit 7 segment 활용하기

반응형

FND는 Flexible Numeric Display(가변숫자표시기)의 약자이며 LED 표시기로 숫자를 표시하는 부품으로 흔히 세븐세그먼트(7-Segment)라고 합니다. 보통 아라비아 숫자만 표시하지만 오른쪽 아래에 소수점(DP)을 포함하고 있는 부품도 있습니다. 간단한 숫자를 나타내는데에 많이 활용되며 계산기, 엘리베이터, 전자시계에서 흔히 볼 수 있는 부품입니다.

.

7세그먼트는 발광할 수 있는 7개의 막대를 가지고 있으며 그 중 해당되는 막대를 조광하여 숫자를 표시하게되는데 다음은 일반적으로 각 숫자에 해당하는 7세그먼트 표시 장치의 모습입니다.

출처 https://ko.wikipedia.org/wiki/7%EC%84%B8%EA%B7%B8%EB%A8%BC%ED%8A%B8_%ED%91%9C%EC%8B%9C_%EC%9E%A5%EC%B9%98

 

출처 https://hackerjacob.tistory.com/145

 

Common핀으로 6, 8, 9 12번 핀이 사용되며 이 핀으로 4개의 FND 중 하나만 선택이 되어서 8 LED 제어 신호를 받게 되고 1, 2, 3, 4, 5, 7, 10, 11번 핀은 8개의 LED를 제어해서 문자를 표기할 수 있게 됩니다.

회로도

출처 https://kocoafab.cc/tutorial/view/93

 

 

- 연결시 220옴을 함께 연결할 것을 권장합니다!

소스코드

/*
  네 자리 7세그먼트 연결하기
*/

int position_pin[] = {1,2,3,4};               //4자리 결정 핀
int segment_pin[] = {5,6,7,8,9,10,11,12};     //세그먼트 제어 핀
const int delayTime = 5;                      //일시정지 시간

//0 ~ 9를 표현하는 세그먼트 값
byte data[] = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE4, 0xFE, 0xE6};

void setup() {
  //4자리 결정 핀 출력용으로 설정
  for(int i = 0; i < 4; i++) {
     pinMode(position_pin[i], OUTPUT);
  }

  //세그먼트 제어 핀 출력용으로 설정
  for(int i = 0; i < 8; i++) {
    pinMode(segment_pin[i], OUTPUT);
  }
}

void loop() {
  show(1,1);                //첫 번째 자리, 1출력
  delay(delayTime);         //0.005초 일시정지
  show(2,2);                //두 번째 자리, 2출력
  delay(delayTime);         //0.005초 일시정지
  show(3,3);                //세 번째 자리, 3출력
  delay(delayTime);         //0.005초 일시정지
  show(4,4);                //네 번째 자리, 4출력
  delay(delayTime);

  countNum();                //countNum함수 호출
}

void show(int position, int number) {
  //4자리 중 원하는 자리 선택
  for(int i = 0; i < 4; i++) {
    if(i + 1 == position){
      digitalWrite(position_pin[i], LOW);
    } else {
      digitalWrite(position_pin[i], HIGH);
    }
  }

  //8개 세그먼트를 제어해서 원하는 숫자 출력
  for(int i = 0; i < 8; i++){
     byte segment = (data[number] & (0x01 << i)) >> i;
     if(segment == 1){
       digitalWrite(segment_pin[7 - i], HIGH);
     } else {
       digitalWrite(segment_pin[7 - i], LOW);
     }
  }
}

/*
 0001부터 하나씩 카운트하는 함수
*/
void countNum() {
  for(int i = 0; i < 10; i++) {
    for(int j = 0; j < 10; j++) {
      for(int k = 0; k < 10; k++) {
        for(int l = 0; l < 10; l++) {
          show(1,i);
          delay(delayTime);
          show(2,j);
          delay(delayTime);
          show(3,k);
          delay(delayTime);
          show(4,l);
          delay(delayTime);
        }
      }
    }
  }
  delay(1000);
}

 

[결과]

 

반응형