喜歡用單片機(jī)做音樂播放的,很愁怎么把音樂轉(zhuǎn)換成代碼,從而能在單片機(jī)中播放
下面就有方法了:
1:必須有認(rèn)識(shí)簡譜的能力,不懂簡譜,那就免談了,自己去學(xué)音樂知識(shí)吧
2:具有一定的電子知識(shí),至少知道單片機(jī)是什么東西。不懂網(wǎng)上查。
3:用音樂代碼編輯器,根據(jù)簡譜,搞出一段代碼來,復(fù)制到程序中的
uint code sound[]={0xff,0x00,};
放在0xff和0x00之間就可以了。(圖片中涂色了得部分)
然后產(chǎn)生代碼,燒寫到51單片機(jī)去。
用普通的8050三極管,接一個(gè)8歐的喇叭就可以發(fā)出音樂。
管腳要求推挽輸出。
4:相同的音之間,比如三個(gè)555 ,任意兩個(gè)5之間最好加1/8拍的休止符。
5:目前沒有加更短的拍數(shù)。普通音樂足夠用了。
6: 刪除音節(jié),目前不能使用,輸錯(cuò)一個(gè)話,就在屏幕上刪除。
7: 先按一下節(jié)拍,就是上面一行的按鈕,然后才按具體的音符,即下面的一行。
其中C1表示 鋼琴的中央C。
說明
曲譜存貯格式 unsigned char code MusicName{音高,音長,音高,音長...., 0,0}; 末尾:0,0 表示結(jié)束(Important)音高由三位數(shù)字組成:
個(gè)位是表示 1~7 這七個(gè)音符
十位是表示音符所在的音區(qū):1-低音,2-中音,3-高音;
百位表示這個(gè)音符是否要升半音: 0-不升,1-升半音。
音長最多由三位數(shù)字組成:
個(gè)位表示音符的時(shí)值,其對應(yīng)關(guān)系是:
|數(shù)值(n): |0 |1 |2 |3 | 4 | 5 | 6
|幾分音符: |1 |2 |4 |8 |16 |32 |64 音符=2^n
十位表示音符的演奏效果(0-2): 0-普通,1-連音,2-頓音
百位是符點(diǎn)位: 0-無符點(diǎn),1-有符點(diǎn)
調(diào)用演奏子程序的格式
Play(樂曲名,調(diào)號(hào),升降八度,演奏速度);
|樂曲名 : 要播放的樂曲指針,結(jié)尾以(0,0)結(jié)束;
|調(diào)號(hào)(0-11) : 是指樂曲升多少個(gè)半音演奏;
|升降八度(1-3) : 1:降八度, 2:不升不降, 3:升八度;
|演奏速度(1-12000): 值越大速度越快;