00 ~ 99 까지 FND 2개에 출력하기

 

00 ~ 99 까지 무한히 반복하는 카운터 입니다.

PORTA 를 FND1(일의 자리)에 연결하였고

PORTB 를 FND2(십의 자리)에 연결합니다.

 

 

 

 

 

 

 

전체 소스 Codevision 용

 

 

/*********************************************

00 ~ 99 까지 무한히 반복

PORTA ==> FND1 에 출력

PORTB ==> FND2 에 출력

 

Tools : Codevision

http://watsim.tistory.com

*********************************************/

 

 

#include <mega128.h>

 

// FND 에 출력할 실제 데이터

int g_iCountData;

 

 

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

    }

}

 

// Timer 0 output compare interrupt service routine

interrupt [TIM0_COMP] void timer0_comp_isr(void)

{

    g_iTimer0Counter ++;

    if(g_iTimer0Counter>5) {

         if(++g_iCountData> 99) g_iCountData=0;

        g_iTimer0Counter = 0;

    }

}

 

void main(void)

{

char byteFND1;

    char byteFND2;

 

    g_iTimer0Counter = 0;

    g_iCountData = 0;

 

    DDRA=0xFF;

    DDRB=0xFF;

 

    ASSR=0x00;

    TCCR0=0x01;

    TCNT0=0x00;

    OCR0=0x20;

    

    // Timer(s)/Counter(s) Interrupt(s) initialization

    TIMSK=0x02;

    ETIMSK=0x00;

 

    ACSR=0x80;

    SFIOR=0x00;

 

    #asm("sei")

 

    while (1)

    {

         byteFND2 = (unsigned char)g_iCountData/10 ;

    byteFND1 = (unsigned char)g_iCountData%10;

         FndDisplay2(byteFND2);

        FndDisplay1(byteFND1);

}

}

 

 

주요 부품

 

Posted by WhiteAT
,