BASIC4MCU | 질문게시판 | ATMEGA128 질문있습니다
페이지 정보
작성자 따봉 작성일2021-12-10 03:26 조회2,551회 댓글7건본문
현재 숫자 야구를 코딩하고 있습니다.
#define F_CPU 16000000
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
const unsigned char Segment_Data[] =
{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F};
void Show4Digit(int X);
void ShowDigit(int i, int digit);
char COLUMN[4]={0,0,0,0};
int SHOW_NUMBER=0000;
ISR(INT0_vect) {
SHOW_NUMBER = SHOW_NUMBER + 1000;
if (SHOW_NUMBER > 9999)
{SHOW_NUMBER = SHOW_NUMBER -10000;
}
}
ISR(INT1_vect) {
SHOW_NUMBER = SHOW_NUMBER + 100;
if (SHOW_NUMBER%1000 <100)
{SHOW_NUMBER = SHOW_NUMBER -1000;
}
}
ISR(INT2_vect) {
SHOW_NUMBER = SHOW_NUMBER + 10;
if (SHOW_NUMBER%100 <10)
{SHOW_NUMBER = SHOW_NUMBER -100;
}
}
ISR(INT3_vect) {
SHOW_NUMBER = SHOW_NUMBER + 1;
if (SHOW_NUMBER%10 <1)
{SHOW_NUMBER = SHOW_NUMBER -10;
}
}
int main(void) {
DDRC = 0xff;
DDRA = 0xff;
EICRA = 0xFF;
EICRB = 0x07;
EIMSK = 0x3F;
SREG |= 0x80;
PORTC = 0x00;
unsigned char keyin = 0;
DDRG=0x03;
while (1) {
Show4Digit(SHOW_NUMBER);
PORTG = keyin = (PING&0x0C)>>2;
if(keyin)
SHOW_NUMBER = 0000;
}
}
void Show4Digit(int X) {
COLUMN[0] = X/1000; COLUMN[1] = (X%1000)/100;
COLUMN[2] = (X%100)/10; COLUMN[3] = (X%10);
for(int i=0;i<4;i++) {
ShowDigit(COLUMN[i],i);
_delay_ms(2);
}
}
void ShowDigit(int i, int digit) {
PORTC=~(0x01<<digit);
PORTA = Segment_Data[i];
}
제가 추진하는 계획은 다음과 같습니다.1. 인터럽트로 숫자 입력 후 S1 스위치를 통해 segment에 표시된 값을 변수에 저장(출제자의 값)2. 인터럽트를 이용해 맞추는 사람이 숫자 입력 후 S2 스위치를 눌렀을 때 출제자의 값과 비교하여 strike, ball 판정여기서 S1을 눌렀을 때 변수 선언과 값 저장을 어떤 방법으로, 그리고 어디에 삽입해야 할지를 모르겠습니다. 이 변수 선언의 방법과 위치에 대해 알려주시면 감사하겠습니다.
댓글 7
조회수 2,551master님의 댓글
master 작성일
const unsigned char Segment_Data[] ={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F};
char COLUMN[4]={0,0,0,0};
int SHOW_NUMBER=0000;
이미 코드에는 전역변수 선언이 존재합니다.
따봉님의 댓글
따봉
그럼 혹시 현재 7-segment에 출력되는 값을 다른 곳에 저장해두고 싶은데 어떠한 방법을 써야하는지 여쭤봐도 될까요?
master님의 댓글
master
전원을 껏다 켜도 값이 유지되어야 한다면 eeprom 메모리를 사용하면 되고요
켜져있을 때만 유지되어야 하는 경우라면 변수를 추가하면 됩니다.
master님의 댓글
master 작성일
128은 4K의 eeprom 메모리가 존재하고요
코드비젼이라면 SRAM을 사용하는 일반 변수와 사용법이 거의 동일하지만
AVRStudio는 함수를 사용하는데 더 까다롭습니다.
따봉님의 댓글
따봉
AVRStudio를 사용하고 있습니다. 혹시 함수 사용법을 조금 알려주실 수 있나요..? 방법을 조금 배운 후 제가 자료를 더 찾아보고 나서 다시 해보겠습니다.
master님의 댓글
master