메뉴 바로가기

서브메뉴 바로가기

본문 바로가기

logo

묻고 답하기
조회 수 11,403 추천 수 0 댓글 3
?

단축키

Prev이전 문서

Next다음 문서

위로 아래로 댓글로 가기 인쇄 쓰기 목록
?

단축키

Prev이전 문서

Next다음 문서

위로 아래로 댓글로 가기 인쇄 쓰기 목록
?
  • WhiteAT 2013.04.25 15:55

    // 스위치 입력 상태는 받는 변수를 하나 만들어서 처리하면 좀더 간단합니다.

    // g_Status 이 1이면 1번 상태

    // 2이면 2번 상태, 3이면 3번 상태, 4이면 4번 상태,

     

    // 그리고 LED는 g_Status 변수에 따라 처리하면 인터럽트

    // 없이도 처리 가능합니다.

     

     

     

    #include <avr/io.h>

    #include <util/delay.h>

    void key_in(void);

    unsigned char LED_Data[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};

    unsigned char input= 0;

    int i,j;

     

     

     

    //1 PORTD.4에연결된버튼스위치가ON되면, PORTB.0

    //

    //PORTB.7의순서로LED가하나씩점멸

    // 2 PORTD.5에연결된버튼스위치가ON되면, PORTB.7

    // PORTB.0의순서로LED가하나씩점멸

    // 3 PORTD.6에연결된버튼스위치가ON되면, PORTB에연결된모

    // LED가점멸

    // 4 PORTD.7에연결된버튼스위치가ON되면, 8LED중상위4,

    // 하위4개의LED가교대로점멸

    unsigned char g_Status = 0; //0:

     

     

    int iStep; // 0 ~7  까지왕복

     

    void key_in(void)

    {

            input = PIND;

     

            // PORTD.4 가눌리면

            if((input &  0x10)!= 0x10)

            {

                   g_Status = 1;

            }

            else if((input & 0x20)!=  0x20)       // PORTD.5 가눌리면

            {

                   g_Status = 2;

            }

            else if((input & 0x40)!= 0x40)        // PORTD.6 가눌리면

            {

                   g_Status = 3;

            }

            else if((input & (0x80)) != 0x80)     // PORTD.7 가눌리면

            {

                   g_Status = 4;

            }

            else

            {

                   g_Status = 0;

                   iStep = 0;

            }

    }

    int main(void)

    {

            DDRD = 0x00;

            DDRE = 0xff;

     

            while(1)

            {

                   key_in();

     

                   if(g_Status ==1)

                   {

                           PORTE = LED_Data[iStep];

                           iStep++;

                           if(iStep>7) iStep = 0;

                   }

     

                   else if(g_Status ==2)

                   {

                           PORTE = LED_Data[iStep];

                           iStep--;

                           if(iStep<0) iStep = 7;

                    }

                   else if(g_Status ==3)

                   {

                           if((iStep++ %2) ==0)

                                  PORTE = 0xFF;

                           else

                                  PORTE = 0x00;

     

     

                   }

                   else if(g_Status ==4)

                   {

                           if((iStep++ %2) ==0)

                                  PORTE = 0x0F;

                           else

                                  PORTE = 0xf0;

                   }

     

     

                   _delay_ms(20*25);

     

            }

            return 0;

    }

  • 이경인 2016.11.30 10:17

    혹시 이 프로그램 짤때 헤더파일은 없는건가요? 헤더파일 있으시면 참고좀가능할까요??..

  • WhiteAT 2016.11.30 11:08

    이경인 님에게 달린 댓글

    별도의 헤더 파일은 없습니다.

    AVRStudio 로 기본적으로 제공되는 파일만으로 가능합니다.~


목록
Board Pagination Prev 1 Next
/ 1