Arduino

디스플레이 : FND 4개 사용하기

작성자 임베디드코리아 작성일25-05-16 00:18 조회406회 댓글0건

첨부파일

동영상 : https://youtu.be/MoME6Tj485I
<* FND 4개 사용 *>
-FND 4개를 선택하여 숫자를 나타낸다

---- < FND 4개 숫자 지정하여 표시하는 소스 코드 > -----------------------------------------------------
/* 아두이노 핀과 FND 핀 연결 */
int FndA = 13;  //  13번 핀과 7세그먼트의 A핀이 연결
int FndB = 12;
int FndC = 11;
int FndD = 10;
int FndE = 9;
int FndF = 8;
int FndG = 7;
int FndDP = 6;

int FndD1 = 2;
int FndD2 = 3;
int FndD3 = 4;
int FndD4 = 5;

int delaytime =1;//FND 유지 시간

void DisplayNumber(int number) {
  if(number == 0) {     
    digitalWrite(FndA, HIGH);//아두이노 출력 HIGH
    digitalWrite(FndB, HIGH);//아두이노 출력 HIGH
    digitalWrite(FndC, HIGH);//아두이노 출력 HIGH
    digitalWrite(FndD, HIGH);//아두이노 출력 HIGH
    digitalWrite(FndE, HIGH);//아두이노 출력 HIGH
    digitalWrite(FndF, HIGH);//아두이노 출력 HIGH
    digitalWrite(FndG, LOW);//아두이노 출력 HIGH
  }
  else if(number == 1) { 
    digitalWrite(FndA, LOW);
    digitalWrite(FndB, HIGH);
    digitalWrite(FndC, HIGH);
    digitalWrite(FndD, LOW);
    digitalWrite(FndE, LOW);
    digitalWrite(FndF, LOW);
    digitalWrite(FndG, LOW);
  }
  else if(number == 2) { 
    digitalWrite(FndA, HIGH);
    digitalWrite(FndB, HIGH);
    digitalWrite(FndC, LOW);
    digitalWrite(FndD, HIGH);
    digitalWrite(FndE, HIGH);
    digitalWrite(FndF, LOW);
    digitalWrite(FndG, HIGH);
  }
  else if(number == 3) { 
    digitalWrite(FndA, HIGH);
    digitalWrite(FndB, HIGH);
    digitalWrite(FndC, HIGH);
    digitalWrite(FndD, HIGH);
    digitalWrite(FndE, LOW);
    digitalWrite(FndF, LOW);
    digitalWrite(FndG, HIGH);
  }
  else if(number == 4) { 
    digitalWrite(FndA, LOW);
    digitalWrite(FndB, HIGH);
    digitalWrite(FndC, HIGH);
    digitalWrite(FndD, LOW);
    digitalWrite(FndE, LOW);
    digitalWrite(FndF, HIGH);
    digitalWrite(FndG, HIGH);
  }
  else if(number == 5) { 
    digitalWrite(FndA, HIGH);
    digitalWrite(FndB, LOW);
    digitalWrite(FndC, HIGH);
    digitalWrite(FndD, HIGH);
    digitalWrite(FndE, LOW);
    digitalWrite(FndF, HIGH);
    digitalWrite(FndG, HIGH);
  }
  else if(number == 6) { 
    digitalWrite(FndA, LOW);
    digitalWrite(FndB, LOW);
    digitalWrite(FndC, HIGH);
    digitalWrite(FndD, HIGH);
    digitalWrite(FndE, HIGH);
    digitalWrite(FndF, HIGH);
    digitalWrite(FndG, HIGH);
  }
  else if(number == 7) { 
    digitalWrite(FndA, HIGH);
    digitalWrite(FndB, HIGH);
    digitalWrite(FndC, HIGH);
    digitalWrite(FndD, LOW);
    digitalWrite(FndE, LOW);
    digitalWrite(FndF, HIGH);
    digitalWrite(FndG, LOW);
  }
  else if(number == 8) { 
    digitalWrite(FndA, HIGH);
    digitalWrite(FndB, HIGH);
    digitalWrite(FndC, HIGH);
    digitalWrite(FndD, HIGH);
    digitalWrite(FndE, HIGH);
    digitalWrite(FndF, HIGH);
    digitalWrite(FndG, HIGH);
  }
  else if(number == 9) { 
    digitalWrite(FndA, HIGH);
    digitalWrite(FndB, HIGH);
    digitalWrite(FndC, HIGH);
    digitalWrite(FndD, LOW);
    digitalWrite(FndE, LOW);
    digitalWrite(FndF, HIGH);
    digitalWrite(FndG, HIGH);
  }
 
}

