![]() |
發布時間: 2023-12-18 13:36
正文摘要:各位大神幫小弟看一下這個怎么改 弄了個STC32G12K128的音樂譜曲程序,但是這個目前只能重復播放,我想讓它播放完一次就停止,不知道該怎么高,求助各位大神! |
在單片機音樂譜曲程序中,如果你希望讓它播放完一次后停止,可以使用一個計數器或者標志位來控制播放次數,并在播放完成后停止程序執行。 下面是一個偽代碼示例,展示如何實現播放一次后停止的邏輯: c // 假設這是播放音樂的函數 void playMusic() { // 播放音樂的代碼邏輯,這里是示例 // 可以是音符、頻率等控制輸出音樂的具體內容 // 例如使用延時、定時器等方式播放音樂 } int main() { int playCount = 0; // 初始化播放次數計數器為0 // 循環播放音樂,直到播放次數達到1次 while (playCount < 1) { playMusic(); // 調用播放音樂的函數 // 播放完成后增加播放次數計數器 playCount++; } // 播放完成后,可以執行停止播放或其他操作 // 停止播放的代碼可以放在這里 // 停止后的其他程序邏輯或者空閑狀態的處理 return 0; } 在這個示例中,playMusic() 函數用于播放音樂。通過 playCount 變量記錄播放的次數,當播放次數達到1次后,程序將跳出循環停止播放,并執行停止播放后的其他操作。 根據你的具體單片機和音樂播放邏輯進行相應的調整和實現。實際實現可能需要使用特定的單片機指令、定時器或其他硬件功能來產生音樂和控制播放。 |
xiaoyuxinke 發表于 2023-12-19 00:27 你有說過按鍵嗎? |
謝謝,這次可以播放一次了,按一下鍵只播放一次,但是下次就不管用了,單片機上電只能按一下鍵放一次,再按就不管用了。 |
![]() 簡單粗暴 |
簡簡單單562 發表于 2023-12-18 13:53 不行,一但開始播放,加了標志位也停不了 好像和定時器中斷有關,具體我也沒看明白 |
簡簡單單562 發表于 2023-12-18 13:53 不管用,只要一開始播放,就不會停止,加了標志位也不行 |
uchar play=1; ... if(play==1) { play = 0; music(); } |
設置一個標志,表示正在播放,播放完成就清除,停止播放。 |
如果希望只運行一次,可以定制一個變量標志 , if(cishu<1) {執行音樂代碼函數, 然后cishu++;} ,這 樣下次循環到這里的時候,由于if(cishu不滿足小于1),所以不會繼續執行音樂代碼。 |