前幾天帶兒子逛商場,兒子看上一款音樂盒,小小的一個東西要幾十塊錢,感覺很不劃算……于是帶他吃了一頓比薩,很快他就忘了這回事啦(與兒子斗其樂無窮 ),回來以后,孩子又把這事記起來了,感情還是對音樂盒念念不忘啊,作為一名學(xué)習(xí)電子設(shè)計的小學(xué)生,正好借這個機會練練手,給孩子做一款獨一無二的遙控音樂盒。
遙控這個東西實現(xiàn)手段很多,紅外、藍牙、wifi……做這玩意太復(fù)雜啦,咱們的主要目的是做音樂盒啊,于是花了8塊從萬能的某寶上買了一款【2262/2272四路無線遙控套件】(還包郵哦)
O1CN01s36Xga1q2eNkVdsCo_!!0-item_pic.jpg_400x400.jpg (38.41 KB, 下載次數(shù): 63)
下載附件
2262/2272
2022-5-8 11:18 上傳
先用面包板搭一下,可是音樂從哪弄呢?當(dāng)然從黑壇里搜啊。
記得很早之前在群里看到一位群友寫過一篇【51單片機音樂盒1602顯示 Proteus仿真程序】,地址為:
http://www.torrancerestoration.com/bbs/dpj-183341-1.html
可是……
可是……
可是看到一大段樂譜,我頭直接就大了,這得需要多少單片機空間啊,咱的STC89才4K程序空間,本著寫單片機要節(jié)約每一個字節(jié)的原則,我對這段樂譜進行了改造。!壓縮它,弄死它!原樂譜如下:
- //《煙花易冷》
- unsigned char code song1[]={
- 5,2,1, 3,2,1, 2,2,2, 2,2,4, 3,2,1, 1,2,1, 2,2,1, 3,2,4,
- 5,2,1, 3,2,1, 2,2,2, 2,2,2, 5,1,1, 3,2,1, 4,2,1, 3,2,4,
- 3,2,1, 3,2,1, 7,2,1, 3,2,1, 2,2,2, 1,2,1, 7,1,1, 1,2,1,
- 2,2,1, 3,2,1, 6,2,3, 6,1,1, 1,2,1, 3,2,1, 2,2,1, 6,1,1,
- 1,2,1, 7,1,1, 5,1,1, 6,1,6, 5,2,1, 3,2,1, 2,2,2, 2,2,1,
- 2,2,1, 3,2,1, 1,2,1, 2,2,1, 3,2,4, 5,2,1, 3,2,1, 2,2,2,
- 2,2,1, 2,2,1, 5,1,1, 3,2,1, 4,2,1, 3,2,4, 3,2,1, 3,2,1,
- 7,2,3, 3,2,1, 2,2,2, 1,2,1, 7,1,1, 1,2,1, 2,2,1, 3,2,1,
- 6,2,3, 6,1,1, 1,2,1, 3,2,1, 2,2,1, 6,1,1, 1,2,1, 7,1,2,
- 5,1,2, 6,1,6, 0,0,0 };
- //《發(fā)如雪》
- unsigned char code song2[]={
- 5,1,1, 2,2,1, 3,2,2, 2,2,1, 3,2,1, 5,2,1, 6,2,1, 5,2,3, 1,2,1, 2,2,1,
- 3,2,1, 6,2,1, 5,2,1, 3,2,1, 5,2,3, 5,2,1, 6,2,1, 1,3,2, 6,2,1, 5,2,1,
- 3,2,1, 5,2,1, 3,2,2, 1,2,1, 2,2,1, 3,2,1, 1,2,1, 6,1,1, 3,2,1, 2,2,1,
- 5,1,1, 2,2,1, 3,2,2, 2,2,1, 3,2,1, 5,2,1, 6,2,1, 5,2,3, 1,2,1, 2,2,1,
- 3,2,1, 6,2,1, 5,2,3, 5,2,1, 6,2,1, 1,3,2, 6,2,1,
- 5,2,1, 3,2,1, 5,2,1, 3,2,2, 1,2,1, 6,1,1, 3,2,1, 2,2,1, 1,2,1, 6,1,1,
- 1,2,1, 2,2,1, 2,2,1, 1,2,4, 0,0,0 };
- //《簡單愛》
- unsigned char code song3[]={
- 5,1,1, 1,2,1, 2,2,1, 3,2,1, 2,2,1, 3,2,1, 4,2,1, 5,2,1, 5,2,1, 5,2,1,
- 4,2,1, 3,2,1, 2,2,3, 5,1,1, 1,2,1, 2,2,1, 3,2,1, 4,2,1, 5,2,1, 5,2,1,
- 5,2,1, 6,2,1, 5,2,2, 2,2,1, 3,2,1, 1,2,2, 1,2,1, 6,1,1, 2,2,1, 2,2,1,
- 3,2,1, 3,2,1, 1,2,1, 5,2,1, 1,2,1, 5,2,1, 1,2,1, 7,1,1, 1,2,1, 1,2,1, 6,1,1,
- 2,2,1, 2,2,1, 3,2,1, 3,2,1, 5,2,1, 5,2,1,
- 5,2,1, 6,2,1, 5,2,2, 2,2,1, 3,2,1, 1,2,2,
- 5,1,1, 1,2,1, 2,1,2, 3,2,1, 2,2,1, 3,2,1, 4,2,1, 5,2,1, 5,2,1, 5,2,1,
- 4,2,1, 3,2,1, 2,2,3, 5,1,1, 1,2,1, 2,2,1, 3,2,1, 2,2,1, 3,2,1, 4,2,1,
- 5,2,1, 5,2,1, 5,2,2, 2,2,1, 3,2,1, 1,2,2, 1,2,1, 6,1,1, 2,2,1, 2,2,1,
- 3,2,1, 3,2,1, 1,2,2, 5,2,1, 1,2,1, 5,2,1, 5,2,1, 7,1,1, 1,2,1, 0,0,0 };
- //《世上只有媽媽好》
- unsigned char code song4[]={
- 6,2,3, 5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1,
- //6,2,3代表6,中音,3個半拍;
- //5,2,1代表5,中音,1個半拍;
- //3,2,2代表3,中音,2個半拍;
- //5,2,2代表5,中音,2個半拍;
- //1,3,2代表1,高音,2個半拍;
- //...
- 5,2,1,6,2,4, 3,2,2, 5,2,1, 6,2,1, 5,2,2, 3,2,2, 1,2,1,6,1,1, 5,2,1,
- 3,2,1, 2,2,4, 2,2,3, 3,2,1, 5,2,2, 5,2,1, 6,2,1, 3,2,2, 2,2,2,
- 1,2,4, 5,2,3, 3,2,1,2,2,1, 1,2,1, 6,1,1, 1,2,1, 5,1,6, 0,0,0};
- //《當(dāng)你孤單你會想起誰》
- unsigned char code song5[]={
- 3,2,2, 3,2,1, 4,2,1, 3,2,2, 2,2,1, 1,2,1, 2,2,2, 5,2,2, 2,2,2, 2,2,3,
- 1,2,2, 1,2,1, 2,2,1, 1,2,2, 7,1,1, 6,1,1, 7,1,2, 3,2,2, 7,1,2, 7,1,3,
- 6,1,2, 2,2,1, 3,2,1, 2,2,1, 1,2,1, 6,1,2, 5,1,2, 2,2,1, 3,2,1, 2,2,1,
- 1,2,1, 6,1,2, 6,1,2, 2,2,1, 3,2,1, 2,2,1, 1,2,1, 6,1,1, 7,1,1, 1,2,6, 0,0,0 };
- //《鄉(xiāng)間小路》
- unsigned char code song6[]={
- 3,1,2, 3,1,1, 3,1,1, 6,0,1, 6,0,1, 1,1,2,
- 6,0,1, 5,0,1, 6,0,4, 6,0,2, 6,0,1 ,6,0,1, 6,0,2, 6,0,1, 1,1,1,
- 2,1,2, 2,1,1, 3,1,1, 2,1,4, 3,1,1, 3,1,1, 3,1,1, 2,1,1, 4,1,2,
- 4,1,2, 3,1,2, 2,1,1, 1,1,1, 2,1,4, 7,0,1, 7,0,1, 7,0,1, 6,0,1,
- 5,0,1, 5,0,1, 6,0,1, 7,0,1, 7,0,1, 6,0,1, 5,0,1, 6,0,4, 6,1,2,
- 3,1,1, 6,1,1, 7,1,1, 6,1,1, 5,1,1, 5,1,2, 5,1,1, 2,1,1, 5,1,1,
- 6,1,1, 5,1,1, 4,1,1, 4,1,2, 4,1,1, 3,1,1, 2,1,2, 1,1,1, 2,1,1,
- 3,1,1, 2,1,1, 1,1,1, 2,1,1, 3,1,4, 6,1,2, 3,1,1, 6,1,1, 7,1,1,
- 6,1,1, 5,1,1, 5,1,2, 2,1,1, 5,1,1, 6,1,1, 5,1,1, 4,1,1, 0,0,0};
- //《送別》
- unsigned char code song7[]={
- 5,1,2, 3,1,3, 5,1,1, 1,2,3, 6,1,2, 1,2,2,
- 5,1,4, 5,1,2, 1,1,1, 2,1,1, 3,1,2, 2,1,1, 1,1,1, 2,1,4, 5,1,2,
- 3,1,1, 5,1,1, 1,2,2, 7,1,1, 6,1,2, 1,2,2, 5,1,4, 5,1,2, 2,1,1,
- 3,1,1, 4,1,2, 7,0,1, 1,1,4, 6,1,2, 1,2,2, 1,2,4, 7,1,2, 6,1,1,
- 7,1,1, 1,2,4, 6,1,1, 7,1,1, 1,2,1, 6,1,1, 6,1,1, 5,1,1, 3,1,1,
- 1,1,1, 2,1,8, 5,1,2, 3,1,1, 5,1,1, 1,2,2, 7,1,1, 6,1,2, 1,2,2,
- 5,1,4, 5,1,2, 2,1,1, 3,1,1, 4,1,2, 7,0,2, 1,1,4, 0,0,0};
- //《最浪漫的事》
- unsigned char code song8[]={
- 5,1,1, 6,1,1, 1,2,1, 6,1,2, 6,1,1, 5,1,1, 6,1,1, 5,1,1, 3,1,1, 5,1,5,
- 5,1,1, 6,1,1, 1,2,1, 6,1,2, 6,1,1, 5,1,1, 6,1,1, 5,1,1, 6,1,1, 1,1,5,
- 1,1,1, 2,1,1, 3,1,1, 2,1,1, 2,1,1, 2,1,1, 1,1,1, 2,1,1, 1,1,1, 6,1,1,
- 3,1,2, 2,1,3, 5,1,1, 6,1,1, 1,2,1, 6,1,2, 6,1,1, 5,1,1, 6,1,1, 5,1,1,
- 6,1,1, 1,1,5, 1,1,1, 2,1,1, 3,1,1, 4,1,2, 4,1,1, 5,1,1, 6,1,1, 6,1,1,
- 5,1,1, 6,1,2, 1,2,1, 6,1,3, 1,2,1, 6,1,1, 5,1,1, 5,1,4, 1,1,1, 6,1,1,
- 5,1,5, 5,1,1, 6,1,1, 1,2,1, 3,1,1, 2,1,1, 3,1,1, 1,1,6, 0,0,0};
復(fù)制代碼 仔細觀查發(fā)現(xiàn):
第一個數(shù)字音符的范圍是:1到,代表哆來咪發(fā)...
第二個數(shù)字范圍是:0123之一,代表低音\中音\高音\超高音(第幾個八度)
第三個數(shù)字范圍是:嗯……又仔細看了一下,最大的值為6,于是寫了一段note.js程序,把每首樂譜進行了壓縮(順手10字節(jié)對齊一下),把三個字節(jié)壓縮為1個字節(jié),直接把樂譜的空間節(jié)約了三分之二……
壓縮后的樂譜代碼如下:
- //////////////////////////////////////////////
- //7-5:對應(yīng)的音符1234567之一(第幾個音),代表哆來咪發(fā)...
- //4-3:0:低音, 1:中音, 2:高音, 3:超高音(第幾個八度)
- //2-0:時間長度+1, 以半拍為單位, 樂曲數(shù)據(jù)表的結(jié)尾是0
- //////////////////////////////////////////////
- //《煙花易冷》
- BYTE code song0[]={
- 0xb0, 0x70, 0x51, 0x53, 0x70, 0x30, 0x50, 0x73, 0xb0, 0x70,
- 0x51, 0x51, 0xa8, 0x70, 0x90, 0x73, 0x70, 0x70, 0xf0, 0x70,
- 0x51, 0x30, 0xe8, 0x30, 0x50, 0x70, 0xd2, 0xc8, 0x30, 0x70,
- 0x50, 0xc8, 0x30, 0xe8, 0xa8, 0xcd, 0xb0, 0x70, 0x51, 0x50,
- 0x50, 0x70, 0x30, 0x50, 0x73, 0xb0, 0x70, 0x51, 0x50, 0x50,
- 0xa8, 0x70, 0x90, 0x73, 0x70, 0x70, 0xf2, 0x70, 0x51, 0x30,
- 0xe8, 0x30, 0x50, 0x70, 0xd2, 0xc8, 0x30, 0x70, 0x50, 0xc8,
- 0x30, 0xe9, 0xa9, 0xcd, 0x00 };
- //《發(fā)如雪》
- BYTE code song1[]={
- 0xa8, 0x50, 0x71, 0x50, 0x70, 0xb0, 0xd0, 0xb2, 0x30, 0x50,
- 0x70, 0xd0, 0xb0, 0x70, 0xb2, 0xb0, 0xd0, 0x39, 0xd0, 0xb0,
- 0x70, 0xb0, 0x71, 0x30, 0x50, 0x70, 0x30, 0xc8, 0x70, 0x50,
- 0xa8, 0x50, 0x71, 0x50, 0x70, 0xb0, 0xd0, 0xb2, 0x30, 0x50,
- 0x70, 0xd0, 0xb2, 0xb0, 0xd0, 0x39, 0xd0, 0xb0, 0x70, 0xb0,
- 0x71, 0x30, 0xc8, 0x70, 0x50, 0x30, 0xc8, 0x30, 0x50, 0x50,
- 0x33, 0x00 };
- //《簡單愛》
- BYTE code song2[]={
- 0xa8, 0x30, 0x50, 0x70, 0x50, 0x70, 0x90, 0xb0, 0xb0, 0xb0,
- 0x90, 0x70, 0x52, 0xa8, 0x30, 0x50, 0x70, 0x90, 0xb0, 0xb0,
- 0xb0, 0xd0, 0xb1, 0x50, 0x70, 0x31, 0x30, 0xc8, 0x50, 0x50,
- 0x70, 0x70, 0x30, 0xb0, 0x30, 0xb0, 0x30, 0xe8, 0x30, 0x30,
- 0xc8, 0x50, 0x50, 0x70, 0x70, 0xb0, 0xb0, 0xb0, 0xd0, 0xb1,
- 0x50, 0x70, 0x31, 0xa8, 0x30, 0x49, 0x70, 0x50, 0x70, 0x90,
- 0xb0, 0xb0, 0xb0, 0x90, 0x70, 0x52, 0xa8, 0x30, 0x50, 0x70,
- 0x50, 0x70, 0x90, 0xb0, 0xb0, 0xb1, 0x50, 0x70, 0x31, 0x30,
- 0xc8, 0x50, 0x50, 0x70, 0x70, 0x31, 0xb0, 0x30, 0xb0, 0xb0,
- 0xe8, 0x30, 0x00 };
- //《世上只有媽媽好》
- BYTE code song3[]={
- 0xd2, 0xb0, 0x71, 0xb1, 0x39, 0xd0, 0xb0, 0xd3, 0x71, 0xb0,
- 0xd0, 0xb1, 0x71, 0x30, 0xc8, 0xb0, 0x70, 0x53, 0x52, 0x70,
- 0xb1, 0xb0, 0xd0, 0x71, 0x51, 0x33, 0xb2, 0x70, 0x50, 0x30,
- 0xc8, 0x30, 0xad, 0x00};
- //《當(dāng)你孤單你會想起誰》
- BYTE code song4[]={
- 0x71, 0x70, 0x90, 0x71, 0x50, 0x30, 0x51, 0xb1, 0x51, 0x52,
- 0x31, 0x30, 0x50, 0x31, 0xe8, 0xc8, 0xe9, 0x71, 0xe9, 0xea,
- 0xc9, 0x50, 0x70, 0x50, 0x30, 0xc9, 0xa9, 0x50, 0x70, 0x50,
- 0x30, 0xc9, 0xc9, 0x50, 0x70, 0x50, 0x30, 0xc8, 0xe8, 0x35,
- 0x00 };
-
- //《鄉(xiāng)間小路》
- BYTE code song5[]={
- 0x69, 0x68, 0x68, 0xc0, 0xc0, 0x29, 0xc0, 0xa0, 0xc3, 0xc1,
- 0xc0, 0xc0, 0xc1, 0xc0, 0x28, 0x49, 0x48, 0x68, 0x4b, 0x68,
- 0x68, 0x68, 0x48, 0x89, 0x89, 0x69, 0x48, 0x28, 0x4b, 0xe0,
- 0xe0, 0xe0, 0xc0, 0xa0, 0xa0, 0xc0, 0xe0, 0xe0, 0xc0, 0xa0,
- 0xc3, 0xc9, 0x68, 0xc8, 0xe8, 0xc8, 0xa8, 0xa9, 0xa8, 0x48,
- 0xa8, 0xc8, 0xa8, 0x88, 0x89, 0x88, 0x68, 0x49, 0x28, 0x48,
- 0x68, 0x48, 0x28, 0x48, 0x6b, 0xc9, 0x68, 0xc8, 0xe8, 0xc8,
- 0xa8, 0xa9, 0x48, 0xa8, 0xc8, 0xa8, 0x88, 0x00};
- //《送別》
- BYTE code song6[]={
- 0xa9, 0x6a, 0xa8, 0x32, 0xc9, 0x31, 0xab, 0xa9, 0x28, 0x48,
- 0x69, 0x48, 0x28, 0x4b, 0xa9, 0x68, 0xa8, 0x31, 0xe8, 0xc9,
- 0x31, 0xab, 0xa9, 0x48, 0x68, 0x89, 0xe0, 0x2b, 0xc9, 0x31,
- 0x33, 0xe9, 0xc8, 0xe8, 0x33, 0xc8, 0xe8, 0x30, 0xc8, 0xc8,
- 0xa8, 0x68, 0x28, 0x4e, 0xa9, 0x68, 0xa8, 0x31, 0xe8, 0xc9,
- 0x31, 0xab, 0xa9, 0x48, 0x68, 0x89, 0xe1, 0x2b, 0x00};
- //《最浪漫的事》
- BYTE code song7[]={
- 0xa8, 0xc8, 0x30, 0xc9, 0xc8, 0xa8, 0xc8, 0xa8, 0x68, 0xac,
- 0xa8, 0xc8, 0x30, 0xc9, 0xc8, 0xa8, 0xc8, 0xa8, 0xc8, 0x2c,
- 0x28, 0x48, 0x68, 0x48, 0x48, 0x48, 0x28, 0x48, 0x28, 0xc8,
- 0x69, 0x4a, 0xa8, 0xc8, 0x30, 0xc9, 0xc8, 0xa8, 0xc8, 0xa8,
- 0xc8, 0x2c, 0x28, 0x48, 0x68, 0x89, 0x88, 0xa8, 0xc8, 0xc8,
- 0xa8, 0xc9, 0x30, 0xca, 0x30, 0xc8, 0xa8, 0xab, 0x28, 0xc8,
- 0xac, 0xa8, 0xc8, 0x30, 0x68, 0x48, 0x68, 0x2d, 0x00};
復(fù)制代碼
note.js壓縮代碼標例:
- let tt = [5,1,1, 6,1,1, 1,2,1, 6,1,2, 6,1,1, 5,1,1, 6,1,1, 5,1,1, 3,1,1, 5,1,5,
- 5,1,1, 6,1,1, 1,2,1, 6,1,2, 6,1,1, 5,1,1, 6,1,1, 5,1,1, 6,1,1, 1,1,5,
- 1,1,1, 2,1,1, 3,1,1, 2,1,1, 2,1,1, 2,1,1, 1,1,1, 2,1,1, 1,1,1, 6,1,1,
- 3,1,2, 2,1,3, 5,1,1, 6,1,1, 1,2,1, 6,1,2, 6,1,1, 5,1,1, 6,1,1, 5,1,1,
- 6,1,1, 1,1,5, 1,1,1, 2,1,1, 3,1,1, 4,1,2, 4,1,1, 5,1,1, 6,1,1, 6,1,1,
- 5,1,1, 6,1,2, 1,2,1, 6,1,3, 1,2,1, 6,1,1, 5,1,1, 5,1,4, 1,1,1, 6,1,1,
- 5,1,5, 5,1,1, 6,1,1, 1,2,1, 3,1,1, 2,1,1, 3,1,1, 1,1,6, 0,0,0];
- let count = 0;
- let offset = 0;
- let str = ''
- while(tt[offset] != 0) {
- let tmp = 0;
- tmp += tt[offset] << 5;
- tmp += tt[offset + 1] << 3;
- if(tt[offset + 2] >= 8)
- tt[offset + 2] = 7;
- tmp += tt[offset + 2] - 1;
- //str += '0x' + tt[offset] + tt[offset + 1] + ',' + tt[offset + 2] + ', ';
- str += '0x' + tmp.toString(16) + ', ';
- offset += 3;
- //console.log(' ' + str);
- if(++count >= 10) {
- console.log(' ' + str);
- count = 0;
- str = '';
- }
- }
- console.log(' ' + str + '0x00');
復(fù)制代碼
使用單片機的T2(16位自動重裝定時器)驅(qū)動發(fā)生,因為人的聽力是非常敏感的,程序執(zhí)行過程中把T2設(shè)置為最高優(yōu)先級!
另外,原文的控制部分看的我也是一臉的蒙B。。。原文代碼如下:
- ////////////////////////////////////////////////////////////////////////////////////
- void music_play(void)//播放相應(yīng)歌曲的某個音符
- {
- if(((music_num==1)&&(play_enable==1))&&(power_enable==1))
- {
- LCDDispNum(5,2,music_num);
- fre=song1[num]+7*song1[num+1]-1;//第i個是音符,第i+1個是第幾個八度
- timer0h=FREQH[fre]; //從數(shù)據(jù)表中讀出頻率數(shù)值,實際上是定時的時間長度
- timer0l=FREQL[fre];
- time=song1[num+2]; //讀出時間長度數(shù)值
- num+=3;
- if(fre<0) //判斷歌曲的結(jié)束位,結(jié)束后轉(zhuǎn)到下一首
- {
- num=0; //下一首從頭播放
- miao=0;
- music_num=2;
- }
- song(); //發(fā)出一個音符
- }
- ////////////////////////////////////////////////////////////////////////////////////
- if(((music_num==2)&&(play_enable==1))&&(power_enable==1))
- {
- LCDDispNum(5,2,music_num);
- fre=song2[num]+7*song2[num+1]-1;
- timer0h=FREQH[fre];
- timer0l=FREQL[fre];
- time=song2[num+2];
- num+=3;
- if(fre<0)
- {
- num=0;
- miao=0;
- music_num=3;
- }
- song();
- }
- ////////////////////////////////////////////////////////////////////////////////////
- if(((music_num==3)&&(play_enable==1))&&(power_enable==1))
- {
- LCDDispNum(5,2,music_num);
- fre=song3[num]+7*song3[num+1]-1;
- timer0h=FREQH[fre];
- timer0l=FREQL[fre];
- time=song3[num+2];
- num+=3;
- if(fre<0)
- {
- num=0;
- miao=0;
- music_num=4;
- }
- song();
- }
- ////////////////////////////////////////////////////////////////////////////////////
- if(((music_num==4)&&(play_enable==1))&&(power_enable==1))
- {
- LCDDispNum(5,2,music_num);
- fre=song4[num]+7*song4[num+1]-1;
- timer0h=FREQH[fre];
- timer0l=FREQL[fre];
- time=song4[num+2];
- num+=3;
- if(fre<0)
- {
- num=0;
- miao=0;
- music_num=5;
- }
- song();
- }
- ////////////////////////////////////////////////////////////////////////////////////
- if(((music_num==5)&&(play_enable==1))&&(power_enable==1))
- {
- LCDDispNum(5,2,music_num);
- fre=song5[num]+7*song5[num+1]-1;
- timer0h=FREQH[fre];
- timer0l=FREQL[fre];
- time=song5[num+2];
- num+=3;
- if(fre<0)
- {
- num=0;
- miao=0;
- music_num=1;
- }
- song();
- }
- ////////////////////////////////////////////////////////////////////////////////////
- }
復(fù)制代碼
額,好吧,再改!把每首樂譜的內(nèi)存地址記錄下來
- // 記錄每個曲子的地址
- uint16 code songAddr[] = {song0, song1, song2, song3, song4, song5, song6, song7};
復(fù)制代碼
這樣就可以使用序號代表樂曲了。修改后的播放與控制部分如下(播放時間和按鈕防抖使用和個軟件定時器來控制,防止程序進入空轉(zhuǎn)等待,影響音樂的播放):
由于遙控板輸出的是高電平,所以使用了一個4069(69?這個好,我喜歡。。。⿲⒏唠娖睫D(zhuǎn)為低電平(先前使用NPN三極管搭了一個非門,考慮到搖控器上有四個按鈕,所以換成了4069,某寶國產(chǎn)的4毛錢一片,進口的1塊左右,包郵)
至此音樂部分改造完成,效果如下:
2.jpg (495.48 KB, 下載次數(shù): 65)
下載附件
2022-5-8 11:43 上傳
東西雖然簡單,但是改造樂譜部分還是讓我收獲很大。整體程序編譯下來,從2000多字節(jié)一下子降到893個字節(jié),特別有成就感。
- Program Size: data=53.0 xdata=0 const=583 code=839
- creating hex file from ".\Objects\test"...
- ".\Objects\test" - 0 Error(s), 0 Warning(s).
- Build Time Elapsed: 00:00:01
復(fù)制代碼
后面準備增加一個12232,用于顯示播放時間,第幾首樂曲,時間,溫度、濕度、節(jié)日提醒功能。
感謝51黑論壇,感謝群友提供的樂譜以及設(shè)計靈感。
單片機代碼等做完后統(tǒng)一發(fā),嗯,先哄兒子玩會,哈哈……
51hei.png (5.34 KB, 下載次數(shù): 53)
下載附件
2022-5-8 15:17 上傳
視頻:
視頻.7z
(2.77 MB, 下載次數(shù): 6)
2022-5-8 15:20 上傳
點擊文件名下載附件
演示視頻 下載積分: 黑幣 -5
|