BASIC4MCU | 질문게시판 | 답변 : atmega128 전화 멜로디
페이지 정보
작성자 master 작성일2022-12-01 13:54 조회1,076회 댓글5건본문
#include <avr/io.h>
#include <avr/interrupt.h>
#define F_CPU 16000000UL
#include <util/delay.h>
//
#define OFF 0 //isr state compare value
#define ON 1 //isr state compare value
//
#define DO 0 // C(도) 523
#define RE 1 // D(레) 587
#define MI 2 // E(미) 659
#define FA 3 // F(파) 699
#define SO 4 // G(솔) 784
#define RA 5 // A(라) 880
#define SI 6 // B(시) 988
#define DO_H 7 // C_H(도)1047
#define RE_H 8 // R_H(레)1245
#define EOS 255 //(End of song)
//
volatilechar cb[]={238,212,189,178,158,141,126,118};
volatileunsigned char mz[]={SO,RA,SO,MI,DO_H,RA,SO,SO,RA,SO,RA,SO,DO_H,SI,FA,SO,FA,RE,SI,RA,SO,SO,RA,SO,RA,SO,RA,MI,SO,RA,SO,MI,DO_H,RA,SO,SO,RA,SO,RA,SO,DO_H,SI,EOS};
volatile unsigned char tone;
//
volatilechar fnd[]={0x00,0x00,0x00,0x3F,0x06,0x3F,0x40,0x5B,0x5B,0x66,0x6F,0x40,0x7D,0x7D,0x66,0x7F,0x00,0x00,0x00,0x00,0x00};
//010-2249-6648 << 제 번호 입니다.
volatileunsigned char fnd_sel[4]={0x08,0x04,0x02,0x01}; //좌->우로 하고자 한다면 반대로 설정(08,04...)
//
ISR(TIMER0_COMP_vect){
static unsigned char tone,i=0;
OCR0=cb[tone];
PORTB^=0x10;
}
//
ISR(TIMER1_COMPA_vect){ // 300ms
static char i=0;
if(mz[i]==EOS)i=0;
tone=mz[i++];
PORTA=tone;
}
//
int main(){
int sel,digit,del;
DDRG=0x0F; DDRC=0xFF;
DDRA=0xff; DDRB=0x10;
TCCR0=(1<<WGM01)|(1<<COM00)|4; TIMSK=(1<<OCIE0);
TCCR1B=0x0C; OCR1A=18749; TIMSK=0x10; //300ms
sei();
while(1){
for(digit=0;digit<18;digit++){ // 500ms*18=9sec
for(del=0;del<250;del++){ // 4ms*125=500ms
for(sel=0;sel<4;sel++){ PORTC=fnd[digit+sel]; PORTG=fnd_sel[sel]; _delay_ms(1); } // 1.04ms*4=4.16ms
}
}
}
return 0;
}
댓글 5
조회수 1,076weekizn님의 댓글
weekizn 작성일코드 작동시켜봤는데 번호는 그대로 나오는데 멜로디가 안나와요ㅠㅜㅜ 왜 멜로디 안나오는건가요,,?
weekizn님의 댓글
weekizn
jkit-128-1 이에요ㅠㅜ
master님의 댓글
master
다시 복사해서 해보세요
이전 소스로 멜로디 나오는 것은 확인 하신거죠?
weekizn님의 댓글
weekizn
네네ㅠㅜ 이전 소스로 돌리면 멜로디 나오는데 답변해주신거 복사해서 돌리면 버저에서 딱딱 소리가 들리긴하는데 멜로디는 안나오네요ㅠㅜㅜㅜ
master님의 댓글
master
회로가 있어야지 이리저리 체크하면서 디버깅 하기 쉬운데
물건이 없으니 도와드릴 방법이 없습니다.
코드가 길지 않으니 분석해서 잘 체크 해보세요