개발모듈/펌웨어 모듈
- 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 |
반응형