반응형

 

비트 연산하여 LED를 옮기는 방법은 아래 자료를 참고한다.

https://ansan-survivor.tistory.com/1207

 

[Atmega 128] 아트메가 비트연산으로 LED한칸씩 옮기기

(아래 직접 제작한 Atmega128 모듈으로 테스트를 진행했다.) https://ansan-survivor.tistory.com/1144 [PCB제작] OrCAD로 설계한 데이터를 JLCPCB를 통해 SMT 주문하기 ! (설계부터 PCB 주문 생산 까지) PCB제조..

ansan-survivor.tistory.com

 

여기에서는 LED를 좌측으로 LED를 옮겼다가 다시 우측으로 옮기는 코드이다.

dir 이라는 트리거를 정해서 0과 1으로 방향을 정했다.

 

포트는 PAn 포트를 사용.

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

int main(void)
{
	char led = 0x01; // LED 값 초기화 (첫번째가 바로 켜진다고 했을때)
	char dir = 0;	// 방향을 결정하는 트리거
	
	DDRA = 0xFF; // PORTA 출력 설정

	while(1){
		PORTA = led;

		if(dir == 0){
			if(led == 0x80)
				dir = 1;
			else
				led <<= 1;  // 0x08까지 좌측으로 이동
		}
		else{
			if(led == 0x01) // 0x01 이 되면 다시 우측으로 이동
				dir = 0;
			else
				led >>= 1;
		}
		_delay_ms(100);
	}
}

 

(결과)

끝까지 쭉 갔다가 다시 돌아오는 LED

 

동일한 기능을 하는 코드인데, 배열을 이용하는 방법이다.

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

int main(void)
{
	char led[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; // 켜질 LED를 배열 내 미리 등록
	char i;


	DDRA = 0xFF;

	while(1){
		for(i=0; i<8; i++){
			PORTA = led[i];
			_delay_ms(100);
		}
		
		for(i=7; i>0; i--){
			PORTA = led[i];
			_delay_ms(100);
		}
	}

}
반응형

 

 

 

이와 비슷한 LED모듈 구매는

https://coupa.ng/cbzIe9

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

 

AVR ATmega128 브레드보드 모듈 LA22

COUPANG

www.coupang.com

 

필요시 여러 학습 모듈 킷트를 구매해서 사용하면 좋다. (LED, 센서 등등)

https://coupa.ng/cbzNuF

 

아두이노 UNO R3 학습 키트 스타터 키트 스텝 모터 학습 키트 박스 포함

COUPANG

www.coupang.com

 

 

USB to ISP 전송 케이블 (코드를 MCU에 넣기 위해)

https://coupa.ng/cbzNFz

 

아두이노 USB ASP AVR ISP ICSP Atmega2560 다운로더

COUPANG

www.coupang.com

 

 

반응형

+ Recent posts