找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 688|回复: 0
打印 上一主题 下一主题
收起左侧

单片机控制蜂鸣器唱歌代码

[复制链接]
跳转到指定楼层
楼主
ID:1102558 发表于 2023-12-5 18:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include <REGX52.H>
  2. #include "Delay.h"
  3. #include "Timer0.h"

  4. //蜂鸣器端口定义
  5. sbit Buzzer=P1^5;

  6. //播放速度,值为四分音符的时长(ms)
  7. #define SPEED        500

  8. //音符与索引对应表,P:休止符,L:低音,M:中音,H:高音,下划线:升半音符号#
  9. #define P        0
  10. #define L1        1
  11. #define L1_        2
  12. #define L2        3
  13. #define L2_        4
  14. #define L3        5
  15. #define L4        6
  16. #define L4_        7
  17. #define L5        8
  18. #define L5_        9
  19. #define L6        10
  20. #define L6_        11
  21. #define L7        12
  22. #define M1        13
  23. #define M1_        14
  24. #define M2        15
  25. #define M2_        16
  26. #define M3        17
  27. #define M4        18
  28. #define M4_        19
  29. #define M5        20
  30. #define M5_        21
  31. #define M6        22
  32. #define M6_        23
  33. #define M7        24
  34. #define H1        25
  35. #define H1_        26
  36. #define H2        27
  37. #define H2_        28
  38. #define H3        29
  39. #define H4        30
  40. #define H4_        31
  41. #define H5        32
  42. #define H5_        33
  43. #define H6        34
  44. #define H6_        35
  45. #define H7        36

  46. //索引与频率对照表
  47. unsigned int FreqTable[]={
  48.         0,
  49.         63628,63731,63835,63928,64021,64103,64185,64260,64331,64400,64463,64528,
  50.         64580,64633,64684,64732,64777,64820,64860,64898,64934,64968,65000,65030,
  51.         65058,65085,65110,65134,65157,65178,65198,65217,65235,65252,65268,65283,
  52. };

  53. //乐谱
  54. unsigned char code Music[]={
  55.         //音符,时值,
  56.         
  57.         //1
  58.         P,        4,
  59.         P,        4,
  60.         P,        4,
  61.         M6,        2,
  62.         M7,        2,
  63.         
  64.         H1,        4+2,
  65.         M7,        2,
  66.         H1,        4,
  67.         H3,        4,
  68.         
  69.         M7,        4+4+4,
  70.         M3,        2,
  71.         M3,        2,
  72.         
  73.         //2
  74.         M6,        4+2,
  75.         M5,        2,
  76.         M6, 4,
  77.         H1,        4,
  78.         
  79.         M5,        4+4+4,
  80.         M3,        4,
  81.         
  82.         M4,        4+2,
  83.         M3,        2,
  84.         M4,        4,
  85.         H1,        4,
  86.         
  87.         //3
  88.         M3,        4+4,
  89.         P,        2,
  90.         H1,        2,
  91.         H1,        2,
  92.         H1,        2,
  93.         
  94.         M7,        4+2,
  95.         M4_,2,
  96.         M4_,4,
  97.         M7,        4,
  98.         
  99.         M7,        8,
  100.         P,        4,
  101.         M6,        2,
  102.         M7,        2,
  103.         
  104.         //4
  105.         H1,        4+2,
  106.         M7,        2,
  107.         H1,        4,
  108.         H3,        4,
  109.         
  110.         M7,        4+4+4,
  111.         M3,        2,
  112.         M3,        2,
  113.         
  114.         M6,        4+2,
  115.         M5,        2,
  116.         M6, 4,
  117.         H1,        4,
  118.         
  119.         //5
  120.         M5,        4+4+4,
  121.         M2,        2,
  122.         M3,        2,
  123.         
  124.         M4,        4,
  125.         H1,        2,
  126.         M7,        2+2,
  127.         H1,        2+4,
  128.         
  129.         H2,        2,
  130.         H2,        2,
  131.         H3,        2,
  132.         H1,        2+4+4,
  133.         
  134.         //6
  135.         H1,        2,
  136.         M7,        2,
  137.         M6,        2,
  138.         M6,        2,
  139.         M7,        4,
  140.         M5_,4,
  141.         
  142.         
  143.         M6,        4+4+4,
  144.         H1,        2,
  145.         H2,        2,
  146.         
  147.         H3,        4+2,
  148.         H2,        2,
  149.         H3,        4,
  150.         H5,        4,
  151.         
  152.         //7
  153.         H2,        4+4+4,
  154.         M5,        2,
  155.         M5,        2,
  156.         
  157.         H1,        4+2,
  158.         M7,        2,
  159.         H1,        4,
  160.         H3,        4,
  161.         
  162.         H3,        4+4+4+4,
  163.         
  164.         //8
  165.         M6,        2,
  166.         M7,        2,
  167.         H1,        4,
  168.         M7,        4,
  169.         H2,        2,
  170.         H2,        2,
  171.         
  172.         H1,        4+2,
  173.         M5,        2+4+4,
  174.         
  175.         H4,        4,
  176.         H3,        4,
  177.         H3,        4,
  178.         H1,        4,
  179.         
  180.         //9
  181.         H3,        4+4+4,
  182.         H3,        4,
  183.         
  184.         H6,        4+4,
  185.         H5,        4,
  186.         H5,        4,
  187.         
  188.         H3,        2,
  189.         H2,        2,
  190.         H1,        4+4,
  191.         P,        2,
  192.         H1,        2,
  193.         
  194.         //10
  195.         H2,        4,
  196.         H1,        2,
  197.         H2,        2,
  198.         H2,        4,
  199.         H5,        4,
  200.         
  201.         H3,        4+4+4,
  202.         H3,        4,
  203.         
  204.         H6,        4+4,
  205.         H5,        4+4,
  206.         
  207.         //11
  208.         H3,        2,
  209.         H2,        2,
  210.         H1,        4+4,
  211.         P,        2,
  212.         H1,        2,
  213.         
  214.         H2,        4,
  215.         H1,        2,
  216.         H2,        2+4,
  217.         M7,        4,
  218.         
  219.         M6,        4+4+4,
  220.         P,        4,
  221.         
  222.         0xFF        //终止标志
  223. };

  224. unsigned char FreqSelect,MusicSelect;

  225. void main()
  226. {
  227.         Timer0Init();
  228.         while(1)
  229.         {
  230.                 if(Music[MusicSelect]!=0xFF)        //如果不是停止标志位
  231.                 {
  232.                         FreqSelect=Music[MusicSelect];        //选择音符对应的频率
  233.                         MusicSelect++;
  234.                         Delay(SPEED/4*Music[MusicSelect]);        //选择音符对应的时值
  235.                         MusicSelect++;
  236.                         TR0=0;
  237.                         Delay(5);        //音符间短暂停顿
  238.                         TR0=1;
  239.                 }
  240.                 else        //如果是停止标志位
  241.                 {
  242.                         TR0=0;
  243.                         while(1);
  244.                 }
  245.         }
  246. }

  247. void Timer0_Routine() interrupt 1
  248. {
  249.         if(FreqTable[FreqSelect])        //如果不是休止符
  250.         {
  251.                 /*取对应频率值的重装载值到定时器*/
  252.                 TL0 = FreqTable[FreqSelect]%256;                //设置定时初值
  253.                 TH0 = FreqTable[FreqSelect]/256;                //设置定时初值
  254.                 Buzzer=!Buzzer;        //翻转蜂鸣器IO口
  255.         }
  256. }
复制代码

原理图: 无
仿真: 无
代码: 11-2 蜂鸣器播放音乐.zip (35.75 KB, 下载次数: 12)

评分

参与人数 1黑币 +20 收起 理由
admin + 20 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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