비트 연산하여 LED를 옮기는 방법은 아래 자료를 참고한다.
https://ansan-survivor.tistory.com/1207
여기에서는 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);
}
}
(결과)
동일한 기능을 하는 코드인데, 배열을 이용하는 방법이다.
#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모듈 구매는
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
필요시 여러 학습 모듈 킷트를 구매해서 사용하면 좋다. (LED, 센서 등등)
USB to ISP 전송 케이블 (코드를 MCU에 넣기 위해)
'펌웨어 (firmware) > Atmega' 카테고리의 다른 글
[Atmega128] 아트메가 LED 스위치로 비트연산 옮기기 (Switch 클릭 LED 한칸씩 움직이기) (0) | 2022.01.22 |
---|---|
[Atmega128] 아트메가 비트연산 Switch 클릭 LED 토글시키기 (스위치로 LED 켰다 껐다) (0) | 2022.01.22 |
[Atmega128] 아트메가 비트연산으로 LED한칸씩 옮기기 (0) | 2022.01.16 |
[Atmega] Atmega128 기본 공개 모듈 회로도 및 PCB 설계도 (0) | 2021.11.22 |
[Atmega] Atmega 분주비 계산식 엑셀 공유. 분주비 쉽게 구하기. (0) | 2021.11.15 |