답변 : Atmega128과 도트매트릭스을 이용해 16x16미로찾기
페이지 정보
작성자 master 작성일23-05-26 18:19 조회443회 댓글0건본문
조이스틱으로 움직이게 하는 미로찾기를
만들고 싶어요 혹시 도움을 좀 주실수 있을까요? 이 코딩을 하면 16x16에서 오른쪽 절반만 나와요...
#include <mega128.h>
#include <delay.h>
#include <stdio.h>
//
#define RED PORTC.0
#define GREEN PORTC.1
#define ENABLE PORTC.2
#define LATCH PORTC.3
#define CLOCK PORTA.3
//
#define X_ST 512
#define Y_ST 512
#define DXY 200
//
flash char stage[16]={0x209F,0xEA91,0xA97,0xEA97,0x2AF4,0x2A04,0x2BF4,0x2894,0x2094,0x3E97,0x291,0xFE9F,0x8000,0xBFFF,0x8000,0xFFFF};
int dot_i=0,gx=0,gy=0;
unsigned int dot_gval[16],dot_rval[16];
//
void up_move() { int tmp; if(gy> 0){ tmp=dot_gval[gy]; dot_gval[gy]=0; gy--; dot_gval[gy]=tmp; } }
void down_move(){ int tmp; if(gy<15){ tmp=dot_gval[gy]; dot_gval[gy]=0; gy++; dot_gval[gy]=tmp; } }
//
void left_move() { if(gx> 0){ gx--; dot_gval[gy]<<=1; } }
void right_move(){ if(gx<15){ gx++; dot_gval[gy]>>=1; } }
//
interrupt [TIM0_OVF] void timer0_ovf_isr(){
int di;
for(di=0;di<16;di++){
if((dot_rval[dot_i]<<di)&0x8000)RED=1; else RED=0;
if((dot_gval[dot_i]<<di)&0x8000)GREEN=1; else GREEN=0;
CLOCK=1; delay_us(1); CLOCK=0; delay_us(1);
}
ENABLE=1;
LATCH=0; delay_us(2); LATCH=1;
PORTC=(PORTC&0x0F)|(dot_i<<4); delay_us(2);
ENABLE=0;
dot_i=(dot_i+1)%16;
}
//
void main(){
int i,joy_x=0,joy_y=0;
DDRA=0xFF;
PORTC=0x08; DDRC=0xFF;
TCCR0=0x04; TIMSK=0x01; SREG=0x80;
for(i=0;i<16;i++)dot_rval[i]=stage[i]<<0;
dot_gval[gy]=1<<(15-gx);
ADCSRA=0xE7;
while(1){
ADMUX=0; delay_us(250); joy_x=ADCW;
ADMUX=1; delay_us(250); joy_y=ADCW;
if((joy_x-X_ST)>DXY)up_move(); else if((X_ST-joy_x)>DXY)down_move();
if((joy_y-Y_ST)>DXY)right_move(); else if((Y_ST-joy_y)>DXY)left_move();
delay_ms(200);
}
}
이런 제품류의 답변은 여러번 달았지만 어느 모델인지 정확히 명시하지 않으면 데이터시트를 찾아볼 수가 없습니다.
데이터시트가 나와있는 사이트 링크를 댓글로 적어보세요
댓글 : 0
조회수 : 443
등록된 댓글이 없습니다.