Switch 4개의 상태에 따른 LED ON/OFF 변화

 

PE7에 연결된 SW1을 누르면 PC0, PC2, PC4, PC6 에 연결된 LED가 ON 되고,

PE6에 연결된 SW2을 누르면 PC1, PC3, PC5, PC7 에 연결된 LED가 ON 되고,

PE5에 연결된 SW3을 누르면 모든 LED가 OFF 되고,

PE4에 연결된 SW4을 누르면 모든 LED 가 ON 되는 예제입니다.

 

 

 

 


< PE4 PE7에 연결된 SW1을 누르면 PC0, PC2, PC4, PC6 에 연결된 LED가 ON >

 

 

 

< PE6에 연결된 SW2을 누르면 PC1, PC3, PC5, PC7 에 연결된 LED가 ON >

 

 

 

 

< PE5에 연결된 SW3을 누르면 모든 LED가 OFF >

 

 

 

 

< PE4에 연결된 SW4을 누르면 모든 LED 가 ON >

 

 

 

 

< 시뮬레이션 화면 >

 

 

 

 

 

 

 

전체 소스 Codevision 용

 

 

   

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

LED Control & Switch Input

 

PORTC ==> LED

PORTE.7 ==> Switch 1

PORTE.6 ==> Switch 2

PORTE.5 ==> Switch 3

PORTE.4 ==> Switch 4

 

PE7에 연결된 SW1을 누르면 PC0, PC2, PC4, PC6 에 연결된 LED가 ON 되고,

PE6에 연결된 SW2을 누르면 PC1, PC3, PC5, PC7 에 연결된 LED가 ON 되고,

PE5에 연결된 SW3을 누르면 모든 LED가 OFF 되고,

PE4에 연결된 SW4을 누르면 모든 LED 가 ON 되는 예제입니다.

 

 

 

Main Clock : 8Mhz

 

 

 

 

Tools : Codevision

http://watsim.tistory.com

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

 

 

 

typedef signed int INT16S;

typedef signed int UINT16;

typedef unsigned int INT16US;

typedef unsigned char INT8US;

typedef unsigned int WORD;

typedef unsigned char UINT8;

typedef unsigned char BOOL;

typedef unsigned char BYTE;

 

 

#define SetBit(PORT,ibit)        (PORT=PORT| ((1<<ibit)))

#define ClearBit(PORT, ibit)    (PORT=PORT&(~(1<<ibit)))

 

#include <mega128.h>

 

void main(void)

{

unsigned char key;

 

DDRE=0x00;     // PE4-PE7 INPUT

DDRC=0xFF;     // LED OUTPUT

PORTC=0xFF; //LED OFF

 

while(1)

{

     key = PINE & 0xFF;

switch(key)

{

case 0b11100000 : //SW1이 눌리면 LED모두 ON

PORTC=0x00;

break;

 

case 0b11010000 : //SW2가 눌리면 LED모두 OFF

PORTC=0xff;

break;

 

case 0b10110000 : //SW3이 눌리면 짝수번째 LED ON

PORTC=0b01010101;

break;

 

case 0b01110000 : //SW4가 눌리면 홀수번째 LED ON

PORTC=0b10101010;

break;

 

default:

 

break;

}

 

}

}

 

 

  

 

주요 부품

ATMEGA128 - 1EA

LED – 8EA

POWER 5V/1A

 

Posted by WhiteAT
,

 

Character LCD Control

 

Character LCD 에 문자열을 출력하는 예제입니다.

LCD 에 아래의 문자열이 출력됩니다.

WATSIM LCD TEST

watsim.tistory.c

 

        

 

 

 

 

LCD_PUTSTRINGS(0,0,"WATSIM LCD TEST ");

LCD_PUTSTRINGS(0,1,"watsim.tistory.c");

 

        

 

 

 

전체 소스 Codevision 용

 

 

   

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

Character LCD Control

PORTC ==> LCD DataLine

PORTD.7 ==> LCD RS

PORTD.6 ==> LCD RW

PORTD.5 ==> LCD E

 

 

Main Clock : 8Mhz

 

Tools : Codevision

http://watsim.tistory.com

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

 

 

 

typedef signed int INT16S;

typedef signed int UINT16;

typedef unsigned int INT16US;

typedef unsigned char INT8US;

typedef unsigned int WORD;

typedef unsigned char UINT8;

typedef unsigned char BOOL;

typedef unsigned char BYTE;

 

 

#define SetBit(PORT,ibit)        (PORT=PORT| ((1<<ibit)))

#define ClearBit(PORT, ibit)    (PORT=PORT&(~(1<<ibit)))

 

#include <mega128.h>

#define LCD_RS 7

#define LCD_EA 5

 

void CLCD_XY(BYTE x1, BYTE y1);

void CLCD_COMMAND(BYTE data);

void CLCD_ON();

