前幾天帶兒子逛商場,兒子看上一款音樂盒,小小的一個東西要幾十塊錢,感覺很不劃算……于是帶他吃了一頓比薩,很快他就忘了這回事啦(與兒子斗其樂無窮 ),回來以后,孩子又把這事記起來了,感情還是對音樂盒念念不忘啊,作為一名學習電子設計的小學生,正好借這個機會練練手,給孩子做一款獨一無二的遙控音樂盒。
遙控這個東西實現手段很多,紅外、藍牙、wifi……做這玩意太復雜啦,咱們的主要目的是做音樂盒啊,于是花了8塊從萬能的某寶上買了一款【2262/2272四路無線遙控套件】(還包郵哦)
2262/2272
先用面包板搭一下,可是音樂從哪弄呢?當然從黑壇里搜啊。
記得很早之前在群里看到一位群友寫過一篇【51單片機音樂盒1602顯示 Proteus仿真程序】,地址為:
http://www.zg4o1577.cn/bbs/dpj-183341-1.html
可是……
可是……
可是看到一大段樂譜,我頭直接就大了,這得需要多少單片機空間啊,咱的STC89才4K程序空間,本著寫單片機要節約每一個字節的原則,我對這段樂譜進行了改造!!!壓縮它,弄死它!原樂譜如下:
- //《煙花易冷》
- 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 };
- //《發如雪》
- 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};
- //《當你孤單你會想起誰》
- 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 };
- //《鄉間小路》
- 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};
復制代碼 仔細觀查發現:
第一個數字音符的范圍是:1到,代表哆來咪發...
第二個數字范圍是:0123之一,代表低音\中音\高音\超高音(第幾個八度)
第三個數字范圍是:嗯……又仔細看了一下,最大的值為6,于是寫了一段note.js程序,把每首樂譜進行了壓縮(順手10字節對齊一下),把三個字節壓縮為1個字節,直接把樂譜的空間節約了三分之二……
壓縮后的樂譜代碼如下:
- //////////////////////////////////////////////
- //7-5:對應的音符1234567之一(第幾個音),代表哆來咪發...
- //4-3:0:低音, 1:中音, 2:高音, 3:超高音(第幾個八度)
- //2-0:時間長度+1, 以半拍為單位, 樂曲數據表的結尾是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 };
- //《發如雪》
- 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};
- //《當你孤單你會想起誰》
- 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 };
-
- //《鄉間小路》
- 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};
復制代碼
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');
復制代碼
使用單片機的T2(16位自動重裝定時器)驅動發生,因為人的聽力是非常敏感的,程序執行過程中把T2設置為最高優先級!
另外,原文的控制部分看的我也是一臉的蒙B。。。原文代碼如下:
- ////////////////////////////////////////////////////////////////////////////////////
- void music_play(void)//播放相應歌曲的某個音符
- {
- 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]; //從數據表中讀出頻率數值,實際上是定時的時間長度
- timer0l=FREQL[fre];
- time=song1[num+2]; //讀出時間長度數值
- num+=3;
- if(fre<0) //判斷歌曲的結束位,結束后轉到下一首
- {
- num=0; //下一首從頭播放
- miao=0;
- music_num=2;
- }
- song(); //發出一個音符
- }
- ////////////////////////////////////////////////////////////////////////////////////
- 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();
- }
- ////////////////////////////////////////////////////////////////////////////////////
- }
復制代碼
額,好吧,再改!把每首樂譜的內存地址記錄下來
- // 記錄每個曲子的地址
- uint16 code songAddr[] = {song0, song1, song2, song3, song4, song5, song6, song7};
復制代碼
這樣就可以使用序號代表樂曲了。修改后的播放與控制部分如下(播放時間和按鈕防抖使用和個軟件定時器來控制,防止程序進入空轉等待,影響音樂的播放):
由于遙控板輸出的是高電平,所以使用了一個4069(69?這個好,我喜歡!!!)將高電平轉為低電平(先前使用NPN三極管搭了一個非門,考慮到搖控器上有四個按鈕,所以換成了4069,某寶國產的4毛錢一片,進口的1塊左右,包郵)
至此音樂部分改造完成,效果如下:
東西雖然簡單,但是改造樂譜部分還是讓我收獲很大。整體程序編譯下來,從2000多字節一下子降到893個字節,特別有成就感。
- 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
復制代碼
后面準備增加一個12232,用于顯示播放時間,第幾首樂曲,時間,溫度、濕度、節日提醒功能。
感謝51黑論壇,感謝群友提供的樂譜以及設計靈感。
單片機代碼等做完后統一發,嗯,先哄兒子玩會,哈哈……
視頻:
視頻.7z
(2.77 MB, 下載次數: 6)
2022-5-8 15:20 上傳
點擊文件名下載附件
演示視頻
|