BASIC4MCU | 질문게시판 | 답변 : ATmega128 구구단 질문입니다.
페이지 정보
작성자 master 작성일2018-12-11 16:14 조회8,022회 댓글1건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=6718
본문
// 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
조회수 8,022노트님의 댓글
노트 작성일감사합니다 ㅠㅠ 덕분에 할 수 있었어요 ㅠㅠㅠ