BYTE LCD_BUSYCHK();

void LCD_PUTSTRINGS(BYTE x, BYTE y, char flash *str);

void LCD_PUTCHAR(BYTE chr);

void LCD_CLEAR();

 

// time delay for us

void Delay_us(unsigned char time_us)        

{

    register unsigned char i;

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

    {

#asm

        PUSH R0 ;

        POP R0 ;

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

    }

}

 

void main(void)

{

    unsigned char chLCDdata = '0';

    DDRA = 0x00;    

    DDRC = 0xFF;    

    DDRD = 0xFF;    

 

    SetBit(PORTD,5);    // ENABLE

    ClearBit(PORTD,6);

 

 

    CLCD_ON();

    LCD_CLEAR();

 

 

    while (1)

    {

        LCD_PUTSTRINGS(0,0,"WATSIM LCD TEST ");

        LCD_PUTSTRINGS(0,1,"watsim.tistory.c");

        Delay_ms(100);

    }

}

 

BYTE LCD_BUSYCHK()

{

    Delay_us(200);

    Delay_us(200);

    Delay_us(200);

    Delay_us(200);

    Delay_us(200);

    Delay_us(200);

    Delay_us(200);

    

    return (0);

}

 

 

void LCD_PUTSTRINGS(BYTE x, BYTE y, char flash *str)

{

    int len = 0;

    CLCD_XY(x,y);

    while(*str ){

        if(len>16) break;

        LCD_PUTCHAR(*str++);

        len++;

    }

}

 

 

 

void LCD_PUTCHAR(BYTE data)

{

    while(LCD_BUSYCHK());

    ClearBit(PORTD,LCD_EA);

    SetBit(PORTD,LCD_RS);

    Delay_us(2);

    PORTC= data;

    Delay_us(50);

    SetBit(PORTD,LCD_EA);

    Delay_us(50);

    ClearBit(PORTD,LCD_EA);

}

 

void LCD_CLEAR()

{

    CLCD_COMMAND(1);

    Delay_ms(1);

    CLCD_COMMAND(2);

    Delay_ms(1);

}

 

void CLCD_XY(BYTE x, BYTE y)

{

    BYTE position;

    if(x>16) x = 0;

    switch(y)

    {

    case 0 :

        position = 0x80;

        break;

    case 1 :

        position = 0xC0;

        break;

    }

    CLCD_COMMAND(position + x);

}

 

void CLCD_COMMAND(BYTE data)

{

    while(LCD_BUSYCHK()){}

    ClearBit(PORTD,LCD_RS);

    ClearBit(PORTD,LCD_EA);

    Delay_us(1);

    PORTC= data;

    Delay_us(50);

    SetBit(PORTD,LCD_EA);

    Delay_us(20);

    ClearBit(PORTD,LCD_EA);

    Delay_us(50);

}

 

void CLCD_ON()

{

    CLCD_COMMAND(0x01);// dummy

    CLCD_COMMAND(0x38);

    CLCD_COMMAND(0x0C );

    CLCD_COMMAND(0x01);

    CLCD_COMMAND(0x06);

    CLCD_COMMAND(0x01);

    Delay_ms(2);

}

 

 

 

 

 

 

 

주요 부품

ATMEGA128 - 1EA

ABC016002E57 – 1EA
Character LCD 16x2

POWER 5V/1A

 

 

Posted by WhiteAT
,

 

 

LED 순차 소등 하기 PORTC.0 => PORTC.7 순서로

 

1초 간격으로 LED 를 PORTC.0 부터 PORTC.7까지 OFF 하고, 모두 OFF 된 후에는 처음상태로 돌아간 후 반복합니다.

 

 

 

 

 

 

 

전체 소스 Codevision 용

 

 

   

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

LED 순차소등하기PORTC.0 => PORTC.7 순서로

PORTC ==> LED 연결

 

 

Tools : Codevision

http://watsim.tistory.com

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

 

 

#include <mega128.h>

 

// time delay for 20us

void Delay_20us(char time_us)        

{

    register char i;

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

    {

    #asm

         PUSH R0 ;         // 2 cycle +

         POP R0 ;         // 2 cycle +

    #endasm

    }

}

 

// time delay for ms

void Delay_1ms(unsigned int time_ms)    

{

    register unsigned int i;

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

    {

        Delay_20us(50);

    }

}

 

void main(void)

{

    char chTemp=0;

      

    DDRC=0xFF;

 

    while (1)

    {

        PORTC = 0x00;

        Delay_1ms(1000);

 

        for( chTemp = 0;chTemp<8;chTemp++)

        {

            PORTC |=(1<<chTemp);

            Delay_1ms(1000);

        }

    }

}

 

 

 

 

 

 

주요 부품

ATMEGA128 - 1EA

LED – 8EA

Register – 8EA

POWER 5V/1A

 

 

