ATmega128 구구단 질문입니다.
페이지 정보
작성자 채여니 작성일18-12-11 15:04 조회4,456회 댓글0건본문
안녕하세요 ATmega128을 공부하고 있는 학생입니다.
학교에서 팀프로젝트로 ATmega128을 이용해 구구단 게임을 만들려고합니다.
저희가 최종적으로만들고자하는것은 스위치로 구구단 단수를 설정하여 난수를 이용하여 구구단게임을 만드는건데요
여기서 올려주신코드를 참고해서 이정도 까지 만들었습니다.
#include <mega128.h>
#include <delay.h>
#include <stdio.h>
#include <lcd.h>
#asm
.equ __lcd_port=0x1B ;포트A
#endasm
char KeyScan();
int cnt=0;
int Keyresult(char num){
int num1;
switch(num){
case '0':
num1 = 0;
break;
case '1':
num1 = 1;
break;
case '2':
num1 = 2;
break;
case '3':
num1 = 3;
break;
case '4':
num1 = 4;
break;
case '5':
num1 = 5;
break;
case '6':
num1 = 6;
break;
case '7':
num1 = 7;
break;
case '8':
num1 = 8;
break;
case '9':
num1 = 9;
break;
case 'A':
num1 = 10;
break;
case 'B':
num1 = 11;
break;
case 'C':
num1 = 12;
break;
case 'D':
num1 = 13;
break;
case 'E':
num1 = 14;
break;
case 'F':
num1 = 15;
break;
}
return num1;
}
char KeyScan(void){
char KeyBuf=0xFF; // 키 값이 들어갈 버퍼, 초기값 0xFF
PORTB=0xFF; // 포트 초기값, 입력핀 내부풀업저항 사용
DDRB=0x0F; // 비트0,1,2,3 출력으로 지정
PORTB.0=0; delay_us(5); // 1번째 줄 선택
if(!PINB.4)KeyBuf='0';
if(!PINB.5)KeyBuf='1';
if(!PINB.6)KeyBuf='2';
if(!PINB.7)KeyBuf='3';
PORTB.0=1; // 1번째 줄 해제
PORTB.1=0; delay_us(5); // 2번째 줄 선택
if(!PINB.4)KeyBuf='4';
if(!PINB.5)KeyBuf='5';
if(!PINB.6)KeyBuf='6';
if(!PINB.7)KeyBuf='7';
PORTB.1=1; // 2번째 줄 해제
PORTB.2=0; delay_us(5); // 3번째 줄 선택
if(!PINB.4)KeyBuf='8';
if(!PINB.5)KeyBuf='9';
if(!PINB.6)KeyBuf='A';
if(!PINB.7)KeyBuf='B';
PORTB.2=1; // 3번째 줄 해제
PORTB.3=0; delay_us(5); // 4번째 줄 선택
if(!PINB.4)KeyBuf='C';
if(!PINB.5)KeyBuf='D';
if(!PINB.6)KeyBuf='E';
if(!PINB.7)KeyBuf='F';
PORTB.3=1; // 4번째 줄 해제
if(cnt==1){
cnt=0;
}
else{
cnt++;
}
return KeyBuf; // Key 없으면 0xFF 리턴
}
void main(void){
char buf[20];
char buf1[20];
int a,b;
char result1;
char result2;
TCCR1B=0x0D; OCR1A=8; TIMSK=0x10; PORTD=4;
lcd_init(16); // lcd초기화
lcd_gotoxy(0, 0); lcd_putsf("9X9 GAME"); // 첫째줄 표시
while(1){
lcd_gotoxy(0,1);
b = TCNT1L+1;
sprintf(buf,"%d x %d =",2,b);
lcd_puts(buf);
result1 = KeyScan();
Keyresult(result1);
delay_ms(5000);
lcd_gotoxy(0,1);
result1 = KeyScan();
a=Keyresult(result1);
if(a==(2*b)){
lcd_gotoxy(0,1);
sprintf(buf,"");
sprintf(buf,"SUCESS");
lcd_puts(buf);
} else{
lcd_clear;
lcd_gotoxy(0,1);
sprintf(buf,"");
sprintf(buf,"FAIL");
lcd_puts(buf);
}
delay_ms(5000);
}
}
일단 2단으로 설정해서 만들었는데
여기서 처음화면은
9X9 GAME
A->START 화면이 뜨고
A버튼을 누르면 구구단 게임이 시작하고
9X9 GAME
2X9 =
이렇게 뜨면 키매트릭스로1과 8을 입력하면
18으로 인식하여 답이 맞으면 다음 문제로 넘어가게 하고싶습니다.
타이머를 사용해 난수를 만들어주었는데
타이머값을 어떻게 한루프? 안에 하나의 변수에 저장할수있나요...
도와주세요
댓글 : 0
조회수 : 4,456
등록된 댓글이 없습니다.