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);

 

}

   

 

 

 

 

주요 부품

Posted by WhiteAT
,