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

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

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

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

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

BASIC4MCU > 질문게시판

atmega128 도와주세요...

페이지 정보

작성자 우이이엉 작성일18-12-04 16:17 조회4,991회 댓글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,991

master님의 댓글

master 작성일

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

게시물 검색

BASIC4MCU > 질문게시판 목록

제목 날짜
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은… 스태프  19-01-15
공지 사이트 이용 안내 댓글[25] master  17-10-29
질문 아두이노 코딩 결합 댓글[1] hohoje 새글 22-08-18
질문 UART통신 스위치 사용 댓글[4] 픽공부 새글 22-08-18
질문 아두이노코딩 질문사항 댓글[1] kai5439  22-08-16
질문 해석좀 해주세요 댓글[2] bubu  22-08-14
질문 lcd 1602에 특수문자를 출력하는 방법을 알고싶습니… 댓글[3] dndktn  22-08-12
질문 stm32 wifi 파일전송 댓글[3] 하리  22-08-11
질문 회로 구성 수정 댓글[2] 첨부파일픽공부  22-08-11
질문 아두이노 와이파이통신 질문 있습니다 댓글[1] 학생  22-08-11
질문 포토다이오드와의 연결 질문합니다. 댓글[7] 첨부파일박윤모  22-08-10
질문 회로 구성 댓글[4] 픽공부  22-08-10
질문 아두이노 센서, 와이파이, 블루투스 연결 댓글[1] pattern  22-08-10
질문 PIC 블루투스 연결 댓글[19] 픽공부  22-08-09
질문 PIC18F452 블루투스 연결 댓글[4] 마이컴  22-08-08
질문 아두이노 코드 해석을 못하겠습니다... 댓글[2] 김가헌  22-08-08
질문 아두이노 코드를 avr로 변환해 주세요 ...ㅠ 댓글[3] 옹냥냥  22-08-08
질문 아두이노 녹음-스피커모듈 관련 질문있습니다 ㅠㅠ 댓글[2] 방귀뿡뿡  22-08-08
질문 Serial EEPROM 실수값 저장.. 댓글[2] 첨부파일광이  22-08-07
질문 STM32 Live Expression 값들이 깜빡이는… 댓글[3] 둠둠  22-08-05
질문 아두이노 ESP32 wifi module 댓글[1] Yoon  22-08-03
질문 atmega128과 dht11, lcd를 연결했는데 0… 댓글[1] 고양이33  22-08-02
질문 ATMEGA 128 코드를 합치려고 하는데 어렵네요 댓글[2] 고양이33  22-08-02
질문 서보모터 제어에 대해 질문있습니다. 댓글[2] 첨부파일뉴비에오  22-07-30
질문 적외선 통신 알려주실분있나요 ㅠㅠ 댓글[1] hkjsj10  22-07-30
질문 아두이노 관련 궁금합니다. 댓글[1] 뱝뱝  22-07-28
질문 아두이노 우노 MCP4725 댓글[3] opqr  22-07-27
질문 레오나르도 인체감지센서 알림 안옴 면지지  22-07-24
답변 답변 : 레오나르도 인체감지센서 알림 안옴 master  22-07-25
질문 Uno에서 엔코더값 놓치는 이유가 뭘까요... 댓글[3] MAKTUB  22-07-24
게시물 검색


Privacy Policy
MCU BASIC ⓒ 2017
PC버전