오늘은 버튼이 입력되는 때 LED의 움직임이 달라 지는 것을 연습 했다.
어떻게 보면 쉬운 것이지만
생각보다 코드가 조금 길었지만 그래도 쉬운 것들 밖에 없어서 이해하기는 쉬웠다.
이 버튼 입력 받는 방법에 대해서 설명을 하면
먼저 버튼 입력에 따른 LED의 움직임이 차이가 있어야 되기 때문에
버튼에 따른 LED 출력을 다르게 하였다.
그리고 포트의 입력은 PINX 도 처음으로 사용해 보았다.
PINF는 포트 F의 입력을 받는 레지스터로
여기에서는 버튼의 입력을 받는 걸로 하였다. 여기에서도
1이면 입력을 받고 0이면 입력을 받지 않는 다는 것이다.
코드는
==============================================================================
#include<avr/io.h>
#include<avr/delay.h>
typedef unsigned char byte;
byte i, led;
void delay_2s()
{
byte k;
for(k = 0; k < 200; k++)
{
_delay_ms(10);
}
}
void a()
{
led = 0xff;
for(i = 0; i < 8; i++)
{
PORTD = led;
led = (led >> 1);
delay_2s();
}
}
void b()
{
led = 0x00;
for(i = 0; i < 8; i++)
{
PORTD = led;
led = (led >> 1) | 0x80;
delay_2s();
}
}
void c()
{
led = 0x00;
for(i = 0; i < 8; i++)
{
PORTD = led;
led = (led << 1) | 0x01;
delay_2s();
}
}
void d()
{
led = 0xff;
for(i = 0; i < 8; i++)
{
PORTD = led;
led = (led << 1);
delay_2s();
}
}
int main(void)
{
byte sw;
DDRD = 0XFF;
DDRF = 0X00;
PORTF = 0X0F;
do{
sw = PINF & 0X0F;
switch(sw)
{
case 0x0e:
a();
break;
case 0x0d:
b();
break;
case 0x0b:
c();
break;
case 0x07:
d();
break;
default:
PORTD = 0X00;
delay_2s();
PORTD = 0xff;
delay_2s();
}
}while(1);
}
==============================================================================
이런식으로 하여 버튼 입력에 대한 변화를 알아 보았다.
다음에는 외부인터럽트나 LCD 입력에 대해서 한번 알아 볼까 생각 중이다.
'AVR' 카테고리의 다른 글
외부 인터럽트를 이용한 LED 켜고 끄기(실습) (0) | 2009.07.03 |
---|---|
외부 인터럽트를 이용한 LED 켜고 끄기(이론) (0) | 2009.07.03 |
LED 켜기 (0) | 2009.07.02 |
AVR Studio 4의 간단한 사용법 (0) | 2009.07.01 |
LED 연습을 할 브레드 보드 (0) | 2009.06.30 |