标题: 这个单片机最小系统播放音乐的例子真不错 [打印本页]

作者: hutians    时间: 2015-2-10 20:16
标题: 这个单片机最小系统播放音乐的例子真不错
         学习单片机,制作单片机最小系统是每个单片机爱好者的都经历过的阶段,单片机最小系统制作好有什么用呢?为提高单片机爱好者学习制作单片机最小系统兴趣,这里介绍一个有趣的单片机小程序,就是用单片机最小系统播放欢乐颂及最炫民族风片段。在按下图制作好单片机最小系统后,再增加三只元件:1个电阻、1个S9012三极管,1个8欧的小喇叭后,即可完成这个单片机最小系统播放欢乐颂及最炫民族风片段的小试验,单片机爱好者通过这个小试验后,一定会大大增强对单片机学习的兴趣。       这个单片机最小系统播放欢乐颂及最炫民族风片段的小试验,由于电路比较简单,所以这里就不画出原理图了,直接给出试验的PCB图,感兴趣的爱好者可以按图进行焊接制作,制作好后向单片机内烧写程序后安装上去就可以工作,感受一下单片机的无穷勉力。
      下载 单片机播放欢乐颂与最炫民族风片段程序包.zip (204.72 KB, 下载次数: 172)



      焊好的单片机最小系统播放欢乐颂及最炫民族风片段试验板的实物照片




  1. /******************************************************************************/
  2. /**程序名称:单片机播放欢乐颂与最炫民族风片段
  3. /**其    他:用于时钟周期为12MHz的STC89C52单片机
  4. /******************************************************************************/
  5. #include<reg52.h>
  6. sbit BUZZER = P3^2;

  7. #define uchar unsigned char
  8. #define uint  unsigned int
  9. #define REST         36                        //休止符
  10. #define A                  0                  //低音1
  11. #define AB          1                  //低音1.5
  12. #define B                  2                  //低音2
  13. #define BC          3                  //低音2.5
  14. #define C                  4                  //低音3
  15. #define D                  5                  //低音4
  16. #define DE                 6                  //低音4.5
  17. #define E                 7                       //低音5
  18. #define EF          8                  //低音5.5
  19. #define F                  9                  //低音6
  20. #define FG          10          //低音6.5
  21. #define G                 11          //低音7
  22. #define L                  12          //中音1
  23. #define LM          13          //中音1.5
  24. #define M                  14          //中音2
  25. #define MN          15          //中音2.5
  26. #define N                  16                 //中音3
  27. #define O                  17          //中音4
  28. #define OP          18          //中音4.5
  29. #define P                  19          //中音5
  30. #define PQ          20          //中音5.5
  31. #define Q                  21          //中音6
  32. #define QR          22          //中音6.5
  33. #define R                  23          //中音7
  34. #define S                  24          //高音1
  35. #define SU          25          //高音1.5
  36. #define U                  26          //高音2
  37. #define UV          27          //高音2.5
  38. #define V                  28          //高音3
  39. #define W                  29          //高音4
  40. #define WX          30          //高音4.5
  41. #define X                  31          //高音5
  42. #define XY          32          //高音5.5
  43. #define Y                  33          //高音6
  44. #define YZ          34          //高音6.5
  45. #define Z                  35          //高音7

  46. //音阶
  47. uchar code m_note[][2] = {
  48. {248,136},{248,243},{249,88},{249,184},{250,18},{250,103},{250,184},{251,3},{251,75},
  49. {251,143},{251,206},{252,11},{252,67},{252,121},{252,172},{252,219},{253,9},{253,51},
  50. {253,91},{253,129},{253,165},{253,199},{253,231},{254,5},{254,33},{254,60},{254,85},
  51. {254,109},{254,132},{254,153},{254,173},{254,192},{254,210},{254,227},{254,243},{255,2},
  52. {0,0},
  53. };


  54. //音符(1对应三十二分音符,32对应全音符)
  55. uchar code display[][2] = {
  56. //欢乐颂
  57. {N,8},{N,8},{O,8},{P,8},{P,8},{O,8},{N,8},{M,8},{L,8},{L,8},{M,8},{N,8},{N,12},{M,4},{M,8},{0xff,8},
  58. {N,8},{N,8},{O,8},{P,8},{P,8},{O,8},{N,8},{M,8},{L,8},{L,8},{M,8},{N,8},{M,12},{L,4},{L,8},{0xff,8},
  59. {M,8},{M,8},{N,8},{L,8},{M,8},{N,4},{O,4},{N,8},{L,8},{M,8},{N,4},{O,4},{N,8},{M,8},{L,8},{M,8},{E,8},
  60. {N,8},{N,8},{O,8},{P,8},{P,8},{O,8},{N,8},{M,8},{L,8},{L,8},{M,8},{N,8},{M,12},{L,4},{L,8},{0xff,8},
  61. {M,8},{M,8},{N,8},{L,8},{M,8},{N,4},{O,4},{N,8},{L,8},{M,8},{N,4},{O,4},{N,8},{M,8},{L,8},{M,8},{E,8},
  62. {N,8},{N,8},{O,8},{P,8},{P,8},{O,8},{N,8},{M,8},{L,8},{L,8},{M,8},{N,8},{M,12},{L,4},{L,8},{0xff,8},
  63. //乐谱(最炫民族风)
  64. {N,8},{F,4},{F,4},{L,8},{N,8},{M,4},{M,2},{N,2},{M,4},{L,4},
  65. {M,4},{L,4},{F,8},{N,8},{F,4},{F,4},{L,8},{N,8},
  66. {P,4},{M,2},{N,2},{M,4},{L,4},{M,4},{L,4},{G,4},{E,4},
  67. {N,8},{F,4},{F,4},{L,8},{N,8},{M,4},{M,2},{N,2},{M,4},{L,4},
  68. {M,4},{L,4},{F,4},{E,4},{N,8},{F,4},{F,4},{L,8},{N,8},
  69. {P,4},{N,4},{0xff,24},//前奏
  70. {F,8},{F,4},{E,4},{F,8},{F,4},{L,4},{L,8},{M,4},{L,4},{F,8},
  71. {0xff,8},{L,8},{L,4},{E,4},{L,4},{M,4},{N,4},{P,4},{P,4},{N,4},
  72. {M,8},{N,8},{0xff,8},{Q,4},{Q,4},{Q,4},{P,4},{N,4},{N,8},{L,4},
  73. {F,4},{F,4},{F,4},{N,4},{M,8},{0xff,8},{N,4},{N,4},{P,4},{N,4},
  74. {M,4},{N,4},{M,4},{L,4},{F,8},{E,8},{F,8},{0xff,8},
  75. {F,8},{F,4},{E,4},{F,8},{F,4},{L,4},{L,8},{M,4},{L,4},{F,8},
  76. {0xff,8},{L,8},{L,4},{E,4},{L,4},{M,4},{N,4},{P,4},{P,4},{N,4},
  77. {M,8},{N,8},{0xff,8},{Q,4},{Q,4},{Q,4},{P,4},{N,4},{N,8},{L,4},
  78. {F,4},{F,4},{F,4},{N,4},{M,8},{0xff,8},{N,4},{N,4},{P,4},{N,4},
  79. {M,4},{N,4},{M,4},{L,4},{F,8},{E,8},{F,8},{0xff,8},
  80. {N,4},{N,4},{P,4},{N,4},{N,4},{P,4},{P,4},{Q,4},{S,4},{Q,4},
  81. {P,8},{Q,8},{0xff,8}, //此处有变调
  82. {F,8},{F,4},{E,4},{F,8},{L,8},{M,4},{N,2},{M,2},{L,4},{M,4},
  83. {N,8},{0xff,8},{F,4},{Q,4},{Q,4},{P,4},{M,4},{N,2},{M,2},
  84. {L,4},{M,4},{N,8},{0xff,8},{0xff,16},{L,4},{F,4},{F,4},{L,4},
  85. {M,8},{E,4},{E,4},{N,4},{P,4},{N,4},{M,4},{L,8},{0xff,8},
  86. {F,4},{L,4},{M,4},{N,4},{M,4},{L,4},{E,4},{C,4},{F,8},{0xff,8},{0xff,16},
  87. {F,8},{F,4},{E,4},{F,8},{L,8},{M,4},{N,2},{M,2},{L,4},{M,4},
  88. {N,8},{0xff,8},{F,4},{Q,4},{Q,4},{P,4},{M,4},{N,2},{M,2},
  89. {L,4},{M,4},{N,8},{0xff,8},{0xff,16},{L,4},{F,4},{F,4},{L,4},
  90. {M,8},{E,4},{E,4},{N,4},{P,4},{N,4},{M,4},{L,12},{L,4},
  91. {F,4},{L,4},{M,4},{N,4},{P,4},{N,4},{N,4},{P,4},{Q,8},{0xff,8},{0xff,8},

  92. {Q,6}, {Q,2},{Q,4},{Q,4},{Q,6},{P,2},{N,4},{M,4},{M,6},{M,2},{N,6},{P,2},{N,6},{M,2},
  93. {L,6},{F,2},{F,8},{F,4},{E,4},{F,8},{F,4},{L,4}, {M,4},{N,2},{M,2},        {L,4},{M,4},{N,8},{0xff,8},
  94. {Q,4},{P,4},{N,4},{M,4},{P,4},{N,4},{M,4},{L,4},{L,8},{0xff,8},{F,2}, {A,2},{B,2},{C,2},{B,2},
  95. {A,2}, {F,2},{A,2},

  96. {N,4},{N,4},{P,4},{N,4},{N,4},{P,4},{P,4},{Q,4},{S,4},{Q,4},
  97. {P,8},{Q,8},{0xff,8}, //此处有变调
  98. {F,8},{F,4},{E,4},{F,8},{L,8},{M,4},{N,2},{M,2},{L,4},{M,4},
  99. {N,8},{0xff,8},{F,4},{Q,4},{Q,4},{P,4},{M,4},{N,2},{M,2},
  100. {L,4},{M,4},{N,8},{0xff,8},{0xff,16},{L,4},{F,4},{F,4},{L,4},
  101. {M,8},{E,4},{E,4},{N,4},{P,4},{N,4},{M,4},{L,8},{0xff,8},
  102. {F,4},{L,4},{M,4},{N,4},{M,4},{L,4},{E,4},{C,4},{F,8},{0xff,8},{0xff,16},
  103. {F,8},{F,4},{E,4},{F,8},{L,8},{M,4},{N,2},{M,2},{L,4},{M,4},
  104. {N,8},{0xff,8},{F,4},{Q,4},{Q,4},{P,4},{M,4},{N,2},{M,2},
  105. {L,4},{M,4},{N,8},{0xff,8},{0xff,16},{L,4},{F,4},{F,4},{L,4},
  106. {M,8},{E,4},{E,4},{N,4},{P,4},{N,4},{M,4},{L,12},{L,4},
  107. {F,4},{L,4},{M,4},{N,4},{P,4},{N,4},{N,4},{P,4},{Q,8},{0xff,8},{0xff,8},


  108. {0,0xff},
  109. };
  110. uchar time_h,time_l;
  111. void Delay(uchar x);

  112. void main()
  113. {
  114.         uchar j;
  115.         uint i;
  116.         TMOD = 0x01;
  117.         ET0 = 1;
  118.         EA = 1;
  119.         TR0 = 1;
  120.         i = 0;
  121.         j = 0;
  122.         while(1)
  123.         {
  124.                 while(display[i][1] != 0xff)
  125.                 {
  126.                         if(display[i][0] == 0xff)
  127.                         {
  128.                                 TR0 = 0;
  129.                                 Delay(display[i][1]);
  130.                             BUZZER = 1;       
  131.                         }
  132.                         else
  133.                         {
  134.                                 time_h = m_note[display[i][0]][0];
  135.                                 time_l = m_note[display[i][0]][1];
  136.                                 TH0 = time_h;
  137.                                 TL0 = time_l;
  138.                                 ET0 = 1;
  139.                                 TR0 = 1;
  140.                                 Delay(display[i][1]);
  141.                                 TR0 = 0;
  142.                                 ET0 = 0;
  143.                             BUZZER = 1;       
  144.                         }                       
  145.                         i++;
  146.                 }
  147.                 i = 0;
  148.         }
  149. }

  150. void Timer0() interrupt 1
  151. {
  152.         TR0 = 0;
  153.         TH0 = time_h;
  154.         TL0 = time_l;
  155.         BUZZER = ~BUZZER;
  156.         TR0 = 1;
  157. }

  158. void Delay(uchar x)
  159. {
  160.         uint i,j;
  161.         for(i = 0;i < x;i++)
  162.                 for(j = 0;j < 12000;j++);
  163. }
