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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 20617|回復: 18
收起左側

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

  [復制鏈接]
ID:255871 發表于 2019-3-30 21:01 | 顯示全部樓層 |閱讀模式
前兩天上單片機課,講了蜂鳴器有關內容,順便寫了個蜂鳴器播放音樂的小程序;
程序在code文件夾下,使用keil4編譯,并附帶仿真,仿真環境為Proteus7.8;
想強調的一個問題是音調之間加延時真的很重要,不然特別難聽
ppt中講解了蜂鳴器的有關知識,最后有關于執行流程的講解

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

ppt教程預覽:
0.png 0.png

單片機源程序如下:
  1. /***************
  2. author:zc
  3. description: 蜂鳴器播放音樂 天空之城
  4.                           晶振11.0592Mhz
  5.                           實現方法:
  6.                                           while(1)循環中生成音調方波;
  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. //格式: 音調, 音度, 拍數
  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);         //播放音調函數,即方波發生器
  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)                                         //一個音節播放的時間,這里可以通過調t_tone前的系數可以改變時長
  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)         //播音調函數,就是方波發生器
  196. {

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

  200. ……………………

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

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





評分

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

查看全部評分

回復

使用道具 舉報

ID:359022 發表于 2019-4-4 13:44 | 顯示全部樓層
聽了天空之城,謝謝!
回復

使用道具 舉報

ID:73182 發表于 2019-4-4 15:39 | 顯示全部樓層
感謝分享
回復

使用道具 舉報

ID:399179 發表于 2019-4-4 20:50 | 顯示全部樓層
感謝樓主分享!
回復

使用道具 舉報

ID:563985 發表于 2019-6-16 21:57 | 顯示全部樓層
可以很厲害
回復

使用道具 舉報

ID:427818 發表于 2019-6-25 22:52 | 顯示全部樓層
學習,很不錯的分享
回復

使用道具 舉報

ID:649188 發表于 2019-11-25 16:22 | 顯示全部樓層
jyk 發表于 2019-6-25 22:52
學習,很不錯的分享

感謝分享
回復

使用道具 舉報

ID:650865 發表于 2019-11-27 16:06 | 顯示全部樓層
感謝分享
回復

使用道具 舉報

ID:650945 發表于 2019-11-27 17:08 | 顯示全部樓層
感謝分享
回復

使用道具 舉報

ID:643576 發表于 2019-11-28 21:36 | 顯示全部樓層
為什么可以用數字代替音樂
回復

使用道具 舉報

ID:643576 發表于 2019-11-28 21:36 | 顯示全部樓層
如何用數字代替音樂·
回復

使用道具 舉報

ID:693587 發表于 2020-2-15 18:07 | 顯示全部樓層
感謝分享.就是為啥數字可以代替音樂不懂
回復

使用道具 舉報

ID:709595 發表于 2020-3-16 17:35 | 顯示全部樓層
如何用數字代替音樂???不懂
回復

使用道具 舉報

ID:596950 發表于 2020-3-25 14:29 | 顯示全部樓層
感謝樓主分享
回復

使用道具 舉報

ID:846386 發表于 2020-12-1 23:38 | 顯示全部樓層
不錯不錯,這個可以學習了
回復

使用道具 舉報

ID:337139 發表于 2020-12-2 10:05 | 顯示全部樓層
天空之城還是很好聽的!
回復

使用道具 舉報

ID:398588 發表于 2021-7-5 19:06 | 顯示全部樓層
這個應該是最完善的版本了,謝謝樓主
回復

使用道具 舉報

ID:1132489 發表于 2025-5-7 23:46 | 顯示全部樓層
感謝分享
回復

使用道具 舉報

ID:1145963 發表于 2025-5-31 16:58 | 顯示全部樓層
浙江杭州 發表于 2020-3-16 17:35
如何用數字代替音樂???不懂

定時器,頻率,周期可以改變音調和音長
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品视频亚洲 | 国产美女视频一区 | 亚洲一区二区三区久久久 | 天天看天天操 | 午夜影院| 欧美精品在线播放 | 国产精品视频一区二区三区四区国 | 欧美日韩专区 | 成人精品毛片国产亚洲av十九禁 | 成人网av | 久久狼人天堂 | 伊人网影院 | wwwxx在线观看| 在线一区视频 | 日韩一级免费大片 | 久久精品高清视频 | 色性av| 在线第一页 | 免费一级黄色电影 | 亚洲性视频网站 | 天天插天天搞 | 亚洲一区av | 久久激情视频 | 亚洲视频在线观看 | 51ⅴ精品国产91久久久久久 | 四虎影院久久 | 日韩在线免费视频 | 国产高清视频在线播放 | 久久高清 | 99免费在线| 午夜成人免费视频 | 国产精品高潮呻吟久久久久 | 日韩精品 电影一区 亚洲 | 羞羞的视频免费观看 | 丝袜天堂| 国产成人综合一区二区三区 | 国产精品视频在线播放 | 免费观看成人av | 日韩欧美日韩在线 | 天天弄天天操 | 久久精品中文字幕 |