개발자/Arduino

아두이노 7 Segment LED 숫자 표시

지구빵집 2022. 4. 13. 13:58
반응형

 

 

 

친구들과 어울리기를 좋아하고, 늘 피곤한지 책상에 엎드려 자는 아이들, 무슨 꿍꿍이가 있는지 자기들끼리 소근대는 아이들을 본다. 시키지 않으면 하지 않지만 무어라도 한번 해보자고 하면 아이들은 빛의 속도로 움직인다. 아이들이 가진 것이 가능성 뿐이라서 지금은 심심하고 지루한 세월을 보내는 것 같다. 

 

사실 선생님과 아이들은 서로에게 의무감도 없고, 빛진 일도 없다. 어떤 방향으로 나가든 둘 다 꼭 그래야만 할 이유도 찾기 힘들다. 서로 노력할 뿐이다. 작고 사소한 일들을 함께하고, 꼭 배워야 할 것들을 가르치고, 배울 수 있다면 그뿐이고, 무엇보다 각 개인이 가진 내면의 의지를 표현하면 좋겠다.

 

아크릴 판에 조립한 아두이노 보드를 가지고 실습을 한다. 처음 다루어 보는 아이들부터, 익숙한 아이들까지 모두 다르다. 실수는 기본적이고 쉬운 것에서 대부분 발생한다. 브레드 보드에 연결을 하고, 블로그로 이동해 소스코드를 카피하고, 펌웨어를 업로드하면 숫자가 증가한다. 현명하고 스마트한 아이들을 가르치는 것은 말 할 수 없는 즐거운 흥분을 느끼게 한다.  

 

 

7 segment 기초

 

숫자(0~9) 한 글자를 표현할 수 있는 7개 LED가 집적된 부품을 7 Segment LED라고 합니다. 아두이노 우노를 사용하여 제어하는 방법을 알아보겠습니다. 물론 0~9까지 표현하기도 하지만 영문자도 표현이 가능합니다. HUHU, Hello 같은 문자도 나타낼 수 있습니다.

 

1자리 7세그먼트 디스플레이는 표시할 출력 범위가 미리 알려진 많은 임베디드 시스템 및 산업 애플리케이션에서 사용됩니다. 기본 1자리 7세그먼트 디스플레이는 0-9의 숫자와 몇 개의 문자를 표시할 수 있습니다. 특히 표시할 수 있는 자릿수/문자 수가 다릅니다. 기본적으로 7세그먼트 디스플레이는 1자리 또는 1자만 표시할 수 있는 단일 단위입니다. 2자리 표시, 3자리 표시 또는 4자리 7세그먼트 표시를 구성하기 위해 단일 단위 7세그먼트 디스플레이를 함께 다중화하여 더 많은 자릿수를 표시합니다. Arduino와 7 Segment 디스플레이는 함께 연결하여 사용하기 쉽고 아주 쉽습니다. 

 

7 segment 표시 문자 https://www.kocoafab.cc/tutorial/view/351

 

 

7세그먼트 디스플레이는 특히 표시할 수 있는 문자 범위에서 많은 제한이 있습니다. 7세그먼트 디스플레이보다 훨씬 더 발전되어 알파벳의 거의 모든 문자를 표시할 수 있는 디스플레이가 시중에 있습니다.(예: 16×2 LCD 는 거의 모든 ASCII 문자를 표시할 수 있습니다.) 7세그먼트 디스플레이가 여전히 시장에 존재하는 이유를 생각할 수 있습니다. 7 세그먼트 디스플레이는 시장에서 사용 가능한 디스플레이 장치와 관련하여 가장 저렴한 옵션입니다. 한 자리/문자 7세그먼트 디스플레이 장치는 16×2 LCD 모듈 비용의 1/10에 사용할 수 있습니다.

 

디스플레이의 각 LED에는 직사각형 플라스틱 패키지에서 나온 연결 핀 중 하나가 있는 위치 세그먼트가 제공됩니다. 이 LED 핀은 각 개별 LED를 나타내는 "a"에서 "g"까지 레이블이 지정됩니다. 다른 LED 핀은 함께 연결되어 공통 핀을 형성합니다. 따라서 특정 순서로 LED 세그먼트의 적절한 핀을 순방향 바이어스함으로써 일부 세그먼트는 밝아지고 다른 세그먼트는 희미하게 유지되어 디스플레이에 해당 문자가 표시됩니다.

 

문자 표시 방법

 

