소스코드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);
}
아래는 업로드한 후 구동한 모습입니다.