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