달력

5

« 2024/5 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

부품:

세븐세그먼트 FND507, 1k저항 8개
 
부품설명:
다음은 FND507의 단자입니다. 
K는 공통단자입니다. FND507은 공통 양극입니다.
 
회로연결:
FND507이 아니더라도 다음과 같이 연결하면 됩니다.
K는 아두이노의 5V 공급전압에 연결합니다.
그다음, a, b, c, d, e, f, g, dp를 각각 1K저항과 연결하여 
아두이노의 디지털 핀 2,3,4,5,6,7,8,9와 연결합니다. 
 
코드1: 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/* 7-segment*/
 
const int pins[]={2,3,4,5,6,7,8,9};
//set bits at each number
                                   //dp/gfedcba
const int numberCode[10]={B11000000, //0
                    B11111001, //1
                    B10100100, //2
                    B10110000, //3
                    B10011001, //4
                    B10010010, //5
                    B10000010, //6
                    B11011000, //7
                    B10000000, //8
                    B10010000}; //9
 
void setup()
{
  for(int i=0; i<7; i++)
  pinMode(pins[i], OUTPUT);
}
 
void loop()
{
for(int n=0; n<10; n++)
   {//show the number
     showNumber(n);
    //delay
     delay(200);
    }
delay(200);
}
 
void showNumber(int number)
{
  boolean value;
  
  for(int bitPosition=0; bitPosition<8; bitPosition++)
  {
    //if number isn't 0 to 9, all off.
    if(number<0 || number>9)
    value = 0;
    //if number is 0 to 9, 
    else
    //Read bit.
    value = bitRead(numberCode[number], bitPosition);
    
    //and Reading value 0, off. Reading value 1, on.
    digitalWrite(pins[bitPosition], value);
  }
 
  return ;
}

 

코드1설명:

loop()에는

결과적으로 숫자를 보여주는 showNumber()함수와

시간을 약간 지연시키는 delay가 있습니다.

showNumber()함수를 이해하기 위해서는

프로그래밍 -> C언어 -> 비트를 읽거나 쓰기 1 - bitRead()를 읽어보세요~ 

그럼 위에 소개한 포스팅을 이해했다고 생각하고 showNumber()함수를 설명할께요. 

우선 맨 위쪽에 이진수들이 있습니다. 

여기서 각각의 이진수는 각 숫자를 세븐 세그먼트에서 나타내기위한 디지털값 입니다. 

비트위치0은 a를 

비트위치1은 b를 

비트위치2는 c를 

비트위치3은 d를 

비트위치4는 e를 

비트위치5는 f를 

비트위치6은 g를 

비트위치7은 dp를  나타내는 거죠. 

예를 들어, 1은 b와 c가 켜져야합니다.

그러니까 b와 c는 LOW를, 나머지 세그먼트에는 HIGH를 출력해야합니다.

LOW는 0, HIGH는 1이니까 11111001이 되는거죠. 

다음으로 showNumber()함수내부의 if문 입니다. 

함수에 0~9가 아닌 값이 입력되면 0이 출력됩니다. 

0~9의 값이 입력되면, 

입력된 숫자와 대응되는 이진수의 각 비트를 읽습니다. 

그래서 0이면 LOW를 1이면 HIGH를 출력합니다. 

 

코드2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/* 7-segment*/
 
const int pins[7]={2,3,4,5,6,7,8};
                              //abcdefg
const int numberCode[10][7]={{0,0,0,0,0,0,1}, //0
                             {1,0,0,1,1,1,1}, //1
                             {0,0,1,0,0,1,0}, //2
                             {0,0,0,0,1,1,0}, //3
                             {1,0,0,1,1,0,0}, //4
                             {0,1,0,0,1,0,0}, //5
                             {0,1,0,0,0,0,0}, //6
                             {0,0,0,1,1,0,1}, //7
                             {0,0,0,0,0,0,0}, //8
                             {0,0,0,0,1,0,0}}; //9
 
void setup()
{
  for(int i=0; i<7; i++)
  pinMode(pins[i], OUTPUT);
}
 
void loop()
{
for(int n=0; n<10; n++)
{showNumber(n);
delay(300);}
}
 
void showNumber(int number)
{
  boolean value;
  
  for(int bitPosition=0; bitPosition<7; bitPosition++)
  {
    if(number<0 || number>9)
    value = 0;
    else
    {value = numberCode[number][bitPosition];
     digitalWrite(pins[bitPosition], value);}
  }
    return ;
}

 

코드2설명:

원리는 코드1과 같습니다.

여기서는 이진수 대신에  

배열을 사용하여 LOW와 HIGH를 타나낸것 뿐 입니다. 

[출처] [세븐세그먼트] 1|작성자 DEW


:
Posted by youjin.A