复制代码



作者: ztflove51    时间: 2015-2-12 10:15
来一首高大上的歌曲
作者: freedomdream    时间: 2015-2-13 07:43
厉害,谱子看起来挺麻烦的
作者: miuifen    时间: 2015-4-12 18:47
上传个视频就最好了  乐谱是怎么做的  谢谢了
作者: 还在jl懂    时间: 2015-4-17 23:58
收藏了 哈哈
作者: 1261239924    时间: 2015-4-27 15:57
太棒了
作者: lb688    时间: 2015-4-28 11:35
不错,谢谢分享。
作者: 香蕉1373    时间: 2015-5-14 11:20
谢谢 分享
作者: sirs    时间: 2015-5-17 12:08
必须收藏。。
作者: LBG    时间: 2015-10-27 12:35
蛮不错的哦,
作者: 自己要争口气啊    时间: 2015-10-31 21:22
编曲子好像很麻烦的样子
作者: tuoxiaozi    时间: 2015-11-2 15:40
挺不错的 收藏了

作者: 旭日青草    时间: 2015-11-12 22:05
很赞啊
作者: 阿贵    时间: 2016-5-22 16:58
群主在马?
作者: 阿贵    时间: 2016-5-22 17:06
老师BUZZER取仅只用于常量,程序中有两次赋值,到底是变量还是常量呀%
作者: whengfu    时间: 2016-5-29 10:05
用来取代童车上的音乐,要是加一个按键控制乐曲切换就更好了
作者: liuzhaoxin1020    时间: 2016-12-25 16:11
能否分享一下谱曲软件
作者: 东北那谁    时间: 2016-12-31 11:00
挺不错的 收藏了
作者: 哈哈哈98    时间: 2017-1-1 22:01
还是觉得有点
作者: faridzled    时间: 2017-1-4 20:32
THANKS FOR SHARING
作者: 凌金    时间: 2017-5-30 16:21
找了很久51单片机制作音乐播放器的例子,终于给我找到了
作者: dww465757120    时间: 2017-6-28 12:54
非常感谢楼主分享,谢谢!
作者: 越快乐越堕落    时间: 2017-6-29 16:22
miuifen 发表于 2015-4-12 18:47
上传个视频就最好了  乐谱是怎么做的  谢谢了

