哀傷如同風(fēng),消失無影蹤。
前面的有兩個(gè)非常關(guān)鍵的點(diǎn)希望兄弟們明白
我一開始也失算了
這里兄弟們注意務(wù)必改成int 不然會(huì)超出
就會(huì)出現(xiàn)播放一半從頭開始的情況
下面是兩份起風(fēng)了代碼直接附上main.c
因?yàn)榱硗獾钠鋵?shí)和我之前說的模板都一樣復(fù)制粘貼就行
為什么是2份因?yàn)槭裁碅BCD大調(diào)我不懂啊 我看樂譜看不懂555
第一份speed為300
main.c
#include <REGX52.H>
#include "Delay.h"
#include"Timer0.h"
sbit Buzzer=P2^5;
//音符與索引對(duì)應(yīng)表,P:休止符,L:低音,M:中音,H:高音,下劃線:升半音符號(hào)#
#define P 0
#define L1 1
#define L1_ 2
#define L2 3
#define L2_ 4
#define L3 5
#define L4 6
#define L4_ 7
#define L5 8
#define L5_ 9
#define L6 10
#define L6_ 11
#define L7 12
#define M1 13
#define M1_ 14
#define M2 15
#define M2_ 16
#define M3 17
#define M4 18
#define M4_ 19
#define M5 20
#define M5_ 21
#define M6 22
#define M6_ 23
#define M7 24
#define H1 25
#define H1_ 26
#define H2 27
#define H2_ 28
#define H3 29
#define H4 30
#define H4_ 31
#define H5 32
#define H5_ 33
#define H6 34
#define H6_ 35
#define H7 36
#define SPEED 300 //我們以4分音符為基準(zhǔn)
unsigned int FreqTable[]={
0,
63628,63731,63835,63928,64021,64103,64185,64260,64331,64400,64463,64524,
64580,64633,64684,64732,64777,64820,64860,64898,64934,64968,65000,65030,
65058,65085,65110,65134,65157,65178,65198,65217,65235,65252,65268,65283
};
unsigned int code Music[]={
//音符,時(shí)值,
0,4,
18,2,
19,2,
21,2,
23,2,
11,4,
26,2,
23,6,
0,2,
18,2,
19,2,
21,2,
23,2,
9,4,
26,2,
23,2,
21,2,
23,2,
19,2,
21,2,
18,2,
19,2,
14,2,
0,4,
18,2,
19,2,
21,2,
23,2,
11,4,
26,2,
23,6,
0,2,
18,2,
19,2,
21,2,
23,2,
9,4,
26,2,
23,2,
21,2,
23,2,
19,2,
21,2,
18,2,
19,2,
14,2,
0,4,
9,6,
7,2,
9,6,
7,2,
9,4,
11,4,
14,4,
11,4,
9,6,
7,2,
9,6,
7,2,
9,2,
11,2,
9,2,
7,2,
1,4,
0,4,
9,6,
7,2,
9,6,
7,2,
9,4,
11,4,
14,4,
11,4,
9,6,
11,2,
9,4,
7,4,
9,8,
10,8,
9,6,
7,2,
9,6,
7,2,
9,4,
11,4,
14,4,
11,4,
9,6,
11,2,
9,4,
7,4,
3,4,
0,4,
11,2,
9,2,
7,2,
9,2,
7,4,
0,4,
11,2,
9,2,
7,2,
9,2,
7,4,
0,4,
11,2,
9,2,
7,2,
9,2,
7,8,
0,8,
0,4,
7,4,
9,4,
11,4,
7,4,
16,4,
14,2,
16,6,
0,2,
7,2,
18,4,
16,2,
18,6,
0,4,
18,4,
16,2,
18,6,
11,4,
19,2,
21,2,
19,2,
18,2,
16,4,
14,4,
16,4,
14,2,
16,4,
14,2,
16,2,
14,2,
16,4,
14,2,
9,4,
14,4,
11,8,
0,8,
7,4,
9,4,
11,4,
7,4,
16,4,
14,2,
16,6,
0,2,
7,2,
18,4,
16,2,
18,6,
0,4,
18,4,
16,2,
18,6,
11,4,
19,2,
21,2,
19,2,
18,2,
16,4,
14,4,
16,4,
23,2,
23,6,
14,4,
16,4,
23,2,
23,4,
14,4,
16,2,
16,12,
0,4,
19,4,
21,4,
23,4,
28,2,
26,6,
28,2,
26,6,
28,2,
26,6,
21,4,
23,6,
28,2,
26,6,
28,2,
26,6,
28,2,
26,4,
23,8,
21,4,
19,2,
16,4,
19,4,
19,2,
21,4,
19,2,
16,4,
19,4,
23,8,
23,4,
21,6,
0,4,
19,4,
21,4,
23,4,
28,2,
26,6,
28,2,
26,6,
28,2,
26,6,
0,2,
21,2,
23,4,
28,2,
26,6,
28,2,
26,6,
28,2,
26,6,
23,6,
21,4,
19,2,
16,4,
23,4,
21,4,
19,2,
16,4,
16,2,
19,2,
19,8,
0,4,
16,2,
23,6,
21,4,
19,2,
16,4,
23,4,
21,4,
19,2,
16,4,
16,2,
19,6,
19,8,
0xFF
};
unsigned int FreqSelect,MusicSelect;
void main()
{
Timer0Init();
while(1)
{
if(Music[MusicSelect]!=0xFF)
{
FreqSelect=Music[MusicSelect];
MusicSelect++;
Delay(SPEED/4*Music[MusicSelect]);
MusicSelect++;
TR0=0;
Delay(5);
TR0=1;
}
else
{
TR0=0;
while(1);
}
}
}
void Timer0_Routine() interrupt 1
{
if(FreqTable[FreqSelect]) //如果不是休止符
{
/*取對(duì)應(yīng)頻率值的重裝載值到定時(shí)器*/
TL0 = FreqTable[FreqSelect]%256; //設(shè)置定時(shí)初值
TH0 = FreqTable[FreqSelect]/256; //設(shè)置定時(shí)初值
Buzzer=!Buzzer; //翻轉(zhuǎn)蜂鳴器IO口
}
}
兄弟們擔(dān)待,開頭有個(gè)好像不對(duì)調(diào),我太懶了
第二份main.c
第二份speed 600文章來源:http://www.zghlxwxcb.cn/news/detail-594635.html
main.c
#include <REGX52.H>
#include "Delay.h"
#include"Timer0.h"
sbit Buzzer=P2^5;
//音符與索引對(duì)應(yīng)表,P:休止符,L:低音,M:中音,H:高音,下劃線:升半音符號(hào)#
#define P 0
#define L1 1
#define L1_ 2
#define L2 3
#define L2_ 4
#define L3 5
#define L4 6
#define L4_ 7
#define L5 8
#define L5_ 9
#define L6 10
#define L6_ 11
#define L7 12
#define M1 13
#define M1_ 14
#define M2 15
#define M2_ 16
#define M3 17
#define M4 18
#define M4_ 19
#define M5 20
#define M5_ 21
#define M6 22
#define M6_ 23
#define M7 24
#define H1 25
#define H1_ 26
#define H2 27
#define H2_ 28
#define H3 29
#define H4 30
#define H4_ 31
#define H5 32
#define H5_ 33
#define H6 34
#define H6_ 35
#define H7 36
#define SPEED 600 //我們以4分音符為基準(zhǔn)
unsigned int FreqTable[]={
0,
63628,63731,63835,63928,64021,64103,64185,64260,64331,64400,64463,64524,
64580,64633,64684,64732,64777,64820,64860,64898,64934,64968,65000,65030,
65058,65085,65110,65134,65157,65178,65198,65217,65235,65252,65268,65283
};
unsigned int code Music[]={
//音符,時(shí)值,
M2,3,
M1,1,
M2,3,
M1,1,
M2,2,
M3,2,
M5,2,
M3,2,
M2,3,
M1,1,
M2,3,
M1,1,
M2,1,
M3,1,
M2,1,
M1,1,
L5,2,
P,2,
M2,3,
M1,1,
M2,3,
M1,1,
M2,2,
M3,2,
M5,2,
M3,2,
M2,3,
M3,1,
M2,2,
M1,1,
M2,5,
P,4,
M2,3,
M1,1,
M2,3,
M1,1,
M2,2,
M3,2,
M5,2,
M3,2,
M2,3,
M3,1,
M2,2,
M1,1,
L6,3,
P,2,
M3,1,
M2,1,
M1,1,
M2,1,
M1,2,
P,2,
M3,1,
M2,1,
M1,1,
M2,1,
M1,2,
P,2,
M3,1,
M2,1,
M1,1,
M2,1,
M1,4,
P,6,
M1,2,
M2,2,
M3,2,
M1,2,
M6,2,
M5,1,
M6,3,
P,1,
M1,1,
M7,2,
M6,1,
M7,3,
P,2,
M7,2,
M6,1,
M7,3,
M3,2,
H1,1,
H2,1,
H1,1,
M7,1,
M6,2,
M5,2,
M6,2,
M5,1,
M6,2,
M5,1,
M6,1,
M5,1,
M6,2,
M5,1,
M2,2,
M5,1,
M5,1,
M3,5,
P,4,
M1,2,
M2,2,
M3,2,
M1,2,
M6,2,
M5,1,
M6,3,
P,1,
M1,1,
M7,2,
M6,1,
M7,3,
P,2,
M7,2,
M6,1,
M7,3,
M3,2,
H1,1,
H2,1,
H1,1,
M7,1,
M6,2,
M5,2,
M6,2,
H3,4,
M5,2,
M6,2,
H3,3,
M5,1,
M5,1,
M6,11,
P,2,
H1,2,
H2,2,
H3,2,
H6,1,
H5,3,
H6,1,
H5,3,
H6,1,
H5,3,
H2,1,
H3,3,
H6,1,
H5,3,
H6,1,
H5,3,
H6,1,
H5,2,
H3,1,
H3,3,
H2,2,
H1,1,
M6,2,
H1,3,
H2,2,
H1,1,
M6,2,
H1,2,
H3,6,
H2,1,
H3,1,
H2,2,
P,2,
H1,2,
H2,2,
H3,2,
H6,1,
H5,3,
H6,1,
H5,3,
H6,1,
H5,2,
P,1,
H2,1,
H3,2,
H6,1,
H5,3,
H6,1,
H5,3,
H6,1,
H5,2,
H3,2,
H3,1,
H2,2,
H1,1,
M6,2,
H3,2,
H2,2,
H1,1,
M6,3,
H1,2,
H1,8,
M6,1,
H3,3,
H2,2,
H1,1,
M6,1,
M6,1,
H3,2,
H2,2,
H1,1,
M6,3,
H1,7,
H1,8,
P,8,
0xFF
};
unsigned int FreqSelect,MusicSelect;
void main()
{
Timer0Init();
while(1)
{
if(Music[MusicSelect]!=0xFF)
{
FreqSelect=Music[MusicSelect];
MusicSelect++;
Delay(SPEED/4*Music[MusicSelect]);
MusicSelect++;
TR0=0;
Delay(5);
TR0=1;
}
else
{
TR0=0;
while(1);
}
}
}
void Timer0_Routine() interrupt 1
{
if(FreqTable[FreqSelect]) //如果不是休止符
{
/*取對(duì)應(yīng)頻率值的重裝載值到定時(shí)器*/
TL0 = FreqTable[FreqSelect]%256; //設(shè)置定時(shí)初值
TH0 = FreqTable[FreqSelect]/256; //設(shè)置定時(shí)初值
Buzzer=!Buzzer; //翻轉(zhuǎn)蜂鳴器IO口
}
}
over兄弟們 兩段任君采擷
speed越小速度越快 可以做變奏的
以后再更新一點(diǎn)別的 兄弟用那個(gè)軟件做起來也很方便文章來源地址http://www.zghlxwxcb.cn/news/detail-594635.html
到了這里,關(guān)于【【51單片機(jī)蜂鳴器實(shí)現(xiàn)起風(fēng)了】】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!