질문게시판 > 답변 : atmega128 질문이요!

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

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

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

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

BASIC4MCU > 질문게시판

답변 : atmega128 질문이요!

페이지 정보

작성자 master 작성일19-11-30 06:08 조회14,944회 댓글4건

본문

 

제가 atmega128 사용해서 간단한 게임 만드는걸 짜고 있는데요
게임을 설명하자면 4번스위치를 누르면 led가 랜덤으로 표시가 되요
그럼  led의 개수를 스위치6과7로 컨트롤해서 세븐세그먼트에 표시하고 5 눌렀을  정답 여부를
나타내서 맞추는 게임이거든요
다른부분은 다되었는데..난수로 뿌려지는 led의 개수를 세그먼트의 값과 어떻게 연동 시켜야 할까요..??
//
unsigned char seg[10]={0xaf,0xa0,0x97,0xb5,0xb8,0x3d,0x3b,0xa4,0xbf};
unsigned char N1=0,N10=0,N100=0,N1000=0;
unsigned char Flag=0,led=0xff,seg_count=0;
//
void Seg4_out(void);
//
interrupt[EXT_INT4]void external_int4(void){
  Flag=1;
  Command(ALLCLR);
  Command(HOME);  LCD_String(" 5(run)");
  Command(LINE2); LCD_String("6(+)7(-)");
  PORTC=led;
  led=rand();
}
//
interrupt[EXT_INT5]void external_int5(void){
  Command(ALLCLR);
  Command(HOME);  LCD_String("ALRIGHT!  TRY ");
  Command(LINE2); LCD_String(" AGAIN!");
}
//
interrupt[EXT_INT6]void external_int6(void){
  Command(ALLCLR);
  Command(HOME);  LCD_String("count++");
  Command(LINE2); LCD_String(" ");
  if(seg_count==0)N1=(N1+1)%10;
}
//
interrupt[EXT_INT7]void external_int7(void){
  Command(ALLCLR);
  Command(HOME);  LCD_String("count--");
  Command(LINE2); LCD_String(" ");
  if(seg_count==0)N1=(N1-1)%10;
}
//
void main(){
  DDRB=0xff;
  DDRF=0xf0;  PORTF=0xf0;
  DDRC=0xff;  PORTC=0xff;
  LCD_init();     LCD_String("play game!HOW MANY LED?");
  Command(LINE2); LCD_String("-press4-");
  //
  EICRB=0xffEIMSK=0xf0//=INT4,5,6,7(상승)
  SREG=0x80;
  while(1)  {
    if     (Flag     ==0){ Command(LSHIFT); delay_ms(350); } //1초 주기로 Left Shitft
    else if(seg_count==0){ Seg4_out(); }
  }
}

 

전체 소스가 아니라서 이해가 안됩니다.

 

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

댓글 : 4

조회수 : 14,944

에로롤님의 댓글

에로롤 작성일

위에는
#include <mega128.h>
#include <delay.h>
#include <stdlib.h>

#define FUNCSET      0x28 // Function Set
#define ENTMODE      0x06 // Entry Mode Set
#define ALLCLR        0x01 // All Clear
#define DISPON        0x0c  // Display On
#define LSHIFT        0x18 // Displya Left Shift
#define RSHIFT        0x1c //Disply Right Shift
#define LINE2        0xC0 // 2nd Line Move
#define HOME          0x02 // Cursor Home       

void LCD_init(void);
void LCD_String(const char *  );
void Busy(void);  //지연
void Command(unsigned char);
void Data(unsigned char);


뒷부분은

void Seg4_out(void)
{
    PORTF = 0b01110000;
    PORTB = seg_pat[N1];
    delay_ms(5);
 
    PORTF = 0b10110000;
    PORTB = seg_pat[N10];
    delay_ms(5);
 
    PORTF = 0b11010000;
    PORTB = seg_pat[N100];
    delay_ms(5);
 
    PORTF = 0b11100000;
    PORTB = seg_pat[N1000];
    delay_ms(5);
}
// LCD 초기화 
void LCD_init(void)
{     
    DDRA = 0xFF;  // 포트 A 출력 설정
    PORTA &= 0xFB;  //E = 0;
                 
    delay_ms(15);
    Command(0x20);  //command( Data(4bit), don’t care, E, RW, RS)
    delay_ms(5);
    Command(0x20);
    delay_us(100);
    Command(0x20);
    Command(FUNCSET);
    Command(DISPON);
    Command(ALLCLR);
    Command(ENTMODE);
}