void ClearLed()  //FND 모두 끄기  함수
{
  digitalWrite(FndA, LOW);
  digitalWrite(FndB, LOW);
  digitalWrite(FndC, LOW);
  digitalWrite(FndD, LOW);
  digitalWrite(FndE, LOW);
  digitalWrite(FndF, LOW);
  digitalWrite(FndG, LOW);

  digitalWrite(FndD4, HIGH);
  digitalWrite(FndD3, HIGH);
  digitalWrite(FndD2, HIGH);
  digitalWrite(FndD1, HIGH);
}

void Display4Number(int number)
{
  ClearLed(); //FND 모두 끄기
 
  DisplayNumber( (number / 1000) % 10);
  digitalWrite(FndD1, LOW);      // FND_D1 켜기
  delay(delaytime);              //유지 시간

  digitalWrite(FndD1, HIGH);      // FND_D1 끄기
  DisplayNumber( (number / 100) % 10);
  digitalWrite(FndD2, LOW);      // FND_D2 켜기
  delay(delaytime);

  digitalWrite(FndD2, HIGH);    // FND_D1 끄기
  DisplayNumber((number / 10) % 10);
  digitalWrite(FndD3, LOW);
  delay(delaytime);

  digitalWrite(FndD3, HIGH);    // FND_D3 끄기
  DisplayNumber( number % 10);
  digitalWrite(FndD4, LOW);
  delay(delaytime);

  digitalWrite(FndD4, HIGH);// FND_D4 끄기
}

void setup() {
    /* 출력 핀으로 설정 */
    pinMode(FndA, OUTPUT);
    pinMode(FndB, OUTPUT);
    pinMode(FndC, OUTPUT);
    pinMode(FndD, OUTPUT);
    pinMode(FndE, OUTPUT);
    pinMode(FndF, OUTPUT);
    pinMode(FndG, OUTPUT);
    pinMode(FndDP, OUTPUT);
    pinMode(FndD1, OUTPUT);
    pinMode(FndD2, OUTPUT);
    pinMode(FndD3, OUTPUT);
    pinMode(FndD4, OUTPUT);
}

void loop() {
    Display4Number(1234);  //4FND ==> '1234' 숫자 표시
}

---- < FND 4개 숫자 0000 ~ 9999 까지 계수를 표시하는 소스 코드 > ---------------------------------------------
//7세그먼트 선택 핀
int FND_select_pin[] = {2,3,4,5};
//7세그먼트 제어 핀
int segment_pin[] = {13,12,11,10,9,8,7,6};

int time_delay = 5; //자릿수 표현 사이의 지연 시간, ms 단위

/* 0~9까지의 숫자 표시를 위한 세그먼트 a~dp의 점멸 패턴 */
byte digits_data[10]={  //켜지는 부분이 1로 표현됨
      B11111100,  // 0xFC
      B01100000,  // 0x60
      B11011010,  // 0xDA
      B11110010,  // 0xF2
      B01100110,  // 0x66
      B10110110,  // 0xB6
      B10111110,  // 0xBE
      B11100100,  // 0xE4
      B11111110,  // 0xFE
      B11100110  // 0xE6
      };
int d1000, d100, d10, d1;

void setup() {
  //자릿수 선택 핀을 출력으로 설정
  for(int i = 0; i < 4; i++)
  {
    pinMode(FND_select_pin[i], OUTPUT);
  }
  // 세그먼트 제어 핀을 풀력으로 설정
  for(int i = 0; i < 8; i++)
  {
    pinMode(segment_pin[i], OUTPUT);
  }
}

void loop() {
 for( int i = 0; i < 10000; i++)
  {
    d1000 = i /1000;
    d100 = i % 1000/100;
    d10 = i % 100/10;
    d1 = i % 10;
    for(int j = 0 ; j < 10 ; j++)
    {
 
    show_digit(1, d1000);
    delay(time_delay);
    show_digit(2, d100);
    delay(time_delay);
    show_digit(3, d10);
    delay(time_delay);
    show_digit(4, d1);
    delay(time_delay);
    }
  }

}

/* 해당 자릿수에 숫자 하나를 표시하는 함수 (위치, 출력할 숫자) */
void show_digit(int pos, int number)
{
  for(int i = 0; i < 4; i++)
  {
    if(i+1 ==pos)
      //해당 자릿수의 선택 핀만 LOW로 설정
      digitalWrite(FND_select_pin[i], LOW);
    else
      //나머지 자리는 HIGH로 설정
      digitalWrite(FND_select_pin[i], HIGH);
  }
  // 8개 세그먼트 제어
  for(int i = 0; i < 8; i++)
  {
    byte segment_data = (digits_data[number]
        & (0x01 << i)) >> i;
    if(segment_data == 1)
      digitalWrite(segment_pin[7-i], HIGH);
    else
      digitalWrite(segment_pin[7-i], LOW);
  }
}