久久久久久久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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩三极| 免费在线成人网 | 国产精品视频一 | 又爽又黄axxx片免费观看 | 日本精品视频一区二区 | 国产精品日本一区二区不卡视频 | 麻豆av一区二区三区久久 | 日本不卡一区 | 成年人黄色一级片 | 99热首页| 国产在线二区 | 91免费在线视频 | 小草久久久久久久久爱六 | 九色 在线 | 久久免费观看视频 | 欧美自拍视频 | 亚洲网站在线观看 | 一级毛片播放 | 天天玩天天操天天干 | 免费视频久久久久 | 久久精品视频免费观看 | 看羞羞视频 | a级片www| 美女天天干 | 亚州成人 | 日韩电影一区二区三区 | 成人av影院| 91久久精品一区二区二区 | 作爱视频免费看 | 欧美国产精品一区二区三区 | 99re99| 美女久久久久 | 一区二区三区四区国产 | 日日操操| 精品一区二区久久久久久久网站 | 91精品国产乱码久久久久久 | 国产激情视频 | 国产精品久久久久无码av | 国内精品久久久久久久 | 三级欧美| 国产精品无 |