000 ~ 999 까지 3자리 숫자 표시
000 ~ 999 까지 무한히 반복하는 카운터 입니다.
전체 소스 Codevision 용
/********************************************* 000 ~ 999 까지 무한히 반복 PORTA ==> FND1 에 출력 PORTB ==> FND2 에 출력 PORTC ==> FND3 에 출력
Tools : Codevision http://watsim.tistory.com *********************************************/
#include <mega128.h>
// FND 에 출력할 실제 데이터 unsigned int g_iCountData = 90;
// 1초 계산을 위한 변수 int g_iTimer0Counter = 0;
void FndDisplay1(char byteData); // 1 자리 출력 void FndDisplay1(char byteData){
switch( byteData){ case 0: PORTA = 0b10001000; break; case 1: PORTA = 0b11101011; break; case 2: PORTA = 0b01001100; break; case 3: PORTA = 0b01001001; break; case 4: PORTA = 0b00101011; break; case 5: PORTA = 0b00011001; break; case 6: PORTA = 0b00011000; break; case 7: PORTA = 0b11001011; break; case 8: PORTA = 0x00| 0x08; break; case 9: PORTA = 0x01|0x08; break; default : PORTA = 0b11111000; break; } }
void FndDisplay2(char byteData); // 10 자리 출력 void FndDisplay2(char byteData){
switch( byteData){ case 0: PORTB = 0b10001000; break; case 1: PORTB = 0b11101011; break; case 2: PORTB = 0b01001100; break; case 3: PORTB = 0b01001001; break; case 4: PORTB = 0b00101011; break; case 5: PORTB = 0b00011001; break; case 6: PORTB = 0b00011000; break; case 7: PORTB = 0b11001011; break; case 8: PORTB = 0x00| 0x08; break; case 9: PORTB = 0x01|0x08; break; default : PORTB = 0b11111000; break; } }
void FndDisplay3(char byteData); // 100 자리 출력 void FndDisplay3(char byteData){
switch( byteData){ case 0: PORTC = 0b10001000; break; case 1: PORTC = 0b11101011; break; case 2: PORTC = 0b01001100; break; case 3: PORTC = 0b01001001; break; case 4: PORTC = 0b00101011; break; case 5: PORTC = 0b00011001; break; case 6: PORTC = 0b00011000; break; case 7: PORTC = 0b11001011; break; case 8: PORTC = 0x00| 0x08; break; case 9: PORTC = 0x01|0x08; break; default : PORTC = 0b11111000; break; } }
// Timer 0 output compare interrupt service routine interrupt [TIM0_COMP] void timer0_comp_isr(void) { g_iTimer0Counter ++; if(g_iTimer0Counter>3) { if(++g_iCountData>999) g_iCountData = 0; g_iTimer0Counter = 0; } }
void main(void) {
char byteFND3; char byteFND2; char byteFND1;
g_iTimer0Counter = 0; g_iCountData = 980;
DDRA=0xFF; DDRB=0xFF; DDRC=0xFF;
ASSR=0x00; TCCR0=0x01; TCNT0=0x00; OCR0=0x20;
// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x02; ETIMSK=0x00;
ACSR=0x80; SFIOR=0x00;
// Global enable interrupts #asm("sei")
while (1) { byteFND3 = (g_iCountData/100%10); byteFND2 = (g_iCountData/10%10); byteFND1 = (g_iCountData%10);
FndDisplay3(byteFND3); FndDisplay2(byteFND2); FndDisplay1(byteFND1);
} } |
주요 부품
ATMEGA128 |
'CodeVision 용 소스' 카테고리의 다른 글
스위치 누를 때마다 1 증가하는 카운터 (0) | 2011.01.28 |
---|---|
스위치 누르면 ‘2’, 떼면 ‘1’ 을 FND에 표시 (0) | 2011.01.27 |
0000 ~ 9999 까지 FND 4 자리 출력하기 (0) | 2011.01.26 |
00 ~ 99까지 FND 2개에 출력하기 (0) | 2011.01.25 |
카운트 다운을 FND에 출력 (0) | 2011.01.22 |