본문 바로가기

아두이노로 장난하기

아두이노로 FND 1Digit 7세그먼트 표시하기


안녕하세요 고군입니다.


이번시간에는 아두이노 우노를 사용하여 1자리 FND 7세그먼트를 제어해 보겠습니다.


7세그먼트(7-Segment)는 7개의 선분으로 숫자나 글자를 표시하기 위해 발광 다이오드(LED)를 사용항여 만든 출려 장치의 일종이다. 일반적으로 7세그먼트에는 7개의 선분에 소수점(decimal point)이 추가되어 총 8개의 요소를 1바이트의 데이터로 제어할 수 있다.



7세그먼트의 10개 핀은  두 개의 공통 핀과 8개의 세그먼트 제어 핀으로 구성된다. 공통 핀은 공통 양극의 경우 Vcc에, 공통 음극의 경우 GND에 연결한다. 나머지 8핀은 각 세그먼트를 제어하는 핀으로 공통 양극의 경우 GND 입력이 가해질 때(출력 LOW)불이 켜지는 반면, 공통 음그의 경우 Vcc입력이 가해질 때(출력 HIGH) 불이 켜진다.

 

▶ FND 1Digit 7세그먼트 특성 및 전자 회로


7세그먼트 표시 장치에는 공통 양극(common anode)방식과 공통 음극(common cathode) 방식이 있습니다. 공통 핀에 +5V를 연결하고 각 제어 핀을 GND에 연결하면 불이 들어오는 방식이 공통 양극 방식이며, 공통 핀을 GND에 연결하고 각 제어 핀을 +5V에 연결하면 불이 들어오는 방식이 공통 음극 방식이다. 따라서 7세그먼트 표시 장치를 테스트하기 전에 공통 양극 방식인지 고통 음극 방식인지 먼저 확인해야 한다. 7세그먼트 표시 장치는 10개의 핀을 가지며 핀 배열은 아래그림과 같다.


1Digit 7세그먼트 핀 배열



7세그먼트 표시 장치를 사용해 숫자 및 영문을 표시하는 예는 아래 그림과 같습니다.



위 표는 주로 사용되는 FND 7세그먼트의 디스플레이 폰트를 나타내고 있다. FND 7세그먼트의 핀 이름이 알파벳에 연속된 조건에서 a핀을 MSB(최상의 비트)로 하고, dp 핀을 LSB(최하위 비트)로 설정하여 폰트를 2진수로 나타내면 0=0B11111100, 1=0B01100000, ....이 된다.


▶ 아두이노



[전자부품목록]


▶ 아두이노 보드: 1개 

▶ 브레드보드: 1개

▶ 점프선 : 다량

▶ 저항 220옴: 8개

▶ FND 7세그먼트: 1개




1Digit FND 7세그먼트 아두이노 연결도


위에 사용된 7세그먼트는 공통 양극 방식으로 3번, 8번 핀에는 +5V를 연결합니다. 각각의 제어핀에는 220옴 저항을 연결하여 LED를 보호합니다.


1Digit FND 7세그먼트 아두이노 연결 회로도


1Digit FND 7세그먼트 제어를 위한 핀 연결



▶ 아두이노 소스 예제


※ 7세그먼트 장치에 0 ~9 까지 1초 간격으로 숫자를 반복으로 보여주는 예제입니다. 




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//common anode 방식이므로 LOW를 출력할 때 LED가 켜짐
int ON = LOW;
int OFF = HIGH;
 
//0~9까지 숫자 표시를 위한 세그먼트의 점멸 패턴
int digits[10][8= {
    {ON, ON, ON, ON, ON, ON, OFF, OFF},
    {OFF, ON, ON, OFF, OFF, OFF, OFF, OFF},
    {ON, ON, OFF, ON, ON, OFF, ON, OFF},
    {ON, ON, ON, ON, OFF, OFF, ON, OFF},
    {OFF, ON, ON, OFF, OFF, ON, ON, OFF},
    {ON, OFF, ON, ON, OFF, ON, ON, OFF},
    {ON, OFF, ON, ON, ON, ON, ON, OFF},
    {ON, ON, ON, OFF, OFF, ON, OFF, OFF},
    {ON, ON, ON, ON, ON, ON, ON, OFF},
    {ON, ON, ON, OFF, OFF, ON, ON, OFF}};
 
// 아두이노 연결 핀 선언
int pins[ ] = {23456789};
 
void setup( )
{
    for(int i = 0; i  < 8; i++)
    {
        //연결 핀을 출력으로 설정
        pinMode(pins[i], OUTPUT);
    }
}
 
void loop( )
{
    //10번 반복을 진행
    for(int i = 0; i <= 9; i++)
    {
        //8개 세그먼트를 점멸
        for(int j = 0; j < 8; j++)
        {
            digitalWrite(pins[j], digits[i][j]);
        }
        // 1초간 지연
        delay(1000);
    }
}
 
cs