5-3 4자리 7-세그먼트 표시장치

공부하는 학생 A·2024년 2월 6일
0

아두이노 

목록 보기
25/74

4자리 7-세그먼트

4자리 7-세그먼트 LED 표시장치에는 12개의 핀이 있다. 그 중에서 4개의 핀(D1~D4)은 4자리 중에서 어느 한 자리를 선택하는데 사용되고, 나머지 8개의 핀은 선택된 자리 내의 a에서 g까지의 LED와 dp(소숫점)LED를 제어하는데 사용된다. 표시장치의 모듈의 각 세그먼트는 다중화 되어 동일한 양극 연결 지점을 공유한다. 그리고 모듈의 4자리 숫자 각각에는 고유한 음극 연결점이 있다. 이를 통해 각 숫자를 독립적으로 켜거나 끌 수 있다.

멀티플렉싱 기술

멀티플렉싱 기술은 하나의 통신 채널을 통하여 두 개 이상의 신호를 전송하는 데 사용되는 기술이다. 이 기술은 물리적 장치의 효율성을 높이기 위하여 최소한의 물리적인 요소만을 사용해 최대한의 신호를 전달하기 위하여 사용된다. 멀티플렉싱 방법은 크게 주파수 분할 다중화, 파장 분할 다중화, 시분할 다중화 방식으로 나눌 수 있다.
멀티플렉싱 기술의 시분할 다중화 방법을 사용하여 4자리 7-세그먼트 표시장치에 한 순간에는 한 자리의 숫자만 표시하고 다음 자리의 표시를 위하여 매우 빠르게 전환하는 방법으로 '1234'와 같은 서로 다른 숫자를 표시할 수 있다. 시력의 지속성으로 인해 사람의 눈은 어느 자리의 디스플레이가 ON/OFF인지 구분하기 어렵다. 인간의 눈은 4개의 디스플레이 장치를 항상 ON 상태로 착각한다.

스케치 5-7 4자리 7-세그먼트에 가변저항의 값을 출력하기

int segPin[8] = {2, 3, 4, 5, 6, 7, 8, 9};
int digPin[4] = {13, 12, 11, 10};
int delayTime = 3;
byte Numbers[10] = {0b11111100, 0b01100000, 0b11011010, 0b11110010, 0b01100110,
                    0b10110110, 0b10111110, 0b11100100, 0b11111110, 0b11110110};

void displayNumber(int pos, int n) {
  // 출력할 자리 찾기
  for (int i=0; i<4; i++) {
    if (digPin[i] == pos) {
      digitalWrite(digPin[i], LOW);
    }
    else {
      digitalWrite(digPin[i], HIGH);
    }
  }

  //8개 세그먼트를 제어해서 원하는 숫자 출력
  for(int i = 0; i < 7; i++){
     byte segment = (Numbers[n] & (0x01 << i)) >> i;
     if(segment == 1){
       digitalWrite(segPin[7 - i], HIGH);
     } else {
       digitalWrite(segPin[7 - i], LOW);
     }
  }
  delay(delayTime);
}

void setup() {
  Serial.begin(9600);
  for(int i=0; i<4; i++) {
    pinMode(digPin[i], OUTPUT);
  }
  
  for(int i=0; i<8; i++) {
    pinMode(segPin[i], OUTPUT);
  }
}

void clearLEDs() {
  for(int i=0; i<4; i++) {
    digitalWrite(digPin[i], LOW);
  }
  
  for(int i=0; i<8; i++) {
    digitalWrite(segPin[i], LOW);
  }  
}

int n =0;
int readValue; 
void loop() {
  n++;
  if (n % 50 == 1) {
    readValue = analogRead(A0);
    Serial.println(readValue);
  }
  int c[4] = {0, 0, 0, 0};
  c[0] = readValue/1000;    // 1000의 자리 숫자
  c[1]=(readValue/100)%10;  // 100의 자리 숫자
  c[2]=(readValue/10)%10;   // 10의 자리 숫자
  c[3]=readValue%10;        // 1의 자리 숫자

  for (int i=0; i<4; i++) displayNumber(digPin[i],c[i]);
  clearLEDs();
  delay(delayTime);
}

5-7 실행결과

profile
Shine like a star, Just like a star

0개의 댓글