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

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

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

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

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

BASIC4MCU > 질문게시판

atmega128 도와주세요...

페이지 정보

작성자 우이이엉 작성일18-12-04 16:17 조회4,520회 댓글1건

본문

#include <mega128.h>
#include <delay.h>
#asm
.equ __lcd_port=0x15
#endasm
#include <lcd.h>

#define KEY_OUT PORTA
#define KEY_IN PINA

enum{C0,C1,C2,C3};
unsigned char counter = 0; //문제에 이용하는 변수
unsigned int time_s=0, time_m=0,timer0Cnt=0; //카운터에 이용하는 변수

unsigned char FND_DATA[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xd8, 0x80, 0x98}; //fnd 0~9
void print_FND(unsigned char segCx, unsigned char data); // 원하는 FND 포트에 data 출력
int KeyMatrix(int matrix);//키 매트릭스 함수선언

interrupt [TIM0_OVF] void tim0_ovf(void)//타이머 인터럽트
{
    if(counter != 0 )
    {
        #asm("cli"); //인터럽트 금지 
        TCNT0 = 0xff - 157;
        timer0Cnt++;         
            
        if(timer0Cnt ==100 && time_m < 2) // 10ms*100=1s
        {     
            if(time_s >= 59)
            {
                time_m++;
                time_s =0;
            }                             
           
            else
            time_s++;
            timer0Cnt = 0;
        }            
        SREG=0x80;
    } 
}

interrupt [EXT_INT0] void ext_int0_isr(void)//스위치 외부 인터럽트
{
    EIMSK = 0x00;   // 인터럽트 초기화
   
    counter++;
    delay_ms(500);
   
    EIMSK = 0x01;   // 인터럽트 허용
    TCCR0 = 0x07;   //타이머0 설정(clk/1024)
    TCNT0 = 0xff - 157;//10msec 여기 조절로 시간설정가능         
}

