void PlayMusic(uchar arr[],uint num)
{
uint i=0;
TR1=1;
while(i<num)
{
display(); // 顯示當前在播放歌曲
if(gPlayStatus==1) // 判斷播放狀態是否為播放還是暫停
{
gTone=arr[i]; // 給全局變量gTone賦值,方便中斷函數使用
PlayTone(arr[i],arr[i+1]); // 開始演奏一個節拍
i+=2; // 進入下一個節拍,因為每2個數為1組,所以每次要加2
if(i==num) // 判斷歌曲是否播放完了
{
gPlayStatus=0; // 播放完了的話,則把播放狀態改為暫停,否則會循環播放
TR1=0;
T1_num=0;
fen=0;
miao=0;
gSong++; // 把當前播放到第幾首歌的變量gSong加1,即切到下一曲
if(gSong>SONG) // 如果gSong為SONG,說明到后面的盡頭了,則轉為第一首
gSong=1;
}
}
if(Key1_P==0) // 判斷播放過程中是否按下了“開始/暫停”鍵
{
DelayMs(10); // 消除按鍵按下的抖動
while(!Key1_P); // 等待按鍵釋放
DelayMs(10); // 消除按鍵松開的抖動
if(gPlayStatus==1) // 如果是播放狀態,則改為暫停狀態
{
gPlayStatus=0; //切換成 暫停
TR1=0; //關閉定時器計時
Beep_P=1; //關閉喇叭
}
else // 如果是暫停狀態,則改為播放狀態
{
gPlayStatus=1; //切換成 播放
TR1=1; //重新打開定時器計時
}
}
if(Key2_P==0) // 判斷播放過程中是否按下了“上一曲”鍵
{
DelayMs(10); // 消除按鍵按下的抖動
while(!Key2_P); // 等待按鍵釋放
DelayMs(10); // 消除按鍵松開的抖動
gSong--; // 把當前播放到第幾首歌的變量gSong減1,即切到上一曲
if(gSong==0) // 如果gSong為0,說明到前面的盡頭了,則轉為最后一首
gSong=SONG;
T1_num=0;
fen=0;
miao=0;
break;
}
if(Key3_P==0) // 判斷播放過程中是否按下了“下一曲”鍵
{
DelayMs(10); // 消除按鍵按下的抖動
while(!Key3_P); // 等待按鍵釋放
DelayMs(10); // 消除按鍵松開的抖動
gSong++; // 把當前播放到第幾首歌的變量gSong加1,即切到下一曲
if(gSong>SONG) // 如果gSong為SONG,說明到后面的盡頭了,則轉為第一首
gSong=1;
T1_num=0;
fen=0;
miao=0;
break;
}
}
gPlayStatus=1;
} |