#include <avr/io.h>
int main()
{
DDRF=0xFF; //F포트의 IO핀을 출력용으로 설정
PORTF=0x00; //F포트의 IO핀 출력값 초기화
//F포트의 IO핀은 54~61번에 해당
for(;;)
{
asm("NOP"); //동기화를 위한 NOP 명령
PORTF=PINC; //PINC에 버튼 입력값 저장
} //PORTF는 LED 출력값 저장
//버튼 입력값을 LED 출력값으로 대입
return 1;
} |
응용 실습 예제
1.앞의 예제를 수정하여, LED가 모두 켜진 상태에서 버튼을 누를 경우 각 버튼에 해당하는 LED가 OFF되도록 하시오
#include <stdio.h>
int main()
{
DDRC = 0x00;
DDRE = 0xFF;
PORTE = 0xFF;
volatile unsigned char i = 0;
volatile unsigned char a = 0;
for(;;)
{
asm("NOP");
i = 0;
a = ~PINC;
while(a>=1)
{
a/=2;
i++;
}
PORTE = i;
}
return 1:
}
|
2.버튼 누를 때마다 LED 켜지는데 이전 LED ON 상태도 그래도 유지하기. LED 모두 켜지면 LED all OFF 한다.
#include <avr/io.h>
int main(void)
{
//volatile unsigned char i;
//volatile unsigned int j;
volatile unsigned int k;
volatile unsigned int a;
DDRF=0xFF;
PORTF=0xff;
for(;;)
{
asm("NOP");
PORTF=PORTF&PINC;
if(PORTF==0x00)
{
for(a=1;a<15;a++)
{
for(k=1;k<60000;k++);
}
PORTF=0xFF;
}
} |
FND 실습 예제
#include <avr/io.h>
int main()
{
DDRC = 0x00;
DDRE = 0xFF;
PORTE = 0xFF;
volatile unsigned char i = 0;
volatile unsigned char a = 0;
for(;;)
{
asm("NOP");
i = 0;
a = ~PINC;
while(a>=1)
{
a/=2;
i++;
}
i=i|(i<<4);
PORTE = i;
}
return 1;
}
|
#include <avr/io.h>
int main()
{
DDRE = 0xFF;
PORTE = 0xFF;
volatile unsigned int i = 0;
volatile unsigned int j = 0;
for(i=0;i<256;i++)
{
PORTE=i;
for(j=0;j<60000;j++);
for(j=0;j<60000;j++);
}
return 1;
}
|