질문게시판 > 답변 : atmega128a 외부인터럽트 두개와 7segment의 연결

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

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

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

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

BASIC4MCU > 질문게시판

답변 : atmega128a 외부인터럽트 두개와 7segment의 연결

페이지 정보

작성자 master 작성일23-12-02 18:58 조회487회 댓글0건

본문

#define F_CPU 16000000

#include <avr/io.h>

#include <util/delay.h>

#include <avr/interrupt.h>

//

#define B0   458

#define C1   523    // 도

#define C1_  554

#define D1   587    // 레

#define D1_  622

#define E1   659    // 미

#define F1   699    // 파

#define F1_  740

#define G1   784    // 솔

#define G1_  831

#define A1   880    // 라

#define A1_  932

#define B1   988    // 시

#define C2   C1*2   // 도

#define C2_  C1_*2

#define D2   D1*2   // 레

#define D2_  D1_*2

#define E2   E1*2   // 미

#define F2   F1*2   // 파

#define F2_  F1_*2

#define G2   G1*2   // 솔

#define G2_  G1_*2

#define A2   A1*2   // 라

#define A2_  A1_*2

#define B2   B1*2   // 시

//

#define DLY_0   32  // 온음표*2

#define DLY_1   16  // 온음표

#define DLY_2   8   // 2분 음표

#define DLY_4   4   // 4분 음표

#define DLY_8   2   // 8분 음표

#define DLY_16  1   // 16분 음표

//

volatile int santa[100]={E1,F1,G1,G1,A1,B1,C2,C2,E1,F1,G1,G1,G1,G1,G1,A1,G1,F1,F1,F1,E1,G1,C1,E1,D1,F1,F1,C1,B1};

volatile int santa_length[100]={DLY_8,DLY_8,DLY_4,DLY_2,DLY_8,DLY_8,DLY_4,DLY_2,DLY_8,DLY_8,DLY_8,DLY_8,DLY_8,DLY_8,DLY_4,DLY_8,DLY_8,DLY_8,DLY_8,DLY_4,DLY_2,DLY_2,DLY_2,DLY_2,DLY_2,DLY_2,DLY_1,DLY_2,DLY_1,};

char COLUMN[4]={0,0,0,0};

//

volatile unsigned char Segment_Data[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F};

volatile char calender[0]={0};

volatile char flag0=0,flag1=0,flag2=0;

volatile int  freq=1000,i;

volatile int count;

volatile unsigned char TIMERvalue=0xFF;  

volatile unsigned char keyin=0;  // Declare and initialize keyin

volatile unsigned char keyold=0; // Declare and initialize keyold

volatile unsigned char change=0; // Declare and initialize change

volatile int SHOW_1=1; // Declare and initialize SHOW_1

volatile int SHOW_2=1; // Declare and initialize SHOW_2

volatile int number;

//-------------------------------------------------------

void Shimpyo(int time){ for(int i=0;i<time;i++)_delay_ms(50); }

//

void Cutoff_Play(void){ _delay_ms(20); TIMERvalue=1; _delay_ms(20); }

//

void ShowDigit(int i,int digit){ PORTC=~(0x01<<digit); PORTA=Segment_Data[i]; }   

//

void Show4Digit(void){

  COLUMN[0]=(SHOW_1)/10; COLUMN[1]=(SHOW_1)%10;

  COLUMN[2]=(SHOW_2)/10; COLUMN[3]=(SHOW_2)%10;

  for(int i=0;i<4;i++){ ShowDigit(COLUMN[i],i); _delay_ms(2); }

}

//

void sum(void){ PORTC=0x00; PORTA=0xff; PORTE=0xff; }

//

void santasong(void){

  for(int i=0;i<40;i++){ freq=santa[i]; TIMERvalue=1000000/(8*freq); Shimpyo(santa_length[i]); Cutoff_Play(); }

}

//-------------------------------------------------------

ISR(INT0_vect){ flag0=1; }

ISR(INT1_vect){ flag1=1; }

ISR(INT2_vect){ flag2=1; }

//

ISR(TIMER0_COMP_vect){ OCR0=TIMERvalue; }

//-------------------------------------------------------