void main(void)
{  
    int matrix, buffer, i, keyout;
   
    char buff[17]="13 Park Su Jin"; // LCD 출력 Data 저장 변수 설정
    lcd_init(16); // Character LCD 16 * 2 사용 선언
    lcd_gotoxy(0,0); // LCD 1 line 선택 함수, x=0, y=0
    lcd_puts(buff); // buff변수 Data를 LCD로 출력
    lcd_gotoxy(0,1); // LCD 2 line 선택 함수, x=0, y=1
    lcd_putsf("13 Won Ye Hyeon"); // Data를 LCD로 출력    
    delay_ms(4500);
         
    PORTA = 0x00;   //PORTA 초기화
    DDRA = 0xf0;   
    PORTD = 0x00;   // PORTD 초기화
    DDRD  = 0x00;   // PORTD 방향설정: 입력         
    EICRA = 0x02;   // 00000010 (INT0 하강에지 검출)
    EIMSK = 0x01;   // 인터럽트0 허용     
    DDRE = 0xFF; //PORTE A~P까지 FND
    PORTE = 0x00;                    
    DDRG = 0x0F; // control PORTG 0-3 PIN
    PORTG = 0x0F;                                                                    
    PORTB =0x00;
    DDRB = 0xFF;       
     
    TIMSK = 0x01; //오버플로우 인터럽트  허용
    TIFR =0x01; //오버플로우 플래그 저장(오버플로우 발생시)   
    SREG  = 0x80;   // Global enable interrupt  
   
    while(1)
    {            
        print_FND(C3, time_s%10); //4번째 FND에 1초단위 출력
        print_FND(C2, time_s/10); // 3번째 FND에 10초단위 출력
        print_FND(C0, time_m); // 1번째 FND에 1분단위 출력

        if(time_m  == 2)lcd_clear(); //제한시간 초과시 LCD 클리어

        keyout = 0b11101111;//키 매트릭스 그라운드 설정
       
        for(i=0;i<=3;i++)
        {
            KEY_OUT = keyout;
            matrix = KEY_IN;
                                 
            buffer=KeyMatrix(matrix); 
            keyout = (keyout<<1) + 0x01;           
                      
            if(counter == 0)    //초기화면
            {
                lcd_clear(); //LCD 클리어
                lcd_putsf("Hello!!!"); // Data를 LCD로 출력
                lcd_gotoxy(0,1); // LCD 2 line 선택 함수, x=0, y=1
                lcd_putsf("Let's play"); // Data를 LCD로 출력
                delay_ms(500);
            }           
        

            if(counter == 1)   //1번문제
            {
                lcd_clear(); //LCD 클리어
                lcd_putsf("Question 1"); // Data를 LCD로 출력
                lcd_gotoxy(0,1); // LCD 2 line 선택 함수, x=0, y=1
                lcd_putsf("3 X 3 = "); // Data를 LCD로 출력
                counter++;
                PORTB = 0b00000000;
             }
                  
            if(buffer == 9 && counter == 2)   //2번문제
            {
                lcd_clear(); //LCD 클리어
                lcd_putsf("Question 2"); // Data를 LCD로 출력
                lcd_gotoxy(0,1); // LCD 2 line 선택 함수, x=0, y=1
                lcd_putsf("9-3X2 = "); // Data를 LCD로 출력
                counter++;
                PORTB = 0b00000000;                                           
            }  
               
            if(buffer == 3 && counter == 3)   //3번문제
            {
                lcd_clear(); //LCD 클리어
                lcd_putsf("Question 3"); // Data를 LCD로 출력
                lcd_gotoxy(0,1); // LCD 2 line 선택 함수, x=0, y=1
                lcd_putsf("5+9-8 = "); // Data를 LCD로 출력
                counter++;
                PORTB = 0b10000000;                                              
            }     
                       
            if(buffer == 6 && counter == 4)   //4번문제
            {
                lcd_clear(); //LCD 클리어
                lcd_putsf("Question 4"); // Data를 LCD로 출력
                lcd_gotoxy(0,1); // LCD 2 line 선택 함수, x=0, y=1
                lcd_putsf("19-2X7 = "); // Data를 LCD로 출력
                counter++;
                PORTB = 0b10000000;                                                  
            } 
                       
            if(buffer == 5 && counter == 5)   //5번문제
            {
                lcd_clear(); //LCD 클리어
                lcd_putsf("Question 5"); // Data를 LCD로 출력
                lcd_gotoxy(0,1); // LCD 2 line 선택 함수, x=0, y=1
                lcd_putsf("2+15/3 = "); // Data를 LCD로 출력
                counter++;                                             
                PORTB = 0b11000000;           
           } 
                       
            if(buffer == 7 && counter == 6)   //6번문제
            {
                lcd_clear(); //LCD 클리어
                lcd_putsf("Question 6"); // Data를 LCD로 출력
                lcd_gotoxy(0,1); // LCD 2 line 선택 함수, x=0, y=1
                lcd_putsf("5+6-3+2-8 = "); // Data를 LCD로 출력
                counter++;
                PORTB = 0b11000000;                                                
            }   
                       
            if(buffer == 2 && counter == 7)   //7번문제
            {
                lcd_clear(); //LCD 클리어
                lcd_putsf("Question 7"); // Data를 LCD로 출력
                lcd_gotoxy(0,1); // LCD 2 line 선택 함수, x=0, y=1
                lcd_putsf("18/3+20/4-7 = "); // Data를 LCD로 출력
                counter++;
                PORTB = 0b11100000;                                                  
            }    
                       
            if(buffer == 4 && counter == 8)   //8번문제
            {
                lcd_clear(); //LCD 클리어
                lcd_putsf("Question 8"); // Data를 LCD로 출력
                lcd_gotoxy(0,1); // LCD 2 line 선택 함수, x=0, y=1
                lcd_putsf("2X5-2 = "); // Data를 LCD로 출력
                counter++;
                PORTB = 0b11100000;                                            
            }     
                       
            if(buffer == 8 && counter == 9)   //9번문제
            {
                lcd_clear(); //LCD 클리어
                lcd_putsf("Question 9"); // Data를 LCD로 출력
                lcd_gotoxy(0,1); // LCD 2 line 선택 함수, x=0, y=1
                lcd_putsf("19-18 = "); // Data를 LCD로 출력
                counter++;
                PORTB = 0b11110000;                                              
            }   
                       
            if(buffer == 1 && counter == 10)   //10번문제
            {
                lcd_clear(); //LCD 클리어
                lcd_putsf("Question 10"); // Data를 LCD로 출력
                lcd_gotoxy(0,1); // LCD 2 line 선택 함수, x=0, y=1
                lcd_putsf("5X2-4 = "); // Data를 LCD로 출력
                counter++;
                PORTB = 0b11110000;
            }
           
            if(buffer == 6 && counter == 11)   //문제 끝!!
            {
                counter++;
                lcd_clear(); //LCD 클리어   문제1
                lcd_putsf("Good job!!"); // Data를 LCD로 출력
                lcd_gotoxy(0,1); // LCD 2 line 선택 함수, x=0, y=1
                lcd_putsf("made by team17"); // Data를 LCD로 출력
                PORTB = 0b11111000;
            }
                                    
        };
                 
    } 
}

int KeyMatrix(int matrix)//키매트릭스 함수
{
    int key = 0;
           
    switch(matrix)
    {
        case 0x7e : key = 0;
            break;
        case 0xbe : key = 1;
            break;
        case 0xde : key = 2;
            break;
        case 0xee : key = 3;
            break;
        case 0x7d : key = 4;
            break;
        case 0xbd : key = 5;
            break; 
        case 0Xdd : key = 6;
            break;
        case 0xed : key = 7;
            break;
        case 0x7b : key = 8;
            break; 
        case 0xbb : key = 9;
            break;
        default: key = 0xff;  
    }                      
                    
    return key;
}

void print_FND(unsigned char segCx, unsigned char data)
{              
    switch(segCx){
        case C3: //4번 FND (좌측기준)
        PORTG &= 0xF0;
        PORTG |= 0x07;  
            break;
         
        case C2: //3번 FND
        PORTG &= 0xF0;
        PORTG |= 0x0B;  
            break;

        case C0: //1번 FND
        PORTG &= 0xF0;
        PORTG |= 0x0E;  
            break;

        default:
        PORTG &= 0xF0;
        PORTG |= 0x0F;  
            break;       
    }

    PORTE = FND_DATA[data];
    delay_ms(1);

 

 

 

 

소스코드 빌드하고 점퍼선을 연결하는데

어떻게 연결하는지 모르겠어서 도움 요청드립니다.......... 

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

댓글 : 1

조회수 : 4,520

master님의 댓글

master 작성일

시간이 많이 걸리는 것은 도와드릴 수가 없습니다.
쉬운 것들은 직접 공부해서 찾으시고
해결이 안되는 어려운 것은 다시 질문글로 작성해주세요

게시물 검색

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버전