Posted by WhiteAT
,

 

LED 순차 점등 하기 PORTC.0 => PORTC.7 순서로

 

1초마다 LED 를 PORTC.0 부터 PORTC.7까지 ON 하고, 모두 ON 된 후에는 처음상태로 돌아간 후 반복합니다.

 

 

 

 

 

 

 

전체 소스 Codevision 용

 

 

   

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

LED 순차점등하기

PORTC ==> LED 연결

 

 

 

Tools : Codevision

http://watsim.tistory.com

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

 

 

#include <mega128.h>

 

// time delay for us

void Delay_20us(char time_us)        

{

    register char i;

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

    {

    #asm

         PUSH R0 ;         // 2 cycle +

         POP R0 ;         // 2 cycle +

    #endasm

    }

}

 

// time delay for ms

void Delay_1ms(unsigned int time_ms)    

{

    register unsigned int i;

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

    {

        Delay_20us(50);

    }

}

 

void main(void)

{

    char chTemp=0;

 

    DDRC=0xFF;

 

 

    while (1)

    {

    PORTC = 0xFF;

    Delay_1ms(1000);

      

    for( chTemp = 0;chTemp<8;chTemp++)

    {

        PORTC <<=1;

         Delay_1ms(1000);

    }

    }

}

 

 

 

 

 

주요 부품

ATMEGA128

LED,

Register

 

 

Posted by WhiteAT
,

LED ON

데이터시트 2011. 1. 30. 15:28

 

LED ON

 

LED는 ANODE(+) 와 CATHODE(-) 의 2 핀으로 이루어 집니다.

아래 그림에서 위쪽이 ANODE, 아래쪽이 CATHODE 입니다.

 

 

LED를 켜려면 일정한 전류를 흘려주면 되는데 전압과 저항을 추가해 주면 됩니다.

아래 예에서는 5V, 1K가 사용되어서 약 4.3mA가 흐르게 됩니다.

I = V/R, 4.3mA = (5V-0.7V)/1K

 

 

 

LED 극성

일반적으로 다리가 긴 쪽에 +, 짧은 쪽에 –를 연결하면 되는데

간혹 중국산 중에 반대로 되어 있는 것도 있으니 꼭 확인 후 사용해야 합니다.

 

 

'데이터시트' 카테고리의 다른 글

ATMEGA8A-AU  (0) 2012.03.07
Package information - SO16−28 [WIDE]  (0) 2011.08.28
키 패드 제어, 매트릭스 키, 스위치 제어  (0) 2011.07.15
가변저항(Potentiometer) 3362  (1) 2011.07.07
5101ASR , FND Anode  (0) 2011.01.22
Posted by WhiteAT
,

 

1초마다 1칸씩 LED 시프트하기

 

1초마다 1칸씩 LED를 시프트 합니다. 마지막 LED가 ON 되면 처음으로 돌아갑니다.

 

 

 

 

 

 

 

 

 

전체 소스 Codevision 용

 

 

   

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

LED 이동하기

PORTA ==> LED 연결

 

 

 

Tools : Codevision

http://watsim.tistory.com

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

 

 

#include <mega128.h>

 

// time delay for us

void Delay_10us(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 +

 

    #endasm

    }

}

 

// time delay for ms

void Delay_ms(unsigned int time_ms)    

{

    register unsigned int i;

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

    {

        Delay_10us(50);

        Delay_10us(50);

        Delay_10us(50);

        Delay_10us(50);

        Delay_10us(50);

    }

}

 

void main(void)

{

    char byteA=0xFE;

 

    DDRA=0xFF;

//     PORTA = 1;

 

 

    while (1)

    {

    Delay_ms(100);

 

    PORTA = byteA;

    byteA =     (byteA<<1) | 0x01;     

      

    if(0xff == byteA)

         byteA=0xFE;

 

      

}

}

 

 

 

 

 

 

주요 부품

ATMEGA128

 

 

Posted by WhiteAT
,

 

 

스위치 누를 때마다 1 증가하는 카운터

 

스위치를 누를때마다 1씩 증가하는 카운터입니다.

 

 

 

 

 

 

 

 

전체 소스 Codevision 용

 

 

   

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

버튼 누를 때마다 카운터 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)

{

    unsigned char chLastPinB=0;

    char byteA=0;

 

    DDRA=0xFF;

    DDRB=0x00;

 

    while (1)

    {

        // 키가 눌러지면

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

        {

             if( 0x01 != (chLastPinB & 0x01) )

             {

                  byteA ++ ;

          }

          chLastPinB = 1;

        }

        else

        {

          chLastPinB = 0;

        }

 

        FndDisplay1(byteA%10);

}

}

 

 

 

 

 

 

주요 부품

ATMEGA128

TACT SWITCH

 

 

Posted by WhiteAT
,

 

 

스위치 누르면 '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
,