int main(void){

  DDRA=0xff;  DDRC=0xff;  DDRG=0x03;

  TCCR0=0x04; TCNT0=0x05; TIMSK=0x01; 

  EICRA=0xFF; EIMSK=0x07; SREG=0x80;

  while(1){

    if(flag0){ flag0=0;

      number=SHOW_1*100+SHOW_2;

      count=calender[number];

      COLUMN[0]=(SHOW_1)/10; COLUMN[1]=(SHOW_1)%10;

      COLUMN[2]=(SHOW_2)/10; COLUMN[3]=(SHOW_2)%10;

      if(SHOW_1==12 && SHOW_2==25){ santasong(); _delay_ms(100); }

      else                        { PORTG=0x03; }

    }

    //------------------------------------

    if(flag1){ flag1=0;

      Show4Digit();

      keyin=(PING &0x0c)>>2;

      if(keyin){ _delay_ms(200); keyin=(PING & 0x0C)>> 2; }

      if(keyold!=keyin)change=1;

      else             change=0;

      //

      if(change==1 && keyin==1){ if(++SHOW_1>12)SHOW_1=1; }

      if(change==1 && keyin==2){ if(++SHOW_2>31)SHOW_2=1; }

      if(change==1 && keyin==3){ keyin=0; }

    }

    //------------------------------------

    if(flag2){ flag2=0;

      COLUMN[0]=(SHOW_1)/10; COLUMN[1]=(SHOW_1)%10;

      COLUMN[2]=(SHOW_2)/10; COLUMN[3]=(SHOW_2)%10;

      number=SHOW_1*100+SHOW_2;

      if(change==1 && keyin==2){ calender[number]++; PORTG=0x02; _delay_ms(200); PORTG=0x00; }

    }

  }

}

//-------------------------------------------------------

 

 

DDRD=0x07; 

입력핀을 출력으로 설정하면 고장납니다.

//

EIMSK=0x0f;

인터럽트를 4개 이네이블 시키고 함수를 3개만 만들면 오동작하게 됩니다.

//

ISR(INT1_vect){

  while(1){

인터럽트 함수 안에서 무한루프를 사용하면 안됩니다.

//

_delay_ms(200);

가급적 인터럽트 함수 안에서는 딜레이를 사용하지 않는 것이 좋습니다.

//

인터럽트안의 코드를 메인으로 옮겼으니 원하는 동작이 되도록 잘 완성시켜보세요
전체 기능을 파악하는 데에는 어려움이 있으므로 남이 도와드리기는 어렵습니다.

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

댓글 : 0

조회수 : 487

등록된 댓글이 없습니다.

게시물 검색

BASIC4MCU > 질문게시판 목록

제목 날짜
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은… 스태프  19-01-15
공지 사이트 이용 안내 댓글[30] master  17-10-29
질문 초음파센서에 아무것도 잡히지 않을 시 그래프를 비워놓는… idghte 새글 24-04-14
답변 답변 : 초음파센서에 아무것도 잡히지 않을 시 그래프를… master 새글 24-04-14
질문 심박 및 산소포화도 센서 오류 댓글[3] 별dl  24-04-10
질문 ATmega128 출력비교인터럽트 질문 댓글[2] Dkliekeun  24-04-09
질문 smt32405 타이머질문 댓글[4] stm32  24-04-08
질문 초음파센서 3개 동시 동작 기능구현 도와주세요,,,, 댓글[5] hmkim  24-04-08
질문 이 부품은 뭔가요? 댓글[1] 첨부파일아두이노초보보  24-04-08
질문 아두이노 코딩 문제 도움주시면 감사하겠습니다. 제발요  24-04-05
답변 답변 : 아두이노 코딩 문제 도움주시면 감사하겠습니다. 댓글[1] master  24-04-06
질문 atmega128 srf-05 초음파 센서 코딩에 FQ… 댓글[3] 도움필요  24-04-04
질문 (초보)알파벳 A만들고 행 제어하기 댓글[3] SKYUN  24-04-02
질문 CUBE Progrmammer 설정 변경 에러 해결법좀 댓글[1] 라칸  24-03-29
질문 atmega128로 압력센서를 사용하려고 합니다 댓글[2] vbn667766  24-03-28
질문 stm32f405오류 질문 댓글[2] stm32  24-03-27
질문 안녕하세요 세그먼트 질문입니다 댓글[4] stm32  24-03-21
질문 No source available for "<sign… 댓글[2] 라칸  24-03-20
질문 QA6P 압력센서를 이용한 모터제어 질문 댓글[2] 첨부파일IMAZ  24-03-17
질문 아두이노와 앱인벤터 관련 질문드립니다.. 첨부파일쏘니  24-03-12
답변 답변 : 아두이노와 앱인벤터 관련 질문드립니다.. master  24-03-12
질문 Atmega128A 초음파 3개로 led3개를 각각 제… 댓글[2] 밍토리  24-03-11
질문 서보 모터 제어 댓글[1] 제발요  24-03-07
질문 스텝모터 아두이노 제어 질무드립니다 댓글[4] 제발요  24-03-04
질문 분주비와 업/업다운 카운트 관련 질문 드립니다. 댓글[3] 412904  24-02-18
질문 stm32의 task 댓글[1] 라칸  24-02-07
질문 stm32에서 ping 같은걸 해볼수 있나요? 댓글[1] 라칸  24-01-23
질문 (초보)atmega128 led 제어 질문드립니다 댓글[1] aaa123  24-01-22
질문 UART 통신을 하는데 댓글[4] 라칸  24-01-10
질문 트랜지스터를 2개 쓰는이유 댓글[2] 첨부파일소정이  24-01-10
게시물 검색


Privacy Policy
MCU BASIC ⓒ 2017
PC버전