// 문자열 출력 함수
void LCD_String(const char *str )
{
    const char *pStr=0;
    pStr = str;
    while(*pStr) Data(*pStr++);
}                               

입니다

// 인스트럭션 쓰기 함수
void Command(unsigned char byte)
{
    Busy(); //2msec delay
   
    // 인스트럭션 상위 바이트
    PORTA = (byte & 0xF0);  // 데이터
    PORTA &= 0xFE;  //RS = 0;         
    PORTA &= 0xFD;  //RW = 0; 
    delay_us(1);   
    PORTA |= 0x04;  //E = 1;
    delay_us(1);
    PORTA &= 0xFB;  //E = 0;
   
    // 인스트럭션 하위 바이트
    PORTA = ((byte<<4) & 0xF0); // 데이터
    PORTA &= 0xFE;  //RS = 0;
    PORTA &= 0xFD;  //RW = 0;
    delay_us(1);     
    PORTA |= 0x04;  //E = 1;
    delay_us(1);
    PORTA &= 0xFB;  //E = 0;
}
          //데이터 쓰기 함수
void Data(unsigned char byte)
{
    Busy();
       
    // 데이터 상위 바이트
    PORTA = (byte & 0xF0);  // 데이터
    PORTA |= 0x01;  //RS = 1;
    PORTA &= 0xFD;  //RW = 0;
    delay_us(1);     
    PORTA |= 0x04;  //E = 1;
    delay_us(1);
    PORTA &= 0xFB;  //E = 0;
 
    // 데이터 하위 바이트
    PORTA = ((byte<<4) & 0xF0);  // 데이터
    PORTA |= 0x01;  //RS = 1;
    PORTA &= 0xFD;  //RW = 0;   
    delay_us(1);     
    PORTA |= 0x04;  //E = 1;
    delay_us(1);
    PORTA &= 0xFB;  //E = 0;
}
// Busy Flag Check -> 일반적인 BF를 체크하는 것이 아니라 일정한 시간 지연을 이용한다.
void Busy(void)
{
    delay_ms(2);
}

master님의 댓글

master 작성일

unsigned char led=0xff;
  led=rand();
LED 개수라는 것이
led 변수의 값을 말하는 건가요?
아니면 led 변수의 1의 개수를 말하는 것인가요?
또,
led=0xff; 초기값 0xFF는 무슨 의미죠?

에로롤님의 댓글

에로롤 댓글의 댓글작성일

led에 랜덤함수를 씀으로써 실행했을때 불이 들어오는 개수를 말하는 것입니다.
led=0xff는 led의 출력상태입니다.

master님의 댓글

master 댓글의 댓글작성일

1 출력하면 OFF
0 출력하면 ON 인가요?

게시물 검색

BASIC4MCU > 질문게시판 목록

제목 날짜
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은… 스태프  19-01-15
공지 사이트 이용 안내 댓글[25] master  17-10-29
질문 앱인벤터 list index too large 오류 질… 첨부파일PT규 새글 19:58
질문 Atmega IO핀 출력 상태 질문이요.. 댓글[3] chelsea 새글 22-07-06
답변 답변 : Atmega IO핀 출력 상태 질문이요.. 댓글[6] master 새글 22-07-06
질문 아두이노 센서 쉴드 v5.0 과 음성인식 모듈(V2)통… 댓글[6] 첨부파일AutoSun  22-07-05
질문 초음파 센서를 사용한 dc모터 제어에 관해 질문 있습니… 첨부파일뉴비에오  22-07-04
답변 답변 : 초음파 센서를 사용한 dc모터 제어에 관해 질… 댓글[2] master  22-07-05
질문 아두이노 Sensor Shield 5.0 시리얼 통신 … 댓글[2] AutoSun  22-07-04
질문 Atmega 코드 좀 봐주세요. 댓글[1] 첨부파일chelsea  22-07-04
질문 아두이노 while문 탈출 질문 yhj2644  22-07-01
답변 답변 : 아두이노 while문 탈출 질문 댓글[8] master  22-07-01
질문 ESP32-C3 리튬폴리머 ADC 전압 체크 관련 문의… 댓글[3] cansad  22-06-30
질문 ESP32-C3 리튬폴리머 ADC 전압 체크 관련 문의 댓글[3] cansad  22-06-30
질문 빵판없이 디스플레이 넣을 수 있을까요? 댓글[2] 첨부파일오소로롯  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
게시물 검색


Privacy Policy
MCU BASIC ⓒ 2017
PC버전