久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 19756|回復: 16
打印 上一主題 下一主題
收起左側

51單片機蜂鳴器播放音樂天空之城PPT教程+程序+Proteus仿真

  [復制鏈接]
跳轉到指定樓層
樓主
ID:255871 發(fā)表于 2019-3-30 21:01 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
前兩天上單片機課,講了蜂鳴器有關內容,順便寫了個蜂鳴器播放音樂的小程序;
程序在code文件夾下,使用keil4編譯,并附帶仿真,仿真環(huán)境為Proteus7.8;
想強調的一個問題是音調之間加延時真的很重要,不然特別難聽
ppt中講解了蜂鳴器的有關知識,最后有關于執(zhí)行流程的講解

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


ppt教程預覽:


單片機源程序如下:
  1. /***************
  2. author:zc
  3. description: 蜂鳴器播放音樂 天空之城
  4.                           晶振11.0592Mhz
  5.                           實現(xiàn)方法:
  6.                                           while(1)循環(huán)中生成音調方波;
  7.                                         定時器1記錄每個音調的時長并切換音調
  8. ****************/

  9. #include "reg51.h"
  10. #include "intrins.h"
  11. unsigned int tones[]=                            //C調音調
  12. {
  13. 3816,3401,3030,2865,2551,2272,2024,         //低音
  14. 1912,1703,1517,1432,1275,1136,1012,         //中音
  15. 965, 851, 758, 715, 605, 538, 466         //高音
  16. };

  17. unsigned char code sky[]={                         //譜子
  18. //格式: 音調, 音度, 拍數(shù)
  19. //例: 4,1,1 //音調fa,中音,時長半拍
  20. //0代表空音
  21. 0,0,2,
  22. 0,0,2,
  23. 0,0,2,
  24. 6,1,1,
  25. 7,1,1,

  26. 1,2,3,
  27. 7,1,1,
  28. 1,2,2,
  29. 3,2,2,

  30. 7,1,4,
  31. 0,2,2,
  32. 3,1,1,
  33. 3,1,1,

  34. 6,1,3,
  35. 5,1,1,
  36. 6,1,2,
  37. 1,2,2,

  38. 5,1,4,
  39. 0,1,2,
  40. 3,1,2,

  41. 4,1,3,
  42. 3,1,1,
  43. 4,1,2,
  44. 1,2,2,

  45. 3,1,3,
  46. 0,0,1,
  47. 1,2,1,
  48. 1,2,1,
  49. 1,2,1,

  50. 7,1,3,
  51. 4,1,1,
  52. 4,1,2,
  53. 7,1,2,

  54. 7,1,4,
  55. 0,0,2,
  56. 6,1,1,
  57. 7,1,1,

  58. 1,2,3,
  59. 7,1,1,
  60. 1,2,2,
  61. 3,2,2,

  62. 7,1,4,
  63. 0,0,2,
  64. 3,1,1,
  65. 3,1,1,

  66. 6,1,3,
  67. 5,1,1,
  68. 6,1,2,
  69. 1,2,2,

  70. 5,1,4,
  71. 0,0,2,
  72. 2,1,1,
  73. 3,1,1,

  74. 4,1,2,
  75. 1,2,1,
  76. 7,1,2,
  77. 1,2,3,

  78. 2,2,1,
  79. 2,2,1,
  80. 3,2,1,
  81. 1,2,3,
  82. 0,0,2,

  83. 1,2,1,
  84. 7,1,1,
  85. 6,1,1,
  86. 6,1,1,
  87. 7,1,2,
  88. 5,1,2,

  89. 6,1,4,
  90. 0,0,2,
  91. 1,2,1,
  92. 2,2,1,

  93. 3,2,3,
  94. 2,2,1,
  95. 3,2,2,
  96. 5,2,2,

  97. 2,2,4,
  98. 0,0,2,
  99. 5,1,1,
  100. 5,1,1,

  101. 1,2,3,
  102. 7,1,1,
  103. 1,2,2,
  104. 3,2,2,

  105. 3,2,4,
  106. 0,0,2,

  107. 6,1,1,
  108. 7,1,1,
  109. 1,2,2,
  110. 7,1,2,
  111. 2,2,1,
  112. 2,2,1,

  113. 1,2,3,
  114. 5,1,1,
  115. 5,1,3,
  116. 0,0,1,

  117. 4,2,2,
  118. 3,2,2,
  119. 2,2,2,
  120. 1,2,2,

  121. 3,2,4,
  122. 0,0,2,
  123. 3,2,2,

  124. 6,2,4,
  125. 5,2,2,
  126. 5,2,2,

  127. 3,2,1,
  128. 2,2,1,
  129. 1,2,4,
  130. 0,2,1,
  131. 1,2,1,

  132. 2,2,2,
  133. 1,2,1,
  134. 2,2,1,
  135. 2,2,2,
  136. 5,2,2,

  137. 3,2,4,
  138. 0,2,2,
  139. 3,2,2,


  140. 6,2,4,
  141. 5,2,4,

  142. 3,2,1,
  143. 2,2,1,
  144. 1,2,4,
  145. 0,0,1,
  146. 1,2,1,

  147. 2,2,2,
  148. 1,2,1,
  149. 2,2,1,
  150. 2,2,2,
  151. 7,1,2,

  152. 6,1,2,
  153. };

  154. sbit        Buzzer=P3^0;                     //定義buzzer引腳
  155. void delay_ms( unsigned int t)        ;         //毫秒延時12MHz下
  156. void delay_us( unsigned int t)        ;         //微妙延時12MHz下
  157. void play_tone(unsigned int tone);         //播放音調函數(shù),即方波發(fā)生器
  158. void time_init( void );                                 //初始化定時器
  159. unsigned char s=0, t_tone=0;             //s用作定時器計時, t_tone保存音調時長
  160. unsigned int  tone=0;                             //tone保存音調,
  161. char *tone_p=sky;                                         //指針指向要播放的曲目

  162. void main( void )
  163. {
  164.         time_init();                                         //初始化定時器
  165.         while(1)
  166.                 if(tone!=0)play_tone(tone);         //一直在播放音調,播放的音調由定時器切換,
  167.                                                                          //音調時常由定時器決定
  168. }                                                                         //如果tone==0 不進入播放

  169. void time_init( void )
  170. {
  171.         TMOD|=0x10;                                                 //使用定時器1
  172.         TH1=(65536-65000)/256;                         //裝初值
  173.         TL1=(65536-65000)%256;
  174.         EA =  1;                                                 //開中斷,打開定時器開關
  175.         ET1 = 1;
  176.         TR1 = 1;
  177. }

  178. void timer1( void ) interrupt 3                 //定時器1 中斷
  179. {
  180.         TH1=(65536-50000)/256;                         //裝初值
  181.         TL1=(65536-50000)%256;
  182.         s++;
  183.         if(s>=4*t_tone)                                         //一個音節(jié)播放的時間,這里可以通過調t_tone前的系數(shù)可以改變時長
  184.         {
  185.                 s=0;                                                 //講計時器清零
  186.                 if((*tone_p)!=0)                         //如果音不是0
  187.                         tone = tones[*tone_p+7*(*(tone_p+1))-1];  //賦值音調
  188.                 else
  189.                         tone = 0;                             //關了蜂鳴器
  190.                 t_tone = *(tone_p+2);                 //取時間啊
  191.                 tone_p+=3;                                         //移動指針
  192.                 delay_ms(30);                                 //延時一下,不延時特別難聽
  193.         }
  194. }


  195. void play_tone(unsigned int tone)         //播音調函數(shù),就是方波發(fā)生器
  196. {

  197.                 Buzzer=!Buzzer;                                 
  198.                 delay_us(tone);               
  199. }

  200. ……………………

  201. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
