atmega128 FND 질문
페이지 정보
작성자 studio4 작성일19-12-05 01:44 조회4,341회 댓글0건본문
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdlib.h>
#define OVERFLOW 256
#define TICKS_PER_SEC 500
unsigned int i = 0;
unsigned int j = 0;
unsigned int count = 0;
unsigned int tick_time, ran;
char buf[4]={0,0,0,8};
char buf2[4]={1,64,8,0};
char sit[4]={1,2,4,8};
char sit2[4]={1,2,4,8};
void clr(int p)
{
buf[p]&=~8;
}
void set(int p)
{
buf[p]|= 8;
}
ISR(TIMER0_OVF_vect)
{
DDRC = 0xFF;
DDRG = 0x0F;
DDRA = 0xFF;
PORTA = 0x03;
TCNT0 = OVERFLOW-125;
tick_time++;
ran = rand() % 4;
if(tick_time == TICKS_PER_SEC) {
PORTC = buf2[i]; //낙하물
PORTG = sit2[j]; //낙하물 위치
_delay_ms(10);
tick_time = 0;
i++;
count++;
if(i>3){
i = 0;
j = ran;
}
}
}
int main()
{
char flag1 = 0, flag2 = 0;
int position = 3;
int p;
PORTE = 0x30;
DDRC = 0xFF;
DDRG = 0x0F;
TCNT0 = OVERFLOW - 125;
TIMSK = 0x01;
sei();
TCCR0 = 0x05;
while(1){
if((PINE & 0x20) == 0){
if(flag1 == 0){
flag1 = 1;
clr(position);
if(++position > 3)
position = 0;
set(position);
}
}
else{
flag1 = 0;
}
if((PINE & 0x10) == 0){
if(flag2==0){
flag2 = 1;
clr(position);
if(--position<0)
position=3;
set(position);
}
}
else{
flag2 = 0;
}
PORTC=buf[0];
PORTG=sit[0];
_delay_ms(50);
PORTC=buf[1];
PORTG=sit[1];
_delay_ms(50);
PORTC=buf[2];
PORTG=sit[2];
_delay_ms(50);
PORTC=buf[3];
PORTG=sit[3];
_delay_ms(50);
if(count > 40){ //20초 지나면
PORTC = 0x40;
PORTG = 0x0F;
break;
}
if(sit == sit2[j]){ //피하는개체와 낙하물의 위치가 같고
if(buf[position] == buf2[i]){ //피하는개체와 낙하물이 겹치면
PORTC = 0x40;
PORTG = 0x0F;
break;
}
}
}
return (1);
}
안녕하세요. 전에 해주신 답변으로 도움이 많이 됬습니다.
이제 동시에 표현은 된것같고, 낙하물과 피하는 개체가 겹치면 종료되는 것을 하고있습니다.
근데 피하는 개체가 어디에 있든 낙하물과 안겹쳐도 계속 낙하물이 0x08자리에 오면 종료되서.. 질문드립니다
댓글 : 0
조회수 : 4,341
등록된 댓글이 없습니다.