드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
게시물ID : programmer_9216짧은주소 복사하기
작성자 : NackNack★
추천 : 0
조회수 : 909회
댓글수 : 6개
등록시간 : 2015/04/08 21:09:11
과제로 아트메가128하는데
능력자분들의 도움이 필요합니다
노래를 만들래서 짜보고있는데
한음이 일정하게 나오지 않고 음이 높아집니다
Ex) 미 솔 을 차례대로 입력하면 미이이이이이↑
하고 비행기 활강하는소리처럼 쭉 올라갑니다
원래계획대로라면 미이이이→ 하고
일자로 나야하는데 말이죠ㅜㅜ
도움줌 부탁드려봅니다
#include <avr/io.h>
#include <stdint.h>
#define F_CPU 16000000UL
#define __DELAY_BACKWARD_COMPATIBLE__
#include <util/delay.h>
#define HALF_CYC 500000UL
#define P0 0x01
#define P1 0x04
#define do1 65
#define do2 131
#define do3 262
#define do4 523
#define re1 73
#define re2 147
#define re3 294
#define re4 587
#define mi1 82
#define mi2 165
#define mi3 330
#define mi4 659
#define pa1 87
#define pa2 175
#define pa3 349
#define pa4 698
#define sol1 98
#define sol2 196
#define sol3 392
#define sol4 784
#define ra1 110
#define ra2 220
#define ra3 440
#define ra4 880
#define si1 123
#define si2 247
#define si3 494
#define si4 988
void tone2(int fr, int duration)
{ uint32_t t_tot=HALF_CYC/fr;
int t_ms=t_tot/1000, t_us=t_tot % 1000, i;
for (i=0; i<duration; i++)
{ PORTB = PORTB | P1;
_delay_ms(t_ms);
_delay_us(t_us);
PORTB = PORTB & ~P1;
_delay_ms(t_ms);
_delay_us(t_us);
} }
int main()
{
int melody[]= {mi3, mi3, mi3, do3, mi3, sol3, mi3};
int dura[]= {1000, 1000,1000, 1000, 500, 500, 500};
double pause[] = {1000, 500, 500, 1000,1000,1000, 500};
DDRB = P1;
while(1)
{
if ((PINB & P0)== 0)
{
for(int j=0; j<6; j++)
{ tone2(melody[j], dura[j]);
_delay_ms(pause[j]);
} } } }
입니다ㅠㅜ
댓글 분란 또는 분쟁 때문에
전체 댓글이 블라인드 처리되었습니다.
새로운 댓글이 없습니다.