스위치 누르면 '2', 떼면 '1' 을 FND에 표시

 

스위치를 누를때마다 '1'과 '2'를 표시합니다.

 

 

 

 

 

 

 

 

전체 소스 Codevision 용

 

 

   

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

버튼 누르면 2, 떼면 1 표시되게

PORTA ==> FND1 에 출력

 

PORTB.0 스위치 입력

 

Tools : Codevision

http://watsim.tistory.com

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

 

 

#include <mega128.h>

 

void FndDisplay1(char byteData);

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 main(void)

{

    char byteA=9;

 

    DDRA=0xFF;

    DDRB=0x00;

 

    while (1)

    {

        if(0x01 == (PINB & 0x01))

        {

             byteA = 1 ;

        }

        else

        {

              byteA = 2;

        }

 

 

        FndDisplay1(byteA%10);

}

}

 

 

 

 

 

 

주요 부품

ATMEGA128

TACT SWITCH

 

Posted by WhiteAT
,

 

0000 ~ 9999 까지 4자리 숫자 표시

 

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

 

 

 

 

 

 

 

 

 

 

 

 

전체 소스 Codevision 용

 

 

   

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

000 ~ 999 까지 무한히 반복

PORTA ==> FND1 에 출력

PORTB ==> FND2 에 출력

PORTC ==> FND3 에 출력

PORTD ==> FND4 에 출력

 

Tools : Codevision

http://watsim.tistory.com

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

 

 

#include <mega128.h>

 

 

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

unsigned int g_iCountData = 0;

 

 

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

    }

}

 

 

void FndDisplay4(char byteData); // 1000 자리 출력

void FndDisplay4(char byteData){

 

    switch( byteData){

    case 0: PORTD = 0b10001000; break;

    case 1: PORTD = 0b11101011; break;

    case 2: PORTD = 0b01001100; break;

    case 3: PORTD = 0b01001001; break;

    case 4: PORTD = 0b00101011; break;

    case 5: PORTD = 0b00011001; break;

    case 6: PORTD = 0b00011000; break;

    case 7: PORTD = 0b11001011; break;

    case 8: PORTD = 0x00| 0x08; break;

    case 9: PORTD = 0x01|0x08; break;

    default : PORTD = 0b11111000; break;

    }

}

 

// Timer 0 output compare interrupt service routine

interrupt [TIM0_COMP] void timer0_comp_isr(void)

{

    g_iTimer0Counter ++;

    if(g_iTimer0Counter>2) {

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

        g_iTimer0Counter = 0;

    }

}

 

void main(void)

{

char byteFND1;

    char byteFND2;

    char byteFND3;

    char byteFND4;

 

    g_iTimer0Counter = 0;

    g_iCountData = 9998;

 

    DDRA=0xFF;

    DDRB=0xFF;

    DDRC=0xFF;

    DDRD=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)

    {

 

    byteFND4 = (g_iCountData/1000%10);

    byteFND3 = (g_iCountData/100%10);

        byteFND2 = (g_iCountData/10%10);

        byteFND1 = (g_iCountData%10);

      

         FndDisplay4(byteFND4);

        FndDisplay3(byteFND3);

    FndDisplay2(byteFND2);

        FndDisplay1(byteFND1);

}

}

   

 

 

 

 

주요 부품

 

 

Posted by WhiteAT
,

 

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
,

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
,

 

카운트 다운을 FND에 출력

 

9 ~ 0 까지 무한히 반복하는 카운트다운 입니다.

 

 

 

 

전체 소스 Codevision 용

 

 

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

9 ~0 까지 무한히 반복

FND 에 출력

 

Tools : Codevision

http://watsim.tistory.com

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

 

#include <mega128.h>

 

// time delay for us

void Delay_us(char time_us)        

{

    register char i;

    for(i = 0; i < time_us; i++)            // 4 cycle +

    {

    #asm

         PUSH R0 ;         // 2 cycle +

         POP R0 ;         // 2 cycle +

         PUSH R0 ;         // 2 cycle +

         POP R0 ;         // 2 cycle +

         PUSH R0 ;         // 2 cycle +

         POP R0 ;         // 2 cycle = 16 cycle = 1 us for 16MHz

    #endasm

    }

}

 

// time delay for ms

void Delay_ms(unsigned int time_ms)    

{

    register unsigned int i;

    for(i = 0; i < time_ms; i++)

    {

        Delay_us(250);

        Delay_us(250);

        Delay_us(250);

        Delay_us(250);

    }

}

 

// Display to FND

void FndDisplay1(char byteData);

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 main(void)

{

    signed char byteA=9;

 

    PORTA=0x00;

    DDRA=0xFF; // output

 

    while (1)

    {

        FndDisplay1(byteA);

        Delay_ms(100);

      

        if(--byteA <0) byteA = 9;

    }

}

 

 

 

 

주요 부품

Posted by WhiteAT
,