질문게시판 > atmega128변환도와주세요....ㅠㅠ

인기검색어 > 아두이노 센서 ATMEGA128

최신글 질문게시판 동영상강좌 가입하기

▼ BASIC4MCU 후원업체 신제품 정보 ▼

▲ BASIC4MCU 후원업체 신제품 정보 ▲

BASIC4MCU > 질문게시판

atmega128변환도와주세요....ㅠㅠ

페이지 정보

작성자 리따몽 작성일18-12-11 14:49 조회3,779회 댓글0건

본문

 혹시 이숫자 맞추기게임은 <mega128.h>로 바꿔주실 수 있나요?

혹시.....해당 포트도 알수 있을까요(어디에 연결되는지....)

#include <avr/io.h>

#include <avr/interrupt.h>

#include <util/delay.h>

#include <stdio.h>

#include <stdlib.h>

  


#define SEG  PORTA //Port A 7-SEG data로 사용

#define Q   PORTB

  


#define KEY_C  PORTC //Port C Key Matrix 입력신호

#define KEY_L  PINC //Port C Key Matrix 출력신호

 


  


void SegDisplay(unsigned int cmd); //7-Segmant 출력함수 선언

void delay(unsigned int cnt);  //시간 지연함수

void Putch(char data);

void PutSt(char *pStr);

char Getch();

  


unsigned char count = 0;

int time = 10;

unsigned char flag = 0;

int com_number;

int life = 8;

char user_number[6] = {0,};

int user_num = 0;

char up = 0;

int seed = 0;

  


ISR(INT0_vect, ISR_BLOCK) 

{

PutSt("\n\n\r");

PutSt("=========================\n\r");

PutSt(" Game Start \n\r");

PutSt("=========================\n\r");

PutSt("0~100 사이의 수를 맞춰보세요!\n\r");

life = 8;

time = 10;

printf("=> 기회가 %d번 남았습니다.\n\r", life);

_delay_ms(500);

TCCR0 = 0x07;

srand(seed);

com_number = rand() % 100 + 1;

light(life);

}

  


ISR(TIMER0_OVF_vect, ISR_NOBLOCK)

{

count++;

if(count == 125)

{

 time--;

 SegDisplay(time);

 if(time == 0)

 {

  time = 10;

  life--;

  printf("\n\rwarning!! 입력에 실패했습니다!!\n\r");

  up = 0;

  if(life > 0)

  {

   light(life);

   printf("=> 기회가 %d번 남았습니다.\n\r", life);

  } else {

   PutSt("당신은 패배했습니다.\n\r");

   printf("아쉽네요. 정답은 %d입니다.\n\r", com_number);

   TCCR0 = 0; // 타이머 정지

   PutSt("=========================\n\r");

   PutSt(" Game End \n\r");

   PutSt("=========================\n\n\r");

  }

 }

 

 count = 0;

}

TCNT0 = 131;

}

  


void main(void)

