메뉴 건너뛰기

목록
2022.05.29 11:25

아두이노 공부 fnd 2편

profile
조회 수 66 댓글 1 예스잼 0 노잼 0

74ls48-ic.png

 

오늘의 목표는 이 7448 ic를 이용하여 fnd를 동작시켜 보는것임 

 

요것은 bcd 코드를 fnd에 맞춰서 내보내주는 ic임 

 

그냥 다이렉트로 아두이노로 연결해도 되는데 이 ic를 굳이 사용하는 이유는 bcd 코드를 바꿔준다는 것과 포트수를 절약할수 있다는 것에 있음 

 

a10ea988113bda8184b35e69c89d56cd.png

 

이것은 저번에 올렸던 숑소에 올린 fnd 회로도인데 아두이노에 바로 연결한 회로도임

 

대충보면 fnd에 총 12개의 포트가 연결되어 있는것을 볼수있음 

 

 

47b4fb32952c4fede539499e9f93c45c.png

 

 

abcdefg 단자를 모두 아두이노와 직접 연결시켰기 때문에 포트수가 늘어날 뿐더러 

 

0을 표시하고 싶다고 하면 a,b,c,d,e,f 번 led를 켜겠다는 신호를 주어야하고 

 

1을 표시하고 싶다면 b,c, 번 led를 켜겠다는 신호를 주어야함 이러한 불편함을 없엘수 있는것이 7448ic임 

 

7448 ic를 이용하면 포트를 7개에서 4개로 줄일 뿐더러 bcd 코드를 입력하면 자동으로 a,b,c,d,e,f,g 중 무엇을 켜야하는지 자동으로 출력해줌!!!!! 

 

여기서 아까부터 계속말한 bcd코드가 무엇인지 궁금할텐데 

 

img1.daumcdn.png

 

 

걍 이 표를 보면됨 0~9 의 10진수를 4자리의 2진수로서 표현함. 

 

7448 ic를 보면 대문자 A B C D  단자가 있는것을 볼수있음 

 

74ls48-pinout.png

 

 

그림3.png

 

그리고 이 표의 입력부분에 BCD 코드를 입력하면 fnd를 제어할수있는 7자리인 abcdefg로 변환해줌 

 

대충 설명은 이정도로 하고 아두이노에 직접 배선해보겟으ㅜㅁ 

 

KakaoTalk_20220529_112445043.jpg

 

짜잔 

 

오늘도 띵커캐드로 그릴까 했는데 존나 귀찮아서 못그리겠음 

 

대충 4,5,6,7 번포트가 ic로가고 

 

ic에서는 각 포트에 맞춰 저항통해서 fnd로감 

 

8,9,10,11이 fnd 디지트 단자로 갔음

 

 

#include <Arduino.h>
 
int bcd_pins[4] = {8,9,10,11};
int digit_pins[4] = {4,5,6,7};
 
void display_number(int num){
  switch(num){
    case 0:
    digitalWrite(bcd_pins[0] , 0);
    digitalWrite(bcd_pins[1] , 0);
    digitalWrite(bcd_pins[2] , 0);
    digitalWrite(bcd_pins[3] , 0);
    break;
 
    case 1:
    digitalWrite(bcd_pins[0] , 1);
    digitalWrite(bcd_pins[1] , 0);
    digitalWrite(bcd_pins[2] , 0);
    digitalWrite(bcd_pins[3] , 0);
    break;
 
    case 2:
    digitalWrite(bcd_pins[0] , 0);
    digitalWrite(bcd_pins[1] , 1);
    digitalWrite(bcd_pins[2] , 0);
    digitalWrite(bcd_pins[3] , 0);
    break;
 
    case 3:
    digitalWrite(bcd_pins[0] , 1);
    digitalWrite(bcd_pins[1] , 1);
    digitalWrite(bcd_pins[2] , 0);
    digitalWrite(bcd_pins[3] , 0);
    break;
 
    case 4:
    digitalWrite(bcd_pins[0] , 0);
    digitalWrite(bcd_pins[1] , 0);
    digitalWrite(bcd_pins[2] , 1);
    digitalWrite(bcd_pins[3] , 0);
    break;
 
    case 5:
    digitalWrite(bcd_pins[0] , 1);
    digitalWrite(bcd_pins[1] , 0);
    digitalWrite(bcd_pins[2] , 1);
    digitalWrite(bcd_pins[3] , 0);
    break;
 
    case 6:
    digitalWrite(bcd_pins[0] , 0);
    digitalWrite(bcd_pins[1] , 1);
    digitalWrite(bcd_pins[2] , 1);
    digitalWrite(bcd_pins[3] , 0);
    break;
 
    case 7:
    digitalWrite(bcd_pins[0] , 1);
    digitalWrite(bcd_pins[1] , 1);
    digitalWrite(bcd_pins[2] , 1);
    digitalWrite(bcd_pins[3] , 0);
    break;
 
    case 8:
    digitalWrite(bcd_pins[0] , 0);
    digitalWrite(bcd_pins[1] , 0);
    digitalWrite(bcd_pins[2] , 0);
    digitalWrite(bcd_pins[3] , 1);
    break;
 
    case 9:
    digitalWrite(bcd_pins[0] , 1);
    digitalWrite(bcd_pins[1] , 0);
    digitalWrite(bcd_pins[2] , 0);
    digitalWrite(bcd_pins[3] , 1);
    break;
 
    default:
    digitalWrite(bcd_pins[0] , 0);
    digitalWrite(bcd_pins[1] , 0);
    digitalWrite(bcd_pins[2] , 0);
    digitalWrite(bcd_pins[3] , 0);
    break;
  }
}
 
void display7segments(unsigned int value) {
  for(int i = 0; i < 100; i++) {
    display_number(value);
    delay(10);
  }
}
 
void setup() {
  for(int i = 0; i < 4; i++) {
    pinMode(bcd_pins[i], OUTPUT);
    pinMode(digit_pins[i] , OUTPUT);
  }
}
 
void loop() {
  display7segments(5);
}    

 

코드는 diplay7segments() 함수에 0~9까지의 숫자를 넣게되면 그 숫자를 4칸에 표시해주도록 하였음