펭킹 2024. 7. 19. 15:38
const int segmentPins[] = {2, 3, 4, 5, 6, 7, 8, 9};

// 숫자 0부터 9까지를 7세그먼트 디스플레이에 표시하기 위한 비트 패턴
unsigned char LED_7[] = {
  0x3F, // 0
  0x06, // 1
  0x5B, // 2
  0x4F, // 3
  0x66, // 4
  0x6D, // 5
  0x7D, // 6
  0x07, // 7
  0x7F, // 8
  0x6F  // 9
};

// 숫자를 입력받아 해당하는 7세그먼트 비트 패턴을 반환하는 함수
unsigned char LED_7seg(char c) {
  if ((c >= '0') && (c <= '9')) {
    return LED_7[c - '0'];
  }
  return 0; // 잘못된 입력에 대한 기본값
}

// 비트 패턴을 사용하여 7세그먼트 디스플레이의 핀을 제어하는 함수
void display7Seg(unsigned char pattern) {
  for (int i = 0; i < 8; i++) {
    digitalWrite(segmentPins[i], (pattern >> i) & 0x01); // 패턴의 비트를 세그먼트 핀에 적용
  }
}

void setup() {
  // 각 핀을 출력으로 설정
  for (int i = 0; i < 8; i++) {
    pinMode(segmentPins[i], OUTPUT);
  }
}

void loop() {
  // 숫자 0부터 9까지를 순차적으로 표시
  for (char c = '0'; c <= '9'; c++) {
    unsigned char pattern = LED_7seg(c); // 숫자에 해당하는 비트 패턴 가져오기
    display7Seg(pattern); // 7세그먼트 디스플레이에 비트 패턴 출력
    delay(1000); // 1초 지연
  }
}

 

 

7세그먼트에는 애노드 타입과 캐소드 타입이 있는데, 애노드 타입은 데이터시트 상 com이나 그라운드로 연결 되고, 캐소드 타입은 vcc로 연결 된다.

그래서 서로 반대되는 성질을 가지고, 현재 실습의 세븐세그먼트는 캐소드 타입으로 신호를 주면 해당 led가 켜지는식으로 동작한다.