본문 바로가기

ATMEGA

ATmega 적외선 센서 응용실습 문제

<적외선 센서 응용 실습문제>

1. 적외선 센서로부터 감지 신호를 받으면 LED 전체를 껐다가 감지 신호가 없으면 켜기

#include
 <test.h>

void init_LED(void);

int main(void)
{
  volatile unsigned char a = 0;
  
  DDRA = 0x00;
  init_LED();
  
  for(;;)
  {
    a=PINA;
    a=a>>7;
    if(a==1)
      PORTE=0x00;
    else  
      PORTE=0xFF;
  }
  
  return 1;
}

init_LED(void)
{
  DDRE=0xFF;
  PORTE=0xFF;
}

2. 적외선 센서로부터 감지 신호를 받을때마다 LED 불빛이 좌측에서 우측으로 1칸씩 이동시키기

#include <test.h>

void init_LED(void);

int main(void)
{
  volatile unsigned char a = 0;
  unsigned char b = 0;
  unsigned char cnt = 0;
  unsigned char i = 00;
  DDRA = 0x00;
  init_LED();
  
  for(;;)
  {
    
    
    while((PINA&0x80)==0x00)
    {
      i=1;
    }
    if(i==1)
    {
      ++cnt;
      i=0;
      if(cnt==9)
        cnt=0;
    }
    
    PORTE=~((0x01)<<cnt);  
    
    
  }
  
  return 1;
}

init_LED(void)
{
  DDRE=0xFF;
  PORTE=0xFF;
}

 
3. 적외선 센서로부터 감지 신호를 받을때마다 FND의 값을 0에서부터 1씩 증가시키기

#include <test.h>

void init_LED(void);
void init_FND(void);

int main(void)
{
  volatile unsigned char a = 0;
  unsigned char b = 0;
  unsigned char cnt = 0;
  unsigned char cnt1 = 0;
  unsigned char i = 00;
  DDRA = 0x00;
  init_LED();
  init_FND();
  
  for(;;)
  {
    
    
    while((PINA&0x80)==0x00)
    {
      i=1;
    }
    if(i==1)
    {
      ++cnt1;
      ++cnt;
      i=0;
      if(cnt==9)
        cnt=0;
      if(cnt1==100)
        cnt1=0;
    }
    
    PORTE=~((0x01)<<cnt);  
    PORTF=(cnt1/10<<4)|cnt1%10;
    
    
    
    
  }
  
  return 1;
}

init_LED(void)
{
  DDRE=0xFF;
  PORTE=0xFF;
}

void init_FND(void)
{
  DDRF=0xFF;
  PORTF=0xFF;
}




















ex)LED증가했다가 감소하기

#include <test.h>

void init_LED(void);
void init_FND(void);

int main(void)
{
  volatile unsigned char a = 0;
  unsigned char b = 0;
  unsigned char cnt = 0;
  unsigned char cnt1 = 0;
  unsigned char i = 00;
  DDRA = 0x00;
  init_LED();
  init_FND();
  
  for(;;)
  {
    
    
    while((PINA&0x80)==0x00)
    {
      i=1;
    }
    if((i==1)&&(cnt<8))
    {
      PORTE=~((0x01)<<cnt);
      ++cnt1;
      ++cnt;
      i=0;
      
    }
    if((i==1)&&(cnt>7))
    {
      ++cnt1;
      ++cnt;
      i=0;
      PORTE=~((0x80)>>cnt-8);
      if(cnt==14)
        cnt=0;
    }
   }
  
  return 1;
}

init_LED(void)
{
  DDRE=0xFF;
  PORTE=0xFF;
}

void init_FND(void)
{
  DDRF=0xFF;
  PORTF=0xFF;
}

'ATMEGA' 카테고리의 다른 글

ATMEGA 두더지 잡기 게임 동영상  (2) 2010.11.12
11월 4일 ATMEGA  (0) 2010.11.04
11월 3일 ATMEGA  (0) 2010.11.03
ATmega 8장_1 직렬통신 응용 실습문제  (0) 2010.11.03
ATmega 단방향 직렬통신 응용 문제  (0) 2010.11.02