BASIC4MCU | 질문게시판 | ATMEGA128 LED 제어 질문
페이지 정보
작성자 mango 작성일2023-07-22 00:54 조회3,222회 댓글2건본문
며칠전 질문 올렸던 학생입니다. 제가 작동하고자 하는 회로가
'active low' 회로임을 간과하고 있었습니다.
위 사진과 같이 PORTA에 연결하여 LED가 이동하고 쌓이고를 반복하게끔 하려고 합니다. 방향을 바꾸어서 같은 동작을 계속 진행시켜야 합니다.
1~8까지의 LED 이동은 아래와 같이 구현하였습니다. 그런데 그 이후의 동작들을 수행하려면 어떤 비트 연산을 써야하는지, for구문을 어떻게 적절히 사용하여 코드를 작성해야 하는지 감을 잡지 못하고 있습니다. 도와주시면 정말 감사하겠습니다.
#define F_CPU 16000000UL
#include
#include
int main(void)
{
char led=0xFE; //char은 8비트 자료형 변수,
DDRA= 0xFF; //A포트를 출력으로 설정
while (1)//무한루프
{
PORTA=led;
_delay_ms(500);//출력 시간 텀 0.5초
led<<=1;
led|=0x01;//변수에 저장된 값 변화->재출력
if(led==0xFF){
led=0xFE;
댓글 2
조회수 3,222master님의 댓글
master 작성일
몇일 전 질문에 강좌 링크를 드리지 않았나요?
https://cafe.naver.com/circuitsmanual/153359
이 코드를 공부해서 반대쪽 구동을 추가하면 되겠습니다.
알토이드님의 댓글
알토이드 작성일
unsigned char led[] =
{
0x1 , 0x2 , 0x4 , 0x8 , 0x10 , 0x20 , 0x40 , 0x80 ,
0x81 , 0x82 , 0x84 , 0x88 , 0x90 , 0xa0 , 0xc0 , 0xc1 ,
0xc2 , 0xc4 , 0xc8 , 0xd0 , 0xe0 , 0xe1 , 0xe2 , 0xe4 ,
0xe8 , 0xf0 , 0xf1 , 0xf2 , 0xf4 , 0xf8 , 0xf9 , 0xfa ,
0xfc , 0xfd , 0xfe , 0xff , 0x80 , 0x40 , 0x20 , 0x10 ,
0x8 , 0x4 , 0x2 , 0x1 , 0x81 , 0x41 , 0x21 , 0x11 ,
0x9 , 0x5 , 0x3 , 0x83 , 0x43 , 0x23 , 0x13 , 0xb ,
0x7 , 0x87 , 0x47 , 0x27 , 0x17 , 0xf , 0x8f , 0x4f ,
0x2f , 0x1f , 0x9f , 0x5f , 0x3f , 0xbf , 0x7f , 0xff
};
#define F_CPU 16000000UL
#include
#include
int main(void)
{
DDRA = 0xFF;
while( 1 ) for( auto l : led ) ( PORTA=0xff^l, _delay_ms(1000) );
return 0;
}