BASIC4MCU | 질문게시판 | Atmega128 led 왕복 점등 및 스위치 방향 전환
페이지 정보
작성자 MaeuM 작성일2022-05-06 16:53 조회238회 댓글1건본문
프로그램이 시작되면 LED가 왕복 점등을 반복하고, 스위치를 누를 때마다 현재 점등된 LED 위치에서 방향 전환이 이루어지는 프로그램을 (폴링 방식으로) 구현하고자 합니다. (스위치 개수는 1개)
#include <mega128.h>
#include <delay.h>
void main(void)
{
char key, oldkey, flag, led;
DDRD = 0b00000000;
DDRC = 0b11111111;
led = 0b11111110;
flag = 0;
oldkey = PIND & 0b00000100;
while(1)
{
key = PIND & 0b00000100;
if(oldkey != key)
flag = ++flag%2;
while(led != 0x7F)
{
PORTC = led;
delay_ms(300);
led = (led<<1)|0b00000001;
if(flag~~)
{
break;
}
}
while(led != 0xFE)
{
PORTC = led;
delay_ms(300);
led = (led>>1)|0b10000000;
if(flag~~)
{
break;
}
}
oldkey = key;
}
대략 이런 식으로, 스위치를 누를 때마다 flag 값이 변하게 되고, if문 안에 break문을 넣어서 스위치 입력에 따라 while 문에서 빠져나가 다른 while문이 실행 되도록 프로그래밍 하려고 하는데 감이 잘 안 잡혀서 혹시나 도움 받을 수 있을까 하여 질문 드립니다.
댓글 1
조회수 238master님의 댓글
master 작성일
#include <mega128.h>
#include <delay.h>
//
void main(void){
char dir=0,led=0xFE;
DDRC=0xFF;
oldkey=PIND&4; // PD2
while(1){
while(led!=0x7F){
PORTC=led; led=(led<<1)|0x01; delay_ms(300);
if(PIND&4)break; // PD2
}
while(led !=0xFE){
PORTC=led; led=(led>>1)|0x80; delay_ms(300);
if(PIND&4)break; // PD2
}
}
}
와일문 안에서 스위치를 체크해야 합니다.
스위치는 300ms보다 짧은 시간동안 눌러야 합니다.