{

FILE *fp;

 fp = fdevopen(Putch, Getch);

 cli();

unsigned char buff=0;

  


PORTA = 0x00;

DDRA = 0xff;

  


PORTB = 0x00;

DDRB = 0x0f;

  


PORTC = 0x0F;

DDRC = 0x0F; //(c0-c3 : 출력, c4-c7 : 입력)

 

DDRE = 0xff;

DDRG = 0xff;

 

SegDisplay(0); //7-Segment에 '0'출력

 


Q = 0x0e;  // 모든 7-Seg 선택

 

EICRA = 0x0A;   // INT0~3 하강레벨감지 방식

EICRB = 0x00;   // INT4~7 0레벨감지 방식

EIMSK = 0x01;   // INT0

  


UCSR0A = 0x00;

UCSR0B = 0x18;   // 송수신 인에이블

UCSR0C = 0x06;   // 8bit Data통신

UBRR0H = 0x00;

UBRR0L = 0x08;   // 115200 bps

 

TCNT0 = 131;

TIMSK = 0x01;

  


sei();

  


while(1)

{

 seed++;

 KEY_C = 0xFe; //Port B에 1111 1110 출력 3 7 B C line Enable

 _delay_ms(1);  //시간지연 함수 호출

 


 buff = KEY_L; //buff에 PortC 값을 저장한다.

 buff = buff & 0xF0;  //buff값에 0x0f AND Mask

  


 switch(buff>>4)

 {

  case 0x0e: // 1110

   Putch('0');

   user_number[up++] = '0';

   _delay_ms(200);

   break;

  case 0x0d: // 1101

   Putch('4');

   user_number[up++] = '4';

   _delay_ms(200);

   break;

  case 0x0b: //1011

   Putch('8');

   user_number[up++] = '8';

   _delay_ms(200);

   break;

  case 0x07: //0111

  

   break;

  


  default:

   break;

 }

 _delay_ms(1);

  


 KEY_C = 0xFC; //Port B에 1111 1101 출력 1 5 9 D line Enable

 _delay_ms(1);  //시간지연 함수 호출

 


 buff = KEY_L; //buff에 PortC 값을 저장한다.

 buff = buff & 0xF0;  //buff값에 0x0f AND Mask

  


 switch(buff>>4)

 {

  case 0x0e: // 1110

   Putch('1');

   user_number[up++] = '1';

   _delay_ms(200);

   break;

  case 0x0d: // 1101

   Putch('5');

   user_number[up++] = '5';

   _delay_ms(200);

   break;

  case 0x0b: //1011

   Putch('9');

   user_number[up++] = '9';

   _delay_ms(200);

   break;

  case 0x07: //0111

   break;

  


  default:

   break;

 }

 _delay_ms(1);

  


 KEY_C = 0xFB; //Port B에 1111 1011 출력 2 6 A E line Enable

 _delay_ms(1);  //시간지연 함수 호출

 


 buff = KEY_L; //buff에 PortC 값을 저장한다.

 buff = buff & 0xF0;  //buff값에 0x0f AND Mask

  


 switch(buff>>4)

 {

  case 0x0e: // 1110

   Putch('2');

   user_number[up++] = '2';

   _delay_ms(200);

   break;

  case 0x0d: // 1101

   Putch('6');

   user_number[up++] = '6';

   _delay_ms(200);

   break;

  case 0x0b: //1011

   // 입력 완료

   PutSt("\n\r");

   count = 0;

   time = 0;

   user_number[up++] = '\0';

 

   life--;

   user_num = atoi(user_number);

   if(life > 0)

   {

    if(user_num == com_number)

    {

     PutSt("당신이 이겼습니다. 축하합니다!\n\r");

    }

    else if(user_num > com_number)

    {

     PutSt("정답보다 입력한 숫자가 큽니다.\n\r");

     printf("=> 기회가 %d번 남았습니다.\n\r", life);

     light(life);

     time = 10;

    }

    else

    {

     PutSt("정답보다 입력한 숫자가 작습니다.\n\r");

     light(life);

     printf("=> 기회가 %d번 남았습니다.\n\r", life);

     time = 10;

    }

   } else {

    PutSt("당신은 패배했습니다.\n\r");

    TCCR0 = 0; // 타이머 정지

    printf("아쉽네요. 정답은 %d입니다.\n\r", com_number);

    PutSt("=========================\n\r");

    PutSt(" Game End \n\r");

    PutSt("=========================\n\n\r");

   }

  

   up = 0;

   _delay_ms(200);

   break;

  case 0x07: //0111

  

   break;

  


  default:

   break;

 }

 _delay_ms(1);

  


 KEY_C = 0xF7; //Port B에 1111 0111 출력 3 7 B F line Enable

 _delay_ms(1);  //시간지연 함수 호출

 


 buff = KEY_L; //buff에 PortC 값을 저장한다.

 buff = buff & 0xF0;  //buff값에 0x0f AND Mask

  


 switch(buff>>4)

 {

  case 0x0e: // 1110

   Putch('3');

   user_number[up++] = '3';

   _delay_ms(200);

   break;

  case 0x0d: // 1101

   Putch('7');

   user_number[up++] = '7';

   _delay_ms(200);

   break;

  case 0x0b: //1011

  

   break;

  case 0x07: //0111

  

   break;

  


  default:

   break;

 }

 _delay_ms(1);

  


}

  


}

  


void SegDisplay(unsigned int cmd)

{

unsigned char fnd[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x98,

      0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f};

SEG = fnd[cmd];

}

  


void Putch(char data)

{

while ((UCSR0A & 0x20) == 0);

UDR0 = data;

}

  