test2.rar (2.16 MB, 下載次數(shù): 542)





評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏15 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:359022 發(fā)表于 2019-4-4 13:44 | 只看該作者
聽了天空之城,謝謝!
回復

使用道具 舉報

板凳
ID:73182 發(fā)表于 2019-4-4 15:39 | 只看該作者
感謝分享
回復

使用道具 舉報

地板
ID:399179 發(fā)表于 2019-4-4 20:50 | 只看該作者
感謝樓主分享!
回復

使用道具 舉報

5#
ID:563985 發(fā)表于 2019-6-16 21:57 | 只看該作者
可以很厲害
回復

使用道具 舉報

6#
ID:427818 發(fā)表于 2019-6-25 22:52 | 只看該作者
學習,很不錯的分享
回復

使用道具 舉報

7#
ID:649188 發(fā)表于 2019-11-25 16:22 | 只看該作者
jyk 發(fā)表于 2019-6-25 22:52
學習,很不錯的分享

感謝分享
回復

使用道具 舉報

8#
ID:650865 發(fā)表于 2019-11-27 16:06 | 只看該作者
感謝分享
回復

使用道具 舉報

9#
ID:650945 發(fā)表于 2019-11-27 17:08 | 只看該作者
感謝分享
回復

使用道具 舉報

