找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1935|回復(fù): 0
收起左側(cè)

自制mp3涉及到的按鍵實現(xiàn)上一曲下一曲的問題

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

回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表