void PutSt(char *pStr)

{

while (*pStr)

{

 Putch(*pStr++);

}

}

  


char Getch()

{

while( (UCSR0A & 0x80) == 0);

return UDR0;

}

  


void light(int l)

{

switch(l)

{

 case 8:

  PORTE = 0b11110000;

  PORTG = 0b00001111;

  break;

 case 7:

  PORTE = 0b01110000;

  PORTG = 0b00001111;

  break;

 case 6:

  PORTE = 0b00110000;

  PORTG = 0b00001111;

  break;

 case 5:

  PORTE = 0b00010000;

  PORTG = 0b00001111;

  break;

 case 4:

  PORTE = 0b00000000;

  PORTG = 0b00001111;

  break;

 case 3:

  PORTE = 0b00000000;

  PORTG = 0b00000111;

  break;

 case 2:

  PORTE = 0b00000000;

  PORTG = 0b00000011;

  break;

 case 1:

  PORTE = 0b00000000;

  PORTG = 0b00000001;

  break;

}

}

  


 

 출처 :https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=6710
 

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기
  • 카카오톡으로 보내기

댓글 : 0

조회수 : 3,779

등록된 댓글이 없습니다.

게시물 검색

BASIC4MCU > 질문게시판 목록

제목 날짜
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은… 스태프  19-01-15
공지 사이트 이용 안내 댓글[25] master  17-10-29
질문 빵판없이 디스플레이 넣을 수 있을까요? 댓글[1] 첨부파일오소로롯 새글 22-06-29
질문 라즈베리파이4 신형 선택문제 댓글[1] maximum  22-06-26
질문 음전압 ADC 댓글[2] 412904  22-06-26
질문 아두이노 센서값 출력 질문입니다! 댓글[1] 아궁2  22-06-24
질문 ATmega128, ATmega28 RS232통신 첨부파일Moon4201  22-06-24
답변 답변 : ATmega128, ATmega28 RS232… 댓글[1] master  22-06-25
질문 서보모터, 온습도센서 코드 질문 댓글[2] 첨부파일kshdlfaldfh  22-06-22
답변 답변 : 서보모터, 온습도센서 코드 질문 댓글[15] master  22-06-22
질문 steppermulti5 질문 응애  22-06-21
답변 답변 : steppermulti5 질문 댓글[1] master  22-06-22
질문 atmega128 avr usart 질문 snoflak  22-06-21
답변 답변 : atmega128 avr usart 질문 댓글[5] master  22-06-21
질문 사용자 정의 함수 변환 하는 방법 댓글[2] 첨부파일da0800  22-06-21
질문 atmega128 댓글[1] 양의노래  22-06-20
질문 아두이노 동시동작 재질문 댓글[9] 첨부파일죠르디  22-06-20
질문 초음파센서로 dc모터 제어하기 댓글[1] 첨부파일난쟁2  22-06-20
질문 아두이노 동시동작 댓글[7] 죠르디  22-06-19
질문 ATMEGA128 UART,FND 연동 질문 JMOD  22-06-19
답변 답변 : ATMEGA128 UART,FND 연동 질문 댓글[1] master  22-06-20
질문 atmeg128 질문이요 댓글[1] 첨부파일공대생er  22-06-18
질문 atmega128 초음파 센서로 신호등 시간초 늘리기 서동씨  22-06-18
답변 답변 : atmega128 초음파 센서로 신호등 시간초… 댓글[1] master  22-06-18
질문 atmega128 댓글[2] 망경이  22-06-18
질문 앱인벤터 이용해서 수동 자동 할라고하는데 ..잘안됩니다… 댓글[1] 따랑해영  22-06-18
답변 질문 : 앱인벤터 이용해서 수동 자동 할라고하는데 ..… 댓글[1] 첨부파일따랑해영  22-06-19
답변 질문 : 앱인벤터 이용해서 수동 자동 할라고하는데 .… 첨부파일따랑해영  22-06-19
질문 서보모터와 초음파센서 댓글[1] 브링미히어  22-06-17
질문 LCD 도와주세요 ㅜㅠㅠㅠ 댓글[2] 첨부파일dentist22  22-06-17
게시물 검색


Privacy Policy
MCU BASIC ⓒ 2017
PC버전