找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 21790|回复: 33
收起左侧

这个单片机最小系统播放音乐的例子真不错

  [复制链接]
ID:73477 发表于 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. }
复制代码


评分

参与人数 4威望 +1 黑币 +13 收起 理由
祝云章 + 5 很给力!
魔术快斗 + 2 很棒棒
god147 + 1 绝世好帖!
123456love + 1 + 5 共享资料的积分奖励!

查看全部评分

回复

使用道具 举报

ID:73463 发表于 2015-2-12 10:15 | 显示全部楼层
来一首高大上的歌曲
回复

使用道具 举报

ID:73489 发表于 2015-2-13 07:43 来自手机 | 显示全部楼层
厉害,谱子看起来挺麻烦的
回复

使用道具 举报

ID:73711 发表于 2015-4-12 18:47 | 显示全部楼层
上传个视频就最好了  乐谱是怎么做的  谢谢了
回复

使用道具 举报

ID:69803 发表于 2015-4-17 23:58 来自手机 | 显示全部楼层
收藏了 哈哈
回复

使用道具 举报

ID:78012 发表于 2015-4-27 15:57 | 显示全部楼层
太棒了
回复

使用道具 举报

ID:74143 发表于 2015-4-28 11:35 | 显示全部楼层
不错,谢谢分享。
回复

使用道具 举报

ID:65980 发表于 2015-5-14 11:20 | 显示全部楼层
谢谢 分享
回复

使用道具 举报

ID:80238 发表于 2015-5-17 12:08 | 显示全部楼层
必须收藏。。
回复

使用道具 举报

ID:93449 发表于 2015-10-27 12:35 | 显示全部楼层
蛮不错的哦,
回复

使用道具 举报

ID:94143 发表于 2015-10-31 21:22 | 显示全部楼层
编曲子好像很麻烦的样子
回复

使用道具 举报

ID:94402 发表于 2015-11-2 15:40 | 显示全部楼层
挺不错的 收藏了
回复

使用道具 举报

ID:92858 发表于 2015-11-12 22:05 | 显示全部楼层
很赞啊
回复

使用道具 举报

ID:122598 发表于 2016-5-22 16:58 | 显示全部楼层
群主在马?
回复

使用道具 举报

ID:122598 发表于 2016-5-22 17:06 | 显示全部楼层
老师BUZZER取仅只用于常量,程序中有两次赋值,到底是变量还是常量呀%
回复

使用道具 举报

ID:92231 发表于 2016-5-29 10:05 来自手机 | 显示全部楼层
用来取代童车上的音乐,要是加一个按键控制乐曲切换就更好了
回复

使用道具 举报

ID:153199 发表于 2016-12-25 16:11 | 显示全部楼层
能否分享一下谱曲软件
回复

使用道具 举报

ID:136460 发表于 2016-12-31 11:00 | 显示全部楼层
挺不错的 收藏了
回复

使用道具 举报

ID:154654 发表于 2017-1-1 22:01 | 显示全部楼层
还是觉得有点
回复

使用道具 举报

ID:89286 发表于 2017-1-4 20:32 | 显示全部楼层
THANKS FOR SHARING
回复

使用道具 举报

ID:205064 发表于 2017-5-30 16:21 | 显示全部楼层
找了很久51单片机制作音乐播放器的例子,终于给我找到了
回复

使用道具 举报

ID:193383 发表于 2017-6-28 12:54 | 显示全部楼层
非常感谢楼主分享,谢谢!
回复

使用道具 举报

ID:99130 发表于 2017-6-29 16:22 | 显示全部楼层
miuifen 发表于 2015-4-12 18:47
上传个视频就最好了  乐谱是怎么做的  谢谢了

有专门的谱曲软件
回复

使用道具 举报

ID:217472 发表于 2017-7-8 20:08 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:91202 发表于 2017-10-15 15:12 | 显示全部楼层
请问楼主,出来的音色动听吗?我现在做了一个发声的,只能发简单干燥的声音
回复

使用道具 举报

ID:241152 发表于 2017-10-26 15:24 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:160782 发表于 2017-10-27 08:02 来自手机 | 显示全部楼层
这么厉害,我以为是单片机控制播放器,这个直接用单片机播放旋律的!谢谢!
回复

使用道具 举报

ID:244589 发表于 2017-11-2 17:03 | 显示全部楼层
如果只是播放旋律而已的话,那么只要有你们想要播的歌曲的谱子,然后再懂得看谱子的话就可以编了。我一开始以为是播放全歌,认真看完之后才知道只是旋律。不过楼主已经好厉害了,写的程序比较易懂。谢谢

评分

参与人数 1黑币 +50 收起 理由
admin + 50 赞一个!

查看全部评分

回复

使用道具 举报

ID:258673 发表于 2017-12-7 15:49 | 显示全部楼层
厉害,学习了
回复

使用道具 举报

ID:256184 发表于 2017-12-7 19:49 | 显示全部楼层

咋收藏啊。。。
回复

使用道具 举报

ID:318304 发表于 2018-5-20 00:24 来自手机 | 显示全部楼层
穿着安踏去拉萨 发表于 2017-11-2 17:03
如果只是播放旋律而已的话,那么只要有你们想要播的歌曲的谱子,然后再懂得看谱子的话就可以编了。我一开始 ...

你说的旋律和全歌有什么区别吗
回复

使用道具 举报

ID:318304 发表于 2018-5-20 00:33 来自手机 | 显示全部楼层
楼主,我想借鉴一下你的程序,我用的是11.0592的该怎么改程序啊,我有点急用
回复

使用道具 举报

ID:332040 发表于 2018-5-20 13:04 | 显示全部楼层
不错,很给力,赞
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表