我自己做的是一個DIY的mp3播放器。(相對簡單一點(diǎn),見笑) 大概算是完成了,但是在最后添加上一曲下一曲功能的時候遇到了瓶頸。 我在上網(wǎng)查看了相關(guān)材料,但大多答非所問。 我的問題是: 使用的是按鍵實(shí)現(xiàn)上一曲下一曲,所以涉及到按鍵掃描的頻率問題。 設(shè)想的是使用中斷程序,每10ms掃描一次按鍵,或者更短。因為播放的mp3文件的16位數(shù)據(jù)是一個時間十分短暫、次數(shù)十分多的過程。 這個10ms一次的掃描頻率是否過高了?或者是否有其他方法可以實(shí)現(xiàn)持續(xù)整個音樂播放過程的按鍵掃描? (原本是在中斷程序中掃描按鍵情況對MusicNum進(jìn)行加或減,緊接著調(diào)用MusicPlay。 我在主循環(huán)中用了這個函數(shù)之后,又在中斷中調(diào)用同一個函數(shù),涉及到子函數(shù)重入的問題,會有warning。所以我將中斷中的MusicPlay刪除了。) 我在程序中設(shè)置一個變量MusicNum作為文件播放程序MusicPlay的參數(shù)。 MusicPlay是一個switch函數(shù),MusicNum作為switch中case的判斷參數(shù)。 在中斷程序中根據(jù)按鍵情況對MusicNum進(jìn)行加或減 中斷改變MusicNum的值,在中斷結(jié)束后返回MusicPlay程序后,是會根據(jù)新的MusicNum重新進(jìn)入switch選擇還是在繼續(xù)運(yùn)行上一個MusicNum對應(yīng)的case? 還有幾種可能的錯誤是: 我將按鍵對應(yīng)引腳拉低的方式是接地,拉低的方式是否會有一些不規(guī)范的問題?(但是我自己用電壓表測過了,初始電壓在5V左右,按鍵按下后跳轉(zhuǎn)至0V) 按鍵對應(yīng)引腳的特殊性,是否會有些I/O口特別而不能將其拉低?(我選的是單片機(jī)不少I/O口都有復(fù)用的功能,但是我認(rèn)為我選用的I/O只是普通的,也不是VCC和GND引腳) 我按照自己的想法做完之后,上一曲下一曲的按鍵并沒有作用,而且長按按鍵的話會使音樂停止播放,松開后繼續(xù)播放當(dāng)前音樂,說明并沒有MusicNum值的改變。 我原本認(rèn)為是沒有進(jìn)入中斷,長按通知播放是引腳的問題(例如拉低某個引腳會進(jìn)入掉電模式等等),所以在將中斷程序去除再長按,以證明。但是去除后,按鍵卻理想化的沒有任何作用。下為按鍵掃描的部分 if(key2==0) //音樂下一首 { delayms(10); if(key2==0); { MusicNum++; while(!key2); } } 所以是可以進(jìn)入中斷的,長按停止播放應(yīng)該是 while(!key2); /等待按鍵釋放 這一句的作用。 那么為什么進(jìn)入了中斷中的掃描按鍵,并且可以到等待按鍵釋放這一句卻無法使得上一句中的MusicNum產(chǎn)生數(shù)值變化? 我不知道問題可能出在哪,麻煩大佬可以提供些意見或者看法,十分感謝!
|