질문게시판 > 답변 : LED제어 delay함수에 관련해서 질문드립니다.

TODAY142 TOTAL237,836
사이트 이용안내
Login▼/회원가입
포럼 동영상강좌 회원가입


BASIC4MCU 후원업체 최신 정보

BASIC4MCU | 질문게시판 | 답변 : LED제어 delay함수에 관련해서 질문드립니다.

페이지 정보

작성자 master 작성일2018-04-16 02:48 조회519회 댓글5건

본문

	

 

// DateTime : 2018-04-16 오전 2:39:13
// by Ok-Hyun Park
#include <mega128.h>
#include <delay.h>
//
unsigned char LED,mode=0;
unsigned int  sec=10;
//
void main(void){
  DDRD=0xffDDRA=0xf0PORTD=0xff;
  LED=~0x01;
  while(1){
    if(!PINA.0)mode=0;
    if(!PINA.1){}
    if(!PINA.2){ mode=1if(sec<3000)sec++; }
    if(!PINA.3){ mode=1if(sec>  10)sec--; }
    //
    if(mode){ LED=(LED<<1)|1if(LED==0xFF)LED=~1PORTD=LEDdelay_ms(sec); }
    else    { PORTD=0xff; }
  }
}

질문 소스를 변경한겁니다.

딜레이가 시분할 된 것은 아니고요

 

 

// DateTime : 2018-04-16 오전 2:46:10
// by Ok-Hyun Park
#include <mega128.h>
#include <delay.h>
//
unsigned char LED,mode=0;
unsigned int  ms=0,sec=10;
//
void main(void){
  DDRD=0xffDDRA=0xf0;
  LED=~0x01PORTD=LED;
  while(1){
    if(!PINA.0)mode=0;
    if(!PINA.1){}
    if(!PINA.2){ mode=1if(sec<300)sec++; }
    if(!PINA.3){ mode=1if(sec>  1)sec--; }
    //
    if(mode){
      delay_ms(10);
      if(cnt>=sec){ cnt=0;
        LED=(LED<<1)|1if(LED==0xFF)LED=~1PORTD=LED;
      }
    }
    elsePORTD=0xff; }
  }
}

 

딜레이를 변경하긴 했지만 

키를 누르면 여러번 체크되면서 sec가 여러번 증가 또는 감소하게 됩니다.

 

// DateTime : 2018-04-16 오전 2:50:22
// by Ok-Hyun Park
#include <mega128.h>
#include <delay.h>
//
unsigned char LED,mode=0,flag2=0,flag3=0;
unsigned int  ms=0,sec=10;
//
void main(void){
  DDRD=0xffDDRA=0xf0;
  LED=~0x01PORTD=LED;
  while(1){
    if(!PINA.0)mode=0;
    if(!PINA.1){}
    if(!PINA.2){ if(flag2==0){ flag2=1mode=1if(sec<300)sec++; } } else flag2=0;
    if(!PINA.3){ if(flag3==0){ flag3=1mode=1if(sec>  1)sec--; } } else flag3=0;
    //
    if(mode){
      if(cnt>=sec){ cnt=0;
        LED=(LED<<1)|1if(LED==0xFF)LED=~1PORTD=LED;
      }
    }
    elsePORTD=0xff; }
    //
    delay_ms(10);
  }
}

 

하강엣지 검출기능을 사용하면 키를 오래 누르고 있어도 1회만 검출 됩니다.

 

 

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글 5

조회수 519

27315co님의 댓글

27315co 작성일

정말 감사합니다~~!

27315co님의 댓글

27315co 작성일

그런데 3번째 코딩에서 cnt는 변수가 선언이 안되있는데 어떤건지 여쭤봐도될까요?

master님의 댓글

master 댓글의 댓글 작성일

unsigned int  ms=0,sec=10,cnt=0;
변수선언 추가해주세요

27315co님의 댓글

27315co 댓글의 댓글 작성일

혹시 cnt 가 무슨용도로 쓰이는지 알수있을까요???
if(cnt>=sec){ cnt=0;
이부분에서 이해가 잘가지않습니다.

   

master님의 댓글

master 댓글의 댓글 작성일

cnt 위에 10ms 딜레이가 있어서
cnt *10ms 의 시간이 걸리게 되는데
sec가 증가 감소하게되면
cnt와 sec가 같아지는 시간이 달리지겠죠?
sec가 100이라면 1초마다 LED가 쉬프트 될 것이고
sec가 1이라면 10ms마다 LED가 쉬프트 됩니다.
//
딜레이로 LED를 쉬프트 시키게되면
딜레이가 길어서 그 사이에 버튼을 눌러도 인식하지 않게 됩니다.
cnt는 LED 쉬피트 딜레이를 시분할로 구동하기 때문에
sec가 길더라도 버튼 감지를 잘하게 됩니다.

질문게시판HOME > 질문게시판 목록

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.

ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
게시물 검색

Privacy Policy
MCU BASIC ⓒ 2017