10#
ID:643576 發(fā)表于 2019-11-28 21:36 | 只看該作者
為什么可以用數(shù)字代替音樂
回復

使用道具 舉報

11#
ID:643576 發(fā)表于 2019-11-28 21:36 | 只看該作者
如何用數(shù)字代替音樂·
回復

使用道具 舉報

12#
ID:693587 發(fā)表于 2020-2-15 18:07 | 只看該作者
感謝分享.就是為啥數(shù)字可以代替音樂不懂
回復

使用道具 舉報

13#
ID:709595 發(fā)表于 2020-3-16 17:35 | 只看該作者
如何用數(shù)字代替音樂???不懂
回復

使用道具 舉報

14#
ID:596950 發(fā)表于 2020-3-25 14:29 | 只看該作者
感謝樓主分享
回復

使用道具 舉報

15#
ID:846386 發(fā)表于 2020-12-1 23:38 | 只看該作者
不錯不錯,這個可以學習了
回復

使用道具 舉報

16#
ID:337139 發(fā)表于 2020-12-2 10:05 | 只看該作者
天空之城還是很好聽的!
回復

使用道具 舉報

17#
ID:398588 發(fā)表于 2021-7-5 19:06 | 只看該作者
這個應該是最完善的版本了,謝謝樓主
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产成人精品女人 | 亚洲免费精品 | 国产在线观看一区二区 | 日韩av免费在线观看 | 久久一区二区免费视频 | 亚洲91精品 | 中文精品一区二区 | 亚洲激情在线观看 | 久久99精品久久久久久琪琪 | 在线播放一区二区三区 | 午夜天堂精品久久久久 | 日韩精品免费一区 | 日日夜夜天天干 | 亚洲免费在线视频 | 日韩中文字幕一区 | 四虎在线观看 | 日韩免费网站 | 亚洲一区 中文字幕 | 婷婷在线免费 | 麻豆视频在线看 | 日韩手机在线视频 | 日韩中文字幕 | 国内精品久久久久久 | 国产精品精品视频一区二区三区 | 在线综合视频 | 91精品国产美女在线观看 | 久久一起草 | 国产精品毛片一区二区在线看 | 日本一本视频 | 色香婷婷 | 一区二区三区视频在线 | 一区二区三区四区毛片 | 欧美一级黑人aaaaaaa做受 | 天天干 夜夜操 | 成人欧美一区二区三区黑人孕妇 | 在线免费小视频 | 免费成人av | 日本免费黄色 | 韩国av影院 | 亚洲精品久久久久久久久久久 | 亚洲一区二区三区欧美 |