답변 : ATmega128 구구단 질문입니다.
페이지 정보
작성자 master 작성일18-12-11 16:14 조회5,280회 댓글1건본문
// MCU BASIC: https://www.basic4mcu.com
// DateTime : 2018-12-11 오후 4:23:42
// by Ok-Hyun Park
//
#include <mega128.h>
#include <delay.h>
#include <stdio.h>
#include <lcd.h>
#asm
.equ __lcd_port=0x1B; //포트A
#endasm
//
char KeyScan(void){
char KeyBuf=0xFF;
PORTB=0xFF; DDRB=0x0F;
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번째 줄 해제
return KeyBuf; // Key 없으면 0xFF 리턴
}
//
void main(void){
char buf[20]; int a,b,input; char key;
//
PORTD=4;
TCCR0=9; OCR0=8;
lcd_init(16);
while(1){
lcd_clear();
lcd_gotoxy(0,0); lcd_putsf("9X9 GAME");
lcd_gotoxy(0,1); lcd_putsf("any key to start");
//-----------------------------------------------
key=0xFF; while(key!=0xFF){ key=KeyScan(); } // 키 입력 대기
b=TCNT0+1;
while(key!=0xFF){ key=KeyScan(); } // 키 뗄 때까지 대기
//-----------------------------------------------
lcd_gotoxy(0,1); sprintf(buf,"2 x %d = ",b); lcd_puts(buf);
a=2*b;
//-----------------------------------------------
key=0xFF; while(key>9){ key=KeyScan(); } // 0~9 입력대기
input=key; // 첫번째 값 입력
lcd_gotoxy(8,1); lcd_putchar(key+'0');
while(key!=0xFF){ key=KeyScan(); } // 키 뗄 때까지 대기
//-----------------------------------------------
if(a>9){ // 결과가 2자리면 입력을 더 받음
key=0xFF; while(key>9){ key=KeyScan(); } // 0~9 입력대기
lcd_gotoxy(9,1); lcd_putchar(key+'0');
input*=10; // 처음 입력 받은 값은 십의자리로
input+=key; // 두번째 입력받은 값은 일의자리로
while(key!=0xFF){ key=KeyScan(); } // 키 뗄 때까지 대기
}
//-----------------------------------------------
lcd_clear();
lcd_gotoxy(0,0); sprintf(buf,"2 x %d = %d",b,a); lcd_puts(buf);
lcd_gotoxy(0,1);
if(a==input)lcd_putsf("SUCESS");
else lcd_putsf("FAIL");
//
delay_ms(3000);
}
}
댓글 : 1
조회수 : 5,280
노트님의 댓글
노트 작성일감사합니다 ㅠㅠ 덕분에 할 수 있었어요 ㅠㅠㅠ