2022-05-21 Arduino_11
2022. 5. 21. 01:38ㆍ학부 강의/Arduino
7-세그먼트 (FND)
- 숫자 혹은 영문 알파벳의 일부를 표시하기 위하여 7개의 선분 형태의 발광 다이오드(LED)를 ‘8’ 모양으로 배치하여 만든 표시장치
- 디지털시계, 전자계량기, 기본 계산기 및 숫자 정보를 표시하는 여러 전자 장치에 널리 사용
- 숫자나 문자 표시는 8개 LED 세그먼트들 중 일부를 켜거나 끄는 것으로 제어
- FND(Flexible Numeric Display)라고도 함.
세그먼트 표시장치 유형
공유하는 극성의 종류가 양극인가 음극인가에 따라서 2가지로 나뉜다.
공통 양극 방식
- 공통 핀(Com, 3번, 8번)이 양극.
a~g, dp
핀이 0V(음극) → LED ONa~g, dp
핀이 5V(양극) → LED OFF
공통 음극 방식 :
- 공통 핀(Com, 3번, 8번)이 음극.
a~g, dp
핀이 0V(음극) → LED OFFa~g, dp
핀이 5V(양극) → LED ON
세그먼트로 글자를 표현하는 방법
byte numbers[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,1,0,0},//7
{1,1,1,1,1,1,1,0},//8
{1,1,1,1,0,1,1,0} //9
};
세그먼트 | GND | a | b | c | d | e | f | g | dp |
핀 | GND | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
0, 1번 핀은 아두이노의 시리얼 통신을 위해서 사용하기 위해서 비워두었을듯 싶다.
12시에 위치한 a 세그먼트부터 시계 방향으로 b, c, d, e, f, g 세그먼트까지 2~8번 핀에 연결된다.
단, b와 c 사이에 dp 세그먼트가 위치하고 이는 9번 핀과 연결한다.
void displayNumbers(int n){
int pin = 2; // a --> 2, b --> 3, ... , dp --> 9
for(int i = 0; i < 8; i++) {
digitalWrite(pin+i, numbers[n][i]); //1이면 HIGH, 0이면 LOW
}
}
5_1
공통 음극 방식의 7-세그먼트를 사용한다.
1초마다 돌아가면서 a에서 g, dp까지 세그먼트 LED 켜기.
int pin = 2;
void setup()
{
for (int i = 2; i <= 9; i++)
{
pinMode(i, OUTPUT);
}
digitalWrite(2, HIGH);
}
void loop() {
for(int i = 0 ; i < 8 ; i++) {
for(int j = 0 ; j < 8 ; j++) {
if (i == j) digitalWrite(pin+j, HIGH);
else digitalWrite(pin+j, LOW);
}
delay(1000); // 1초 딜레이
}
}
i
는 1초마다 켜야 할 세그먼트를 나타낸다.
j
는 1씩 증가하면서 i
와 일치하는 것만 켜고 나머지를 다 꺼준다.
이렇게 이중 반복문을 사용하지 않는 방법도 생각해보았다.
점등할 세그먼트가 바뀌면 새로 켜줄 세그먼트가 연결된 핀에 HIGH를 write 한다.
반드시 이전에 켜 둔 세그먼트가 연결된 핀에 LOW 걸어주어야 한다.
그러면 매번 새로 키고 끌 핀 번호를 계산할 필요가 생긴다.
이런 번거로움 때문에 이중 반복문을 사용한 것 같다.
5_2
1초에 한 번씩 0부터 9까지의 숫자를 차례대로 출력하기
byte numbers[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,1,0,0},//7
{1,1,1,1,1,1,1,0},//8
{1,1,1,1,0,1,1,0} //9
};
int pin=2;
int num=0;
void setup()
{
for (int i = 2; i <= 9; i++)
{
pinMode(i, OUTPUT);
}
digitalWrite(9, HIGH);
}
void loop()
{
for(int i = 0; i < 8; i++)
{
digitalWrite(pin+i, numbers[num][i]);
}
num++;
if (num > 9) num = 0;
delay(1000);
}
5_3
귀여운 탁트 스위치를 누르면 숫자가 하나씩 증가한다.
byte numbers[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,1,0,0},//7
{1,1,1,1,1,1,1,0},//8
{1,1,1,1,0,1,1,0} //9
};
int num = 0;
void displayNumbers(int n){
int pin = 2; // a -> 2, b -> 3, ... , dp -> 9
for(int i = 0; i < 8; i++) {
digitalWrite(pin+i, numbers[n][i]);
}
}
void setup() {
pinMode(12, INPUT);
for (int i = 2; i <= 9; i++) {
pinMode(i, OUTPUT);
}
digitalWrite(9, HIGH);
}
void loop()
{
if (digitalRead(12) == HIGH){
++num;
if (num > 9) {
num = 0;
}
}
displayNumbers(num);
delay(300);
}
'학부 강의 > Arduino' 카테고리의 다른 글
2022-05-27 Arduino_13 (0) | 2022.05.27 |
---|---|
2022-05-23 Arduino_12 (0) | 2022.05.23 |
2022-05-17 Arduino_10 (0) | 2022.05.17 |
2022-05-12 Arduino_9 (0) | 2022.05.12 |
2022-05-09 Arduino_8 (0) | 2022.05.09 |