音樂由音調和節奏構成
音調就是震動頻率
頻率單位 赫茲(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)
這樣就可以用無源蜂鳴器發出音樂 |