질문게시판 > codevison 코드로 변경

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

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

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

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

BASIC4MCU > 질문게시판

codevison 코드로 변경

페이지 정보

작성자 스니밈민미 작성일18-12-14 17:45 조회3,623회 댓글0건

본문

  이 코드를 codevision 코드로 바꿀 수있을까요..? 부탁드립니다...

 

#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 B1111 1110 출력 3 7 B C line Enable

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

 

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

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 B1111 1101 출력 1 5 9 D line Enable

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

 

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

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 B1111 1011 출력 2 6 A E line Enable

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

 

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

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 B1111 0111 출력 3 7 B F line Enable

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

 

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

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;

}

}

 

 

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

댓글 : 0

조회수 : 3,623

등록된 댓글이 없습니다.

게시물 검색

BASIC4MCU > 질문게시판 목록

제목 날짜
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은… 스태프  19-01-15
공지 사이트 이용 안내 댓글[25] master  17-10-29
질문 아두이노 센서값 출력 질문입니다! 아궁2 새글 22-06-24
질문 ATmega128, ATmega28 RS232통신 첨부파일Moon4201 새글 22-06-24
질문 서보모터, 온습도센서 코드 질문 댓글[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
질문 안녕하세요 atmega128 질문드리고 싶습니다. (자… 댓글[3] dlcldl  22-06-17
질문 아두이노 delay를 millis로 바꾸고 싶습니다. 슨슨슨모  22-06-16
답변 답변 : 아두이노 delay를 millis로 바꾸고 싶… master  22-06-17
질문 아두이노 LCD 시계 첨부파일dentist22  22-06-16
게시물 검색


Privacy Policy
MCU BASIC ⓒ 2017
PC버전