소스코드1

아래는 소스코드1입니다. 아두이노 IDE에 붙여넣기 하여 컴파일하고 업로드해봅니다.

// 아두이노 숫자표시LED 7세그먼트 LED 실험1
//7세그먼트 LED 핀맵(아두이노 디지털IO핀에 연결)
int a=7;
int b=6;
int c=5;
int d=11;
int e=10;
int f=8;
int g=9;
int dp=4;

//숫자 1 표시
void digital_1(void)
{
  unsigned char j;
  digitalWrite(c,HIGH);//디지털IO 5번을 HIGH로 출력하여 7새그먼트 LED c 를 점등
  digitalWrite(b,HIGH);//b 점등
  for(j=7;j<=11;j++)//나머지 LED는 소등
    digitalWrite(j,LOW);
  digitalWrite(dp,LOW);//DP(도트)는 소등
}
//숫자 2 표시
void digital_2(void)
{
  unsigned char j;
  digitalWrite(b,HIGH);
  digitalWrite(a,HIGH);
  for(j=9;j<=11;j++)
    digitalWrite(j,HIGH);
  digitalWrite(dp,LOW);
  digitalWrite(c,LOW);
  digitalWrite(f,LOW);
}
//숫자 3 표시
void digital_3(void)
{
  unsigned char j;
  digitalWrite(g,HIGH);
  digitalWrite(d,HIGH);
  for(j=5;j<=7;j++)
    digitalWrite(j,HIGH);
  digitalWrite(dp,LOW);
  digitalWrite(f,LOW);
  digitalWrite(e,LOW);
}
//숫자 4 표시
void digital_4(void)
{
  digitalWrite(c,HIGH);
  digitalWrite(b,HIGH);
  digitalWrite(f,HIGH);
  digitalWrite(g,HIGH);
  digitalWrite(dp,LOW);
  digitalWrite(a,LOW);
  digitalWrite(e,LOW);
  digitalWrite(d,LOW);   
}
//숫자 5 표시
void digital_5(void)
{
  unsigned char j;
  for(j=7;j<=9;j++)
    digitalWrite(j,HIGH);
  digitalWrite(c,HIGH);
  digitalWrite(d,HIGH);
  digitalWrite(dp,LOW);
  digitalWrite(b,LOW);
  digitalWrite(e,LOW); 
}
//숫자 6 표시
void digital_6(void)
{
  unsigned char j;
  for(j=7;j<=11;j++)
    digitalWrite(j,HIGH);
  digitalWrite(c,HIGH);
  digitalWrite(dp,LOW);
  digitalWrite(b,LOW);   
}
//숫자 7 표시
void digital_7(void)
{
  unsigned char j;
  for(j=5;j<=7;j++)
    digitalWrite(j,HIGH);
  digitalWrite(dp,LOW);
  for(j=8;j<=11;j++)
    digitalWrite(j,LOW);
}
//숫자 8 표시
void digital_8(void)
{
  unsigned char j;
  for(j=5;j<=11;j++)
    digitalWrite(j,HIGH);
  digitalWrite(dp,LOW);
}
void setup()
{
  int i;//변수 설정
  for(i=4;i<=11;i++)
    pinMode(i,OUTPUT);//디지털IO 4~11번을 출력으로 설정
}
void loop()
{  
  while(1)
  {
    digital_1();//숫자 1 표시
    delay(2000);//2초간 딜레이
    digital_2();
    delay(2000);
    digital_3();
    delay(2000);
    digital_4();
    delay(2000);
    digital_5();
    delay(2000);
    digital_6();
    delay(2000);
    digital_7();
    delay(2000);
    digital_8();
    delay(2000);   
  }
}

 

소스코드2

아래는 소스코드2입니다. 아두이노 IDE에 붙여넣기 하여 컴파일하고 업로드해봅니다.

소스코드2에서는 표시할 0에서 9까지의 숫자에 해당하는 디지털 IO 맵을 만들어서 소스코드를 단순화하였습니다. 어레이에서 0은 LED 소등, 1은 LED점등을 나타냅니다.

// 아두이노 숫자표시LED 7세그먼트 LED 실험2
byte seven_seg_digits[10][8] =  //7세그먼트 LED에 표시할 숫자를 디지털IO핀 ON/OFF 어레이로 변환
{
//{DP,c,b,a,f,g,e,d }순서로 배열되어 있습니다.
  { 0,1,1,1,1,0,1,1 },  // = 0
  { 0,1,1,0,0,0,0,0 },  // = 1
  { 0,0,1,1,0,1,1,1 },  // = 2
  { 0,1,1,1,0,1,0,1 },  // = 3
  { 0,1,1,0,1,1,0,0 },  // = 4
  { 0,1,0,1,1,1,0,1 },  // = 5
  { 0,1,0,1,1,1,1,1 },  // = 6
  { 0,1,1,1,0,0,0,0 },  // = 7
  { 0,1,1,1,1,1,1,1 },  // = 8
  { 0,1,1,1,1,1,0,1 }   // = 9
  };


void setup()  //디지털IO 4~11번을 출력으로 설정
{
  pinMode(4, OUTPUT);   
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
}
   
void sevenSegWrite(byte digit) //디지털IO 4~11번을 순서대로 어레이의 값으로 출력
{
  byte pin = 4;
  for (byte segCount = 0; segCount < 8; ++segCount) {
    digitalWrite(pin, seven_seg_digits[digit][segCount]);
    ++pin;
  }
}

void loop() //7세그먼터 LED를 9에서부터 다운카운트
{
  for (byte count = 10; count > 0; --count) {
   delay(1000);
   sevenSegWrite(count - 1); 
  }
  delay(2000);
}

아래는 업로드한 후 구동한 모습입니다.