音乐由音调和节奏构成
音调就是震动频率
频率单位 赫兹(HZ)
音名 频率
C 1 do 256
D 2 re 288
E 3 mi 320
F 4 fa 341又1/3
G 5 so 384
A 6 la 426又2/3
B 7 si 480
C 1 do 512
开一个阵列储存频率数据 int ToneHz[] = {0,256, 288, ... , 480, 512};
开一个阵列储存音乐音调 char Tone[] = {1,0,1,0,5,0,5,0,6,0,6,0,5,0,4,0,4,0,3,0,3,0,2,0,2,0,1...};
开一个阵列储存音调时间 int Rhythm[] = {250,250,250,250,250,250,250,250,250,250,250,250,500,250,250,250,250,250,250,250,250,250,250,250,250,250,500,250,...}
开一个定时器1来输出不同频率的方波
用公式算出定时器1的溢出值
以E 3 mi为例:THTL1 = 65536 - (1000000/2/ToneHz[3]);
TL1 = THTL1 % 256;
TH1 = THTL1 /256;
想方法利用原本那个定时器0来定时每个音调的时长(开停定时器1)
这样就可以用无源蜂鸣器发出音乐 |