4자리 7-세그먼트 LED 표시장치에는 12개의 핀이 있다. 그 중에서 4개의 핀(D1~D4)은 4자리 중에서 어느 한 자리를 선택하는데 사용되고, 나머지 8개의 핀은 선택된 자리 내의 a에서 g까지의 LED와 dp(소숫점)LED를 제어하는데 사용된다. 표시장치의 모듈의 각 세그먼트는 다중화 되어 동일한 양극 연결 지점을 공유한다. 그리고 모듈의 4자리 숫자 각각에는 고유한 음극 연결점이 있다. 이를 통해 각 숫자를 독립적으로 켜거나 끌 수 있다.
멀티플렉싱 기술은 하나의 통신 채널을 통하여 두 개 이상의 신호를 전송하는 데 사용되는 기술이다. 이 기술은 물리적 장치의 효율성을 높이기 위하여 최소한의 물리적인 요소만을 사용해 최대한의 신호를 전달하기 위하여 사용된다. 멀티플렉싱 방법은 크게 주파수 분할 다중화, 파장 분할 다중화, 시분할 다중화 방식으로 나눌 수 있다.
멀티플렉싱 기술의 시분할 다중화 방법을 사용하여 4자리 7-세그먼트 표시장치에 한 순간에는 한 자리의 숫자만 표시하고 다음 자리의 표시를 위하여 매우 빠르게 전환하는 방법으로 '1234'와 같은 서로 다른 숫자를 표시할 수 있다. 시력의 지속성으로 인해 사람의 눈은 어느 자리의 디스플레이가 ON/OFF인지 구분하기 어렵다. 인간의 눈은 4개의 디스플레이 장치를 항상 ON 상태로 착각한다.
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);
}
