7-세그먼트 (7-Segment)는 7개의 세그먼트와 도트로 구성되어 숫자(0부터 9까지)나 문자를 표시할 수 있는 디지털 출력 모듈입니다.
문자는 대문자 A, 소문자 b, 대문자 C, 소문자 d, 대문자 E, 대문자 F등 7개의 세그먼트로 이용하여 표시할 수 있습니다. 자세한 설명은 아래에서 알려드리겠습니다.
7-세그먼트는 양극(VCC)을 공통 핀으로 갖는 에노드형(Common Anode type)과 음극(GND)을 공통 핀으로 갖는 게소드형(Common Cathode Type)등 2가지 타입이 있습니다.
제가 가지고 있는 7-세그먼트는 음극(GND)을 공통 핀으로 갖는 게소드형(Common Cathode type)입니다.
다른 7-세그먼트와 다르게 상하로 핀이 있는게 아니고 좌우로 핀이 나와 있습니다. 그리고 크기가 작은 소형 7-세그먼트입니다.
다음은 대부분이 알고있는 일반적인 7-세그먼트입니다.
그래서 일반적인 7-세그먼트와 달라서 직접 7-세그먼트 도형을 그렸습니다. 저와 같은 것을 가지고 있으신 분은 참조하시기 바랍니다.
7-세그먼트는 도트를 포함하여 8개의 LED(a, b, c, d, e, f, g, dp)가 사용됩니다. 그래서 LED 사용처럼 220옴 저항을 사용해야 합니다.
음극(GND)을 공통 핀으로 갖는 게소드형(Common Cathode type)이기 때문에 GND에 220옴 저항을 연결하여 아두이노 우노 보드의 GND에 연결해야 합니다.
디지털 핀 출력 제어 - 7-Segment LED 숫자 표시
1. 소형의 7-세그먼트는 작아서 브레드보드의 가운데로 연결할 수 없습니다. 그래서 M-F 점퍼 와이어로 연결합니다.
7-세그먼트의 8개 LED(a, b, c, d, e, f, g, dp)와 2개의 GND에 M-F 점퍼 와이어를 꼽습니다.
모듈마다 다를 수 있지만 GND는 소형의 7-세그먼트는 하나만 연결해도 정상적으로 동작합니다.
a: 흰색 M-F 점퍼 와이어, b: 회색 M-F 점퍼 와이어, c: 보라색 M-F 점퍼 와이어, d: 빨간색 M-F 점퍼 와이어, e: 주황색 M-F 점퍼 와이어, f: 녹색 M-F 점퍼 와이어, g: 노란색 M-F 점퍼 와이어, dp: 파란색 M-F 점퍼 와이어, GND: 갈색 M-F 점퍼 와이어, 검은색 M-F 점퍼 와이어
2. 아두이노 우노 보드의 디지털 핀 왼쪽에 있는 GND로 새로운 검은색 M-M 점퍼 와이어를 꼽습니다.
7-세그먼트의 8개 LED(a, b, c, d, e, f, g, dp)와 연결된 M-F 점퍼 와이어를 디지털 핀에 연결합니다.
2: 흰색 M-F 점퍼 와이어, 3: 회색 M-F 점퍼 와이어, 4: 보라색 M-F 점퍼 와이어, 5: 파란색 M-F 점퍼 와이어, 6: 노란색 M-F 점퍼 와이어, 7: 녹색 M-F 점퍼 와이어, 8: 주황색 M-F 점퍼 와이어, 9: 빨간색 M-F 점퍼 와이어
3. 브레드보드에 아두이노 우노 보드 GND와 7-세그먼트의 GND와 연결된 점퍼 와이어를 연결합니다.
7-세그먼트의 GND와 연결된 검은색 M-F 점퍼 와이어를 c열 45번에 꼽고 220옴 저항을 b열 40번과 45번에 꼽습니다.
7-세그먼트의 GND와 연결된 갈색 M-F 점퍼 와이어를 e열 47번에 꼽고 220옴 저항을 d열 40번과 47번에 꼽습니다.
아두이노 우노 보드 GND와 검은색 M-M 점퍼 와이어를 a열 40번에 꼽습니다.
4. 전역에 1차원 배열로 7-세그먼트의 8개 LED(a, b, c, d, e, f, g, dp)를 제어하기 위해 디지털 핀 번호를 선언합니다. (a: 2, b: 3, c: 4, dp: 5, f: 6, g: 7, e: 8, d: 9)
7-세그먼트에 숫자 0을 표시하기 위해 8개 LED(a, b, c, d, e, f, g, dp)의 디지털 신호를 선언합니다.
디지털 신호의 LOW는 숫자 0, HIGH는 1입니다.
// 디지털 핀(a, b, c, dp, f, g, e, d)
byte ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9};
byte pinCount = 8;
// 숫자 0
byte segmentDigit[] = {1, 1, 1, 0, 1, 0, 1, 1};
5. setup()함수에서 for문을 이용하여 디지털 핀의 모드를 출력 모드로 설정합니다.
void setup() {
for (int pinIndex = 0; pinIndex < pinCount; pinIndex++) {
pinMode(ledPins[pinIndex], OUTPUT);
}
}
6. loop()함수에서 for문으로 디지털 핀에 디지털 신호(LOW/HIGH)를 호출하여 7-세그먼트의 8개 LED(a, b, c, d, e, f, g, dp)에 불을 켜고 끕니다.
void loop() {
for (byte pinIndex = 0; pinIndex < pinCount; pinIndex++) {
digitalWrite(ledPins[segmentIndex], segmentDigit[pinIndex]);
}
}
7. 컴파일하고 업로드합니다. 잠시 후 7-세그먼트의 LED에 불이 들어오면서 숫자 0이 표시됩니다.
디지털 핀 출력 제어 - 7-Segment LED 숫자 카운트
1. 7-세그먼트에 숫자 0부터 9까지와 도트를 표시하기 위해 2차원 배열로 8개 LED(a, b, c, d, e, f, g, dp)의 디지털 신호를 선언합니다.
// 디지털 핀(a, b, c, dp, f, g, e, d)
byte ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9};
byte pinCount = 8;
// 숫자 0~9
byte segmentDigit[11][8] = {
{1, 1, 1, 0, 1, 0, 1, 1}, // 0
{0, 1, 1, 0, 0, 0, 0, 0}, // 1
{1, 1, 0, 0, 0, 1, 1, 1}, // 2
{1, 1, 1, 0, 0, 1, 0, 1}, // 3
{0, 1, 1, 0, 1, 1, 0, 0}, // 4
{1, 0, 1, 0, 1, 1, 0, 1}, // 5
{1, 0, 1, 0, 1, 1, 1, 1}, // 6
{1, 1, 1, 0, 0, 0, 0, 0}, // 7
{1, 1, 1, 0, 1, 1, 1, 1}, // 8
{1, 1, 1, 0, 1, 1, 0, 1}, // 9
{0, 0, 0, 1, 0, 0, 0, 0} // dot
};
2. 7-세그먼트에서 숫자를 표시하기 위해 함수를 선언합니다.
숫자 표시를 위한 2차원 배열에서 숫자와 맞는 디지털 신호 배열을 가져와 for문으로 디지털 핀에 디지털 신호(LOW/HIGH)를 호출하여 7-세그먼트의 8개 LED(a, b, c, d, e, f, g, dp)에 불을 켜고 끕니다.
void segmentDigitWrite(byte digit) {
for (byte pinIndex = 0; pinIndex < pinCount; pinIndex++) {
digitalWrite(ledPins[pinIndex], segmentDigit[digit][pinIndex]);
}
}
3. loop()함수에서 숫자 표시를 위한 2차원 배열 전체를 for문으로 호출하여 7-세그먼트에 숫자를 표시하고 delay()함수로 1초간 대기하게 합니다.
void loop() {
for (byte index = 0; index < 11; index++) {
segmentDigitWrite(index);
delay(1000);
}
}
4. 컴파일하고 업로드합니다. 잠시 후 7-세그먼트의 LED에 불이 들어오면서 숫자 0부터 9까지 그리고 도트가 1초마다 표시됩니다.
디지털 핀 출력 제어 - 7-Segment LED 문자 표시
1. 7-세그먼트에 문자(대문자 A, 소문자 b, 대문자 C, 소문자 d, 대문자 E, 대문자 F)를 표시하기 위해 2차원 배열로 8개 LED(a, b, c, d, e, f, g, dp)의 디지털 신호를 선언합니다.
// 영어문자 A, b, c, d, E, F
byte segmentAlphabet[6][8] = {
{1, 1, 1, 0, 1, 1, 1, 0}, // A
{0, 0, 1, 0, 1, 1, 1, 1}, // b
{1, 0, 0, 0, 1, 0, 1, 1}, // C
{0, 1, 1, 0, 0, 1, 1, 1}, // d
{1, 0, 0, 0, 1, 1, 1, 1}, // E
{1, 0, 0, 0, 1, 1, 1, 0} // F
};
2. 7-세그먼트에서 문자를 표시하기 위해 함수를 선언합니다.
문자 표시를 위한 2차원 배열에서 문자와 맞는 디지털 신호 배열을 가져와 for문으로 디지털 핀에 디지털 신호(LOW/HIGH)를 호출하여 7-세그먼트의 8개 LED(a, b, c, d, e, f, g, dp)에 불을 켜고 끕니다.
0: A, 1: b, 2: C, 3: d, 4: E, 5: F
void segmentAlphabetWrite(byte digit) {
for (byte pinIndex = 0; pinIndex < pinCount; pinIndex++) {
digitalWrite(ledPins[pinIndex], segmentAlphabet[digit][pinIndex]);
}
}
3. loop()함수에서 문자 표시를 위한 2차원 배열 전체를 for문으로 호출하여 7-세그먼트에 숫자를 표시하고 delay()함수로 1초간 대기하게 합니다.
void loop() {
for (byte index = 0; index < 6; index++) {
segmentAlphabetWrite(index);
delay(1000);
}
}
4. 컴파일하고 업로드합니다. 잠시 후 7-세그먼트의 LED에 불이 들어오면서 문자 1초마다 표시됩니다.