프로그래밍

 3198, 1/160 회원가입  로그인  
   oh88kth
   마이크로프로세서에서 avr로 프로그램짜서 LED 순차점등인데요~

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=2939 [복사]


왼쪽으로 한 비트씩 이동하면서 켜지는 소스인데요~

이게 왼쪽으로 비트가 다 이동하면 다시 초기값을 줘서 무한 루프를 도는데요~

초기값이 되기 전에 다시 거꾸로 오른쪽으로 한비트씩 옮겨 LED가 순차 점등하는 방법을 몰라서요~

왼쪽으로 순차 점등하다가 초기값으로 돌아오지않고 반대 방향으로 순차 점등 하여 무한루프를 돌 소스좀

밑에 소스에서 추가해야할 것 좀 알려주세요~ 마이크로 프로세서를 첨 접해봐서 이래저래 어렵네요ㅠ

C 실력도 형편없는지라... 부탁드립니다.


#include<avr/io.h>
#include<avr/interrupt.h>
#include<util/delay.h>

unsigned char Time_STOP=0;

SIGNAL(SIG_INTERRUPT0);

int main()
{
        unsigned char LED_DATA=0x01;

        DDRD=0xFE;
        DDRE=0xFF;
        EICRA=0x0f;
        EICRB=0x00;
        EIFR=0x01;

        sei();
        while(1)
        {
                PORTE=LED_Data;

                if(Time_STOP==0)
                {
                        if(LED_Data==0x80)  LED_Data=0x01;
                        else LED_Data<<=1;
                }
        _delay_ms(100);
        }
        return 0;
}

SIGNAL(SIG_INTERRUPT0)
{
        cli();
        if(Time_STOP==0)
                Time_STOP=1;
        else
                Time_STOP=0;
                sei();
}

  Hit : 10688     Date : 2011/04/06 09:36



    
blueh4g 음? 재작년에 avr 갖고놀때 같은거 만들었었는데 ㅋㅋ

http://www.youtube.com/blueh4g

http://www.youtube.com/blueh4g#p/u/3/CEcf9l774C4
http://blueh4g.tistory.com/17

참고해주세요 ㅋㅅㅋ
2011/04/07  
blueh4g 음.. 근데 제가 했던거랑 avr 키트가 다른건가보네요a

일단 지금은 제가 키트를 갖고있지 않은 상황이라 = ㅅ=;;

소스를 수정은 해보겠지만, 되는지 안되는지는 확인이 안되네요... 혹시 안되면 또 질문주세요a


#include<avr/io.h>
#include<avr/interrupt.h>
#include<util/delay.h>

unsigned char Time_STOP=0;

SIGNAL(SIG_INTERRUPT0);

int main()
{
unsigned char LED_DATA=0x01;
unsigned char direction_sw=0x01;

DDRD=0xFE;
DDRE=0xFF;
EICRA=0x0f;
EICRB=0x00;
EIFR=0x01;

sei();
while(1)
{
PORTE=LED_Data;

if(Time_STOP==0)
{
if(LED_Data==0x80)
direction_sw=0x00;
else if(LED_Data=0x01)
direction_sw=0x01;

if(direction_sw==0x01)
LED_Data<<=1;
else
LED_Data>>=1;

}
_delay_ms(100);
}
return 0;
}

SIGNAL(SIG_INTERRUPT0)
{
cli();
if(Time_STOP==0)
Time_STOP=1;
else
Time_STOP=0;
sei();
}


===============

direction_sw 라는걸로 방향을 셋팅하게 하고 왼쪽 끝에 도달하거나 오른쪽 끝에 도달하면 해당 값만 바꿔주고, 그 밑에서 direction_sw 값에 따라 왼쪽으로 진행할지 오른쪽으로 진행할지를 나눠놓은거에요~

대충 메모장으로 금방 끄적댄거라 아마 중간에 에러같은거 나면 적당히 고쳐쓰세요;; ㅋㅋ
2011/04/07  
yangseungjin if - else 에서 else 값을 초기로 돌려줘야죠 그런데 위에서는 <<=1 로해놧네요 2011/04/07  
blueh4g yangseungjin // 음? 제 소스에서 말인가요;? 무슨얘긴지 조금만 더 디테일하게 말씀해주세요 ㅠ_ㅠ

아님 위에 oh88kth 님 소스에서 말씀이시라면

if(LED_Data==0x80) LED_Data=0x01; // 만약 끝까지 가게되면 초기화
else LED_Data<<=1; // 끝까지 안갔으면 끝까지 갈때까지 한칸씩 진행

이라서 한쪽방향으로만 움직이는 소스라면 저 소스가 맞아요a
2011/04/07