7-segment의 동작방식에서 주의할 점은 공통 VCC인가 공통 GND 하는 것입니다. 이어지는 설명은 RGB LED에도 같은 방식으로 해당됩니다. 공통 VCC는 common-anode 타입이라고 하여 모든 전원, 즉 VCC 가 묶여 있어 마이크로 컨트롤러에서 LOW를 출력하면 해당 세그먼트 핀에 불이 켜지는 방식입니다.

 

공통 GND 는 각 세그먼트 접지, 즉 GND가 공통으로 묶여 있어 common-cathod 방식이라고 합니다. 마이크로 컨트롤러에서 High 신호를 주어야 불이 들어오는 방식입니다.  

 

common-anode 와 common-cathod 방식

 

 

디스플레이의 공통 핀은 일반적으로 유형을 알려줍니다. 핀 연결에는 두 가지 유형이 있습니다: 연결된 캐소드의 핀과 연결된 애노드 중 하나는 공통 캐소드(CC) 및 공통 애노드(CA)를 나타냅니다. 이름에서 알 수 있듯이 CC 디스플레이에는 7개 LED의 모든 음극이 연결되어 있고 CA 디스플레이에는 7개 세그먼트의 모든 양극이 연결되어 있습니다. 

 

아래는 회로 연결도입니다. 간단한 테스트를 위해 저항은 생략할 수 있습니다.

 

 

7 segment 연결도

 

여기까지 설명한 강의자료를 참고하세요.

 

7 segment 개념도 adventure design2-6강 프로그래밍 실습.pptx

 

4 digit 7 segment 연결도 adventure design2-6강 프로그래밍 실습.pptx

 

 

아래는 구동 소프트웨어입니다. 

 

int a=7; 
int b=6; 
int c=5; 
int d=11; 
int e=10; 
int f=8; 
int g=9; 
int dp=4; 
//display number 1
void display1(void) 
{ 
    digitalWrite(b,HIGH);
    digitalWrite(c,HIGH);
} 
//display number2
void display2(void) 
{
    digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
    digitalWrite(g,HIGH);
  digitalWrite(e,HIGH);
    digitalWrite(d,HIGH);
} 
// display number3
void display3(void) 
{ 
    digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
    
  digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);
    digitalWrite(g,HIGH);
} 
// display number4
void display4(void) 
{ 
    digitalWrite(f,HIGH);
    digitalWrite(b,HIGH);
    digitalWrite(g,HIGH);
  digitalWrite(c,HIGH);
  
} 
// display number5
void display5(void) 
{ 
    digitalWrite(a,HIGH);
    digitalWrite(f,HIGH);
    digitalWrite(g,HIGH);
  digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);
} 
// display number6
void display6(void) 
{ 
    digitalWrite(a,HIGH);
    digitalWrite(f,HIGH);
    digitalWrite(g,HIGH);
  digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);  
    digitalWrite(e,HIGH);  
} 
// display number7
void display7(void) 
{   
   digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
    digitalWrite(c,HIGH);
} 
// display number8
void display8(void) 
{ 
    digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
    digitalWrite(g,HIGH);
  digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);  
    digitalWrite(e,HIGH);  
  digitalWrite(f,HIGH);  
} 
void clearDisplay(void) 
{ 
    digitalWrite(a,LOW);
    digitalWrite(b,LOW);
    digitalWrite(g,LOW);
  digitalWrite(c,LOW);
    digitalWrite(d,LOW);  
    digitalWrite(e,LOW);  
  digitalWrite(f,LOW);  
} 
void display9(void) 
{ 
    digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
    digitalWrite(g,HIGH);
  digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);  
  digitalWrite(f,HIGH);  
} 
void display0(void) 
{ 
    digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
  digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);  
    digitalWrite(e,HIGH);  
  digitalWrite(f,HIGH);  
} 
void setup() 
{ 
    int i;
    for(i=4;i<=11;i++) 
        pinMode(i,OUTPUT);
} 
void loop() 
{     
    while(1) 
    {   clearDisplay();
  display0(); 
        delay(2000); 
        clearDisplay();
        display1(); 
        delay(2000); 
        clearDisplay();
        display2(); 
        delay(2000); 
        clearDisplay();
        display3(); 
        delay(2000);
        clearDisplay();
        display4(); 
        delay(2000);
        clearDisplay(); 
        display5(); 
        delay(2000);
        clearDisplay(); 
        display6(); 
        delay(2000);
        clearDisplay(); 
        display7(); 
        delay(2000); 
        clearDisplay();
        display8(); 
        delay(2000); 
        clearDisplay();  
        display9(); 
        delay(2000);      
    }
}

 

 

참고 

7 Segment LED(1 Digit LED)로 숫자 표시하기

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

이미지 출처 - 7 세그먼트 숫자 표시하기

 

 

반응형