버튼 4개 및 LED 7개로 7세그먼트 디코더 구현
#define A_IN 2
#define B_IN 3
#define C_IN 4
#define D_IN 5
#define a_OUT 7
#define b_OUT 8
#define c_OUT 9
#define d_OUT 10
#define e_OUT 11
#define f_OUT 12
#define g_OUT 13
#define delay_time 1
void setup() {
pinMode(A_IN, INPUT_PULLUP);
pinMode(B_IN, INPUT_PULLUP);
pinMode(C_IN, INPUT_PULLUP);
pinMode(D_IN, INPUT_PULLUP);
pinMode(a_OUT, OUTPUT);
pinMode(b_OUT, OUTPUT);
pinMode(c_OUT, OUTPUT);
pinMode(d_OUT, OUTPUT);
pinMode(e_OUT, OUTPUT);
pinMode(f_OUT, OUTPUT);
pinMode(g_OUT, OUTPUT);
}
void loop() {
int A = !digitalRead(A_IN);
int B = !digitalRead(B_IN);
int C = !digitalRead(C_IN);
int D = !digitalRead(D_IN);
int a = (!D&&!C&&!B&&A)||(C&&!A);
int b = (C&&!B&&A)||(C&&B&&!A);
int c = !C&&B&&!A;
int d = (!C&&!B&&A)||(C&&!B&&!A)||(C&&B&&A);
int e = (A)||(C&&!B);
int f = (B&&A)||(!C&&B)||(!D&&!C&&A);
int g = (!D&&!C&&!B)||(C&&B&&A);
if (!a == HIGH) {
digitalWrite(a_OUT, HIGH);
delay(delay_time);
digitalWrite(a_OUT, LOW);
}
if (!b == HIGH) {
digitalWrite(b_OUT, HIGH);
delay(delay_time);
digitalWrite(b_OUT, LOW);
}
if (!c == HIGH) {
digitalWrite(c_OUT, HIGH);
delay(delay_time);
digitalWrite(c_OUT, LOW);
}
if (!d == HIGH) {
digitalWrite(d_OUT, HIGH);
delay(delay_time);
digitalWrite(d_OUT, LOW);
}
if (!e == HIGH) {
digitalWrite(e_OUT, HIGH);
delay(delay_time);
digitalWrite(e_OUT, LOW);
}
if (!f == HIGH) {
digitalWrite(f_OUT, HIGH);
delay(delay_time);
digitalWrite(f_OUT, LOW);
}
if (!g == HIGH) {
digitalWrite(g_OUT, HIGH);
delay(delay_time);
digitalWrite(g_OUT, LOW);
}
}
#define 구문으로 핀 번호를 명확히 지정:
A_IN ~ D_IN → 4비트 BCD 입력용 버튼 (2, 3, 4, 5번 핀)
a_OUT ~ g_OUT → 7세그먼트 LED의 각 세그먼트 제어 핀 (7~13번 핀)
INPUT_PULLUP 설정으로 내부 풀업 저항 사용:
버튼이 눌리지 않으면 HIGH, 눌리면 LOW
!digitalRead(...)를 사용해 버튼이 눌렸을 때 HIGH로 처리
BCD 입력 값(A, B, C, D)을 바탕으로 각 세그먼트(a~g)의 출력 상태를 논리식으로 계산:
각 논리식은 7세그먼트 디코더의 진리표에 기반한 불 대수 표현식
입력된 BCD 값에 따라 점등해야 할 세그먼트를 판단
digitalWrite(..., HIGH); delay(1); digitalWrite(..., LOW);
점등이 필요한 세그먼트에 짧게 HIGH 신호를 준 뒤 LOW로 바꿔
LED를 짧게 점등하여 시각적으로 항상 켜져 보이도록 함 (지속적인 반복 루프)
전체적으로 이 코드는 4비트 BCD 입력(AD)을 받아 해당하는 숫자(09)를 7세그먼트 형태로 표현하는 회로이며,
a~g 세그먼트에 대한 직접적인 논리 제어를 통해
이는 7세그먼트 디코더 구현 예제임
Copyright ⓒ Tech79 All right reserved