ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 7Segment에 숫자 표시하기
    Arduino/7 Segment 2020. 10. 31. 20:18

    우선 회로도를 보자.

    우리가 사용할 방식은 VCC가 아닌 GND방식이다.

    아두이노와 7세그먼트와의 연결은 다음과 같이 한다.a는 2번핀, b는 3번핀, c는 4번핀, d는 5번핀, e는 6번핀, f는 7번핀, g는 8번핀, dp는 9번핀이다.

     

    7Segment에 숫자 0을 표기하기

    하드웨어적인 연결을 해보자.

    일단 저항이 많이 들어간다. 저항은 그림과 같이 옆으로 연결하는데,

    7세그먼트 기준으로 위부터 보면 a와 f를 같은 선 라인에, g와 b를 같은 선 라인에 연결한다.

    그리고 이 이 두 라인은 각 각 서로 다른 라인이다.

    7세그먼트 기준으로 아래도 d와 c는 서로 같은 라인, e와 dp는 서로 같은 라인이다.

    이 두 라인은 서로 다른 라인이다.

    나중에 연결해놓고 보면 g의 LED가 흐릿하게 출력이 되는데, 이 부분은 저항을 떼고 연결하면 이보다 밝게 출력된다.

    저항부터 연결을 해보자.

     

     

     

    아두이노와 선을 연결해보자.

     

     

    소스 코드

    아래의 num배열의 개수는 7세그먼트의 LED의 개수이다.

    1에 쓰여있으면 LED가 on이라는 의미이다.

    그리고 순서는 a,b,c,d,e,f,g,dp 이다.

    즉, 세븐세그먼트에 0을 출력하려면

    a,b,c,d,e,f에 각 각1을 나머지는 0을 입력하면 된다.

    digitalWrite함수에서 i + 2를 한 이유는 핀의 번호는 2~9번핀까지이다.

    위에서 설명한 바와 같이 2번핀은 a에, 3번핀은 b에 순서대로 연결했다. 나름의 규칙성을 갖고 있다.

    더보기
    //  숫자 0하나 표기
    void setup() {
      // put your setup code here, to run once:
    
      //  2번핀부터 9번핀까지 모두 설정
      for (int i = 2; i < 10; i++)
      {
        pinMode(i, OUTPUT);
        digitalWrite(i,LOW);
      }
    
      bool num[8] = {1,1,1,1,1,1,0,0};
      int len = sizeof(num) / sizeof(bool);
      for (int i = 0; i < len; i++)
      {
        digitalWrite(i + 2, num[i]);
      }
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
    }

     

     

     

    0~9까지의 숫자들을 하나씩 출력하기

    위의 예제를 이해했다면, 이는 간단한 문제가 된다.

    기존의 숫자하나를 세븐세그먼트에 표현하려면 8칸짜리 배열 하나가 필요했다.

    그러면 십진수 0~9를 표현하려면 8칸짜리 배열이 10개 필요하다.

    이는 이차원 배열을 활용하면 유용하다. 

    이차원 배열의 행은 세븐세그먼트에 표현하려는 십진수의 수이다.

    소스 코드

    더보기
    //  숫자들을 출력하기
    void setup() {
      // put your setup code here, to run once:
    
      //  2번핀부터 9번핀까지 모두 설정
      for (int i = 2; i < 10; i++)
      {
        pinMode(i, OUTPUT);
        digitalWrite(i,LOW);
      }
      
      //  행의 수는 우리가 표현할 십진수의 개수이며, 
      //  열의 수는 십진수에 따른 수 표기에 필요한 세븐세그먼트핀의 수
      bool num[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,0,0,0},    //  숫자7
        {1,1,1,1,1,1,1,0},    //  숫자8
        {1,1,1,1,0,1,1,0}     //  숫자9
      };
      
      for (int j = 0; j < 10; j++)
      {
        for (int i = 0; i < 8; i++)
        {
          digitalWrite(i + 2, num[j][i]);
        }
        delay(1000);
      }
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
    }

     

    댓글

Designed by Tistory.