1. 7세그먼트 기본 사용법 알아보기
▶ 7세그먼트(seven-segment)란?
: 숫자나 문자를 표시하는 일곱 개의 LED와 점을 표시하는 한 개의 LED로 구성된다.
- 공통 단자가 양극인 유형: 전원(5V)을 공통으로 사용하므로, 7세그먼트의 각 단자에 LOW 신호를 줘야 LED가 켜진다.
- 공통 단자가 음극인 유형: 접지(GND)를 공통으로 사용하므로, 7세그먼트의 각 단자에 HIGH 신호를 줘야 LED가 켜진다.
▶ 7세그먼트(seven-segment)의 작동 원리
![](https://blog.kakaocdn.net/dn/ctNoJc/btsrDGm3yRs/ob4XXWipCDxvmp95I0H38K/img.png)
- A~G 단자: 숫자나 문자를 표시하는 7개의 LED를 제어하는 단자
- DP: 점을 표시하는 LED를 제어하는 단자
--> 7세그먼트는 각 단자를 제어해 LED를 켜고 끔으로써 숫자를 표현한다. 예를 들어, B단자와 C단자를 제어해 LED를 켜면 숫자 1을 표시할 수 있다.
![](https://blog.kakaocdn.net/dn/bsxhfj/btsrBnhKZ4l/QF1KnaidEgFFSktNJT5Cfk/img.png)
Do it! 실습 11-1. 7세그먼트로 숫자 출력하기
- 공통 단자가 음극인 유형
![](https://blog.kakaocdn.net/dn/cp7u5m/btsrCRbkro1/oTB6eChi2uwRmdXD0jMJI0/img.png)
//아두이노의 디지털 핀과 7세그먼트 연결
#define A 4
#define B 5
#define C 12
#define D 11
#define E 10
#define F 3
#define G 2
#define DP 13
void setup(){
//7세그먼트와 연결된 디지털 핀을 출력 모드로 설정
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
pinMode(DP, OUTPUT);
}
void loop(){
//7세그먼트로 0부터 9까지 숫자 출력
number0(); delay(1000);
number1(); delay(1000);
number2(); delay(1000);
number3(); delay(1000);
number4(); delay(1000);
number5(); delay(1000);
number6(); delay(1000);
number7(); delay(1000);
number8(); delay(1000);
number9(); delay(1000);
}
void number0(){
digitalWrite(A, HIGH); //ON: LOW
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, LOW);
digitalWrite(DP, LOW);
}
void number1(){
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
digitalWrite(DP, LOW);
}
void number2(){
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
digitalWrite(DP, LOW);
}
void number3(){
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
digitalWrite(DP, LOW);
}
void number4(){
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
digitalWrite(DP, LOW);
}
void number5(){
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
digitalWrite(DP, LOW);
}
void number6(){
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
digitalWrite(DP, LOW);
}
void number7(){
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
digitalWrite(DP, LOW);
}
void number8(){
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
digitalWrite(DP, LOW);
}
void number9(){
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, LOW);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
digitalWrite(DP, LOW);
}
Do it! 실습 11-2. 7세그먼트의 스케치 코드 개선하기
: 7세그먼트의 유형과 상관없이 스케치 코드의 변경을 최소화할 수 있게 개선한다.
- 배열로 표현
![](https://blog.kakaocdn.net/dn/oDtS0/btsrErXwloW/VVIB9VKw2wGlf8kS4ZDg21/img.png)
//아두이노의 디지털 핀과 7세그먼트 연결
#define A 4
#define B 5
#define C 12
#define D 11
#define E 10
#define F 3
#define G 2
#define DP 13
//배열로 표현
int digit[10][8]={
// A, B, C, D, E, F, G, DP
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, 1, 0, 1, 1, 0 // 9
};
void setup(){
//7세그먼트와 연결된 디지털 핀을 출력 모드로 설정
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
pinMode(DP, OUTPUT);
}
void displayDigit(int*digit);
void loop(){
//7세그먼트로 0~9까지 숫자 출력
displayDigit(digit[0]); delay(1000);
displayDigit(digit[1]); delay(1000);
displayDigit(digit[2]); delay(1000);
displayDigit(digit[3]); delay(1000);
displayDigit(digit[4]); delay(1000);
displayDigit(digit[5]); delay(1000);
displayDigit(digit[6]); delay(1000);
displayDigit(digit[7]); delay(1000);
displayDigit(digit[8]); delay(1000);
displayDigit(digit[9]); delay(1000);
}
//7세그먼트를 숫자로 표시하는 함수 displayDigit
void displayDigit(int*digit){ //digit 2차원 배열의 한 행을 매개변수로 받음
digitalWrite(A, digit[0]); //digit 1차원 배열의 0번째 열 값을 A로 출력
digitalWrite(B, digit[1]);
digitalWrite(C, digit[2]);
digitalWrite(D, digit[3]);
digitalWrite(E, digit[4]);
digitalWrite(F, digit[5]);
digitalWrite(G, digit[6]);
digitalWrite(DP, digit[7]);
}
2. 7세그먼트 디코더와 조합하기
▶ 7세그먼트 디코더(seven-segment decorder)란?
: 7세그먼트로 숫자를 표현할 때 필요한 제어선을 일곱 개에서 네 개로 줄일 수 있는 장치
![](https://blog.kakaocdn.net/dn/bChVjP/btsrDKJMFOF/8eUHQKaVOmXbhfbtTRq1KK/img.png)
- 전원(Vcc), 접지(GND)
- 7세그먼트에 연결할 출력 단자 7개
--> A~F - 아두이노 보드에 연결할 입력 단자 4개, 이 단자를 통해 아두이노로부터 입력값을 받아 7세그먼트의 출력을 제어
--> AIN, BIN, CIN, DIN - 7세그먼트 디코더를 테스트하기 위한 단자
--> 램프 테스트(LT; lamp test), 귀선 소거(BI; blanking), 래치 활성화(LE; letch enable) 단자
![](https://blog.kakaocdn.net/dn/KP9JD/btsrDfiZbV1/obPHDWYe3UE2MvfEHkvljk/img.png)
'아두이노' 카테고리의 다른 글
[Do it! 아두이노] 10. LCD로 문자열 출력하기 (0) | 2023.08.20 |
---|---|
[Do it! 아두이노] 9. 함수와 라이브러리 활용하기 (0) | 2023.08.20 |
[Do it! 아두이노] 8. 아두이노 출력으로 아두이노 작동하기 (1) | 2023.08.19 |
[Do it! 아두이노] 7. 아날로그 입력으로 아두이노 작동하기 (0) | 2023.08.19 |
[Do it! 아두이노] 6. 디지털 입력으로 아두이노 작동하기 (0) | 2023.08.19 |