有专门的谱曲软件
作者: orc_roll    时间: 2017-7-8 20:08
谢谢分享
作者: shenqing9901    时间: 2017-10-15 15:12
请问楼主,出来的音色动听吗?我现在做了一个发声的,只能发简单干燥的声音
作者: 电子FSY    时间: 2017-10-26 15:24
谢谢分享
作者: tkf008    时间: 2017-10-27 08:02
这么厉害,我以为是单片机控制播放器,这个直接用单片机播放旋律的!谢谢!
作者: 穿着安踏去拉萨    时间: 2017-11-2 17:03
如果只是播放旋律而已的话,那么只要有你们想要播的歌曲的谱子,然后再懂得看谱子的话就可以编了。我一开始以为是播放全歌,认真看完之后才知道只是旋律。不过楼主已经好厉害了,写的程序比较易懂。谢谢
作者: 松鼠    时间: 2017-12-7 15:49
厉害,学习了
作者: 好好hh    时间: 2017-12-7 19:49
sirs 发表于 2015-5-17 12:08
必须收藏。。

咋收藏啊。。。
作者: 勇士小子    时间: 2018-5-20 00:24
穿着安踏去拉萨 发表于 2017-11-2 17:03
如果只是播放旋律而已的话,那么只要有你们想要播的歌曲的谱子,然后再懂得看谱子的话就可以编了。我一开始 ...

你说的旋律和全歌有什么区别吗
作者: 勇士小子    时间: 2018-5-20 00:33
楼主,我想借鉴一下你的程序,我用的是11.0592的该怎么改程序啊,我有点急用
作者: 141624    时间: 2018-5-20 13:04
不错,很给力,赞




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1