개발모듈/펌웨어 모듈

- FND (7-Segment) 모듈

메가아재 2016. 3. 22. 13:55
반응형


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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#define F_CPU 8000000UL 
 
#include <avr/io.h> 
#include <avr/interrupt.h> 
 
volatile unsigned short int digit = 0
volatile unsigned int count = 1234
 
// 7세그먼트 폰트 
#define A 0x01 
#define B 0x02 
#define C 0x04 
#define D 0x08 
#define E 0x10 
#define F 0x20 
#define G 0x40 
#define H 0x80 
 
const unsigned char font[] = { 
    A + B + D + F,     // '0' 
    B,     // '1' 
    A + B + D + G, // '2' 
    A + B + E + G, // '3' 
    B + F + G, // '4' 
    A + D + E + G, // '5' 
    A + D + F + G, // '6' 
    A + B, // '7' 
    A + B + C + F + G, // '8' 
    A + B + E + F + G, // '9' 
}; 
 
// 타이머 인터럽트 
ISR(TIMER0_OVF_vect)
    unsigned short int num; // FND 선택값 설정 
    if(++digit > 3
    { 
        digit = 0;
    } 
    
    // FND에 뿌려줄 값 설정 
    switch(digit) 
    { 
        case 0
            num = (count / 1) % 10;
            break
        
        case 1
            num = (count / 10) % 10
            break
            
        case 2
            num = (count / 100) % 10
            break
            
        case 3
            num = (count / 1000) % 10
            break
    } 
    
    PORTA = 0x00
    PORTB = 1 << digit; // FND 선택 
    PORTA = font[num]; // FND에 값 뿌리기 
 
int main(void
    DDRA = 0xFF
    DDRB = 0x0F
    TCCR0 = 1 << CS01; 
    TIMSK = 1 << TOIE0; 
    
    // 전역 인터럽트 활성 
    sei(); 
    
    while(1
    { 
        ; 
    } 
}
cs


반응형