<적외선 센서 응용 실습문제>
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;
} |
|