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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 20349|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲va国产日韩欧美精品色婷婷 | 精品亚洲一区二区三区 | 成人在线视频网 | 日韩乱码一二三 | 久久久成人一区二区免费影院 | 91视频一区 | h在线免费观看 | 亚洲36d大奶网 | 97色综合 | 久久久蜜桃 | 一级毛片视频 | 国产男女猛烈无遮掩视频免费网站 | 中文二区 | 一级a性色生活片久久毛片波多野 | 久在线| 久久九九网站 | 欧美日韩国产一区 | 亚洲欧洲成人av每日更新 | 中文字幕视频在线 | www精品 | 九九视频在线观看 | 色婷婷国产精品 | 国产精品成人一区二区三区 | 久久久久久亚洲精品 | 亚洲午夜精品在线观看 | 亚洲啪啪| 亚洲精品国产一区 | 一级毛片在线播放 | 精品粉嫩aⅴ一区二区三区四区 | 欧美自拍另类 | 日屁网站 | 亚洲一级av毛片 | 国产精品大全 | 黄频视频| 国产一区在线免费观看视频 | 久久久久久亚洲欧洲 | 中文字幕亚洲一区二区三区 | 亚洲网站观看 | 中文字幕在线电影观看 | 成人精品一区二区户外勾搭野战 | 亚洲视频欧美视频 |