標題:
單片機歌曲上一曲下一曲切換問題求助
[打印本頁]
作者:
陸小賤
時間:
2017-4-10 16:22
標題:
單片機歌曲上一曲下一曲切換問題求助
各位 我想請教個問題,要實現單片機歌曲的切換如何做,不用外部中斷實現能用IF語句實現嗎 ?
我直接在主函數下while(1)循環(huán)內寫IF(!KEY)(相應的歌曲自加或自減)不起作用是為什么
作者:
張恒博
時間:
2019-12-23 11:05
我也在研究這個,應該是沒法實現的,因為蜂鳴器響,一定是在一個循環(huán)里。
作者:
諸天明月
時間:
2019-12-24 11:15
void PlayMusic(uchar arr[],uint num)
{
uint i=0;
TR1=1;
while(i<num)
{
display(); // 顯示當前在播放歌曲
if(gPlayStatus==1) // 判斷播放狀態(tài)是否為播放還是暫停
{
gTone=arr[i]; // 給全局變量gTone賦值,方便中斷函數使用
PlayTone(arr[i],arr[i+1]); // 開始演奏一個節(jié)拍
i+=2; // 進入下一個節(jié)拍,因為每2個數為1組,所以每次要加2
if(i==num) // 判斷歌曲是否播放完了
{
gPlayStatus=0; // 播放完了的話,則把播放狀態(tài)改為暫停,否則會循環(huán)播放
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) // 如果是播放狀態(tài),則改為暫停狀態(tài)
{
gPlayStatus=0; //切換成 暫停
TR1=0; //關閉定時器計時
Beep_P=1; //關閉喇叭
}
else // 如果是暫停狀態(tài),則改為播放狀態(tài)
{
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;
}
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1