메뉴 바로가기
서브메뉴 바로가기
본문 바로가기
// 스위치 입력 상태는 받는 변수를 하나 만들어서 처리하면 좀더 간단합니다.
// g_Status 이 1이면 1번 상태
// 2이면 2번 상태, 3이면 3번 상태, 4이면 4번 상태,
// 그리고 LED는 g_Status 변수에 따라 처리하면 인터럽트
// 없이도 처리 가능합니다.
#include <avr/io.h>
#include <util/delay.h>
void key_in(void);
unsigned char LED_Data[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
unsigned char input= 0;
int i,j;
//1 PORTD.4에연결된버튼스위치가ON되면, PORTB.0
//
//PORTB.7의순서로LED가하나씩점멸
// 2 PORTD.5에연결된버튼스위치가ON되면, PORTB.7
// PORTB.0의순서로LED가하나씩점멸
// 3 PORTD.6에연결된버튼스위치가ON되면, PORTB에연결된모
// 든LED가점멸
// 4 PORTD.7에연결된버튼스위치가ON되면, 8개LED중상위4개,
// 하위4개의LED가교대로점멸
unsigned char g_Status = 0; //0:
int iStep; // 0 ~7 까지왕복
void key_in(void)
{
input = PIND;
// PORTD.4 가눌리면
if((input & 0x10)!= 0x10)
g_Status = 1;
}
else if((input & 0x20)!= 0x20) // PORTD.5 가눌리면
g_Status = 2;
else if((input & 0x40)!= 0x40) // PORTD.6 가눌리면
g_Status = 3;
else if((input & (0x80)) != 0x80) // PORTD.7 가눌리면
g_Status = 4;
else
g_Status = 0;
iStep = 0;
int main(void)
DDRD = 0x00;
DDRE = 0xff;
while(1)
key_in();
if(g_Status ==1)
PORTE = LED_Data[iStep];
iStep++;
if(iStep>7) iStep = 0;
else if(g_Status ==2)
iStep--;
if(iStep<0) iStep = 7;
else if(g_Status ==3)
if((iStep++ %2) ==0)
PORTE = 0xFF;
PORTE = 0x00;
else if(g_Status ==4)
PORTE = 0x0F;
PORTE = 0xf0;
_delay_ms(20*25);
return 0;
여기에 파일을 끌어 놓거나 왼쪽의 버튼을 클릭하세요.
파일 용량 제한 : 0MB (허용 확장자 : *.*)
업로드 중... (0%)
#include <avr/io.h>
#include <util/delay.h>
void key_in(void);
unsigned char LED_Data[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
unsigned char input= 0;
int i,j;
//1 PORTD.4에연결된버튼스위치가ON되면, PORTB.0
//
//PORTB.7의순서로LED가하나씩점멸
// 2 PORTD.5에연결된버튼스위치가ON되면, PORTB.7
// PORTB.0의순서로LED가하나씩점멸
// 3 PORTD.6에연결된버튼스위치가ON되면, PORTB에연결된모
// 든LED가점멸
// 4 PORTD.7에연결된버튼스위치가ON되면, 8개LED중상위4개,
// 하위4개의LED가교대로점멸
unsigned char g_Status = 0; //0:
int iStep; // 0 ~7 까지왕복
void key_in(void)
{
input = PIND;
// PORTD.4 가눌리면
if((input & 0x10)!= 0x10)
{
g_Status = 1;
}
else if((input & 0x20)!= 0x20) // PORTD.5 가눌리면
{
g_Status = 2;
}
else if((input & 0x40)!= 0x40) // PORTD.6 가눌리면
{
g_Status = 3;
}
else if((input & (0x80)) != 0x80) // PORTD.7 가눌리면
{
g_Status = 4;
}
else
{
g_Status = 0;
iStep = 0;
}
}
int main(void)
{
DDRD = 0x00;
DDRE = 0xff;
while(1)
{
key_in();
if(g_Status ==1)
{
PORTE = LED_Data[iStep];
iStep++;
if(iStep>7) iStep = 0;
}
else if(g_Status ==2)
{
PORTE = LED_Data[iStep];
iStep--;
if(iStep<0) iStep = 7;
}
else if(g_Status ==3)
{
if((iStep++ %2) ==0)
PORTE = 0xFF;
else
PORTE = 0x00;
}
else if(g_Status ==4)
{
if((iStep++ %2) ==0)
PORTE = 0x0F;
else
PORTE = 0xf0;
}
_delay_ms(20*25);
}
return 0;
}