메뉴 바로가기

서브메뉴 바로가기

본문 바로가기

logo

묻고 답하기
WhiteAT2013.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;

}

사진 및 파일 첨부

여기에 파일을 끌어 놓거나 왼쪽의 버튼을 클릭하세요.

파일 용량 제한 : 0MB (허용 확장자 : *.*)

0개 첨부 됨 ( / )