找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2501|回复: 4
收起左侧

简易单片机Mp3程序 蜂鸣器播放敢问路在何方(新手入门级)

[复制链接]
ID:964116 发表于 2021-9-8 19:55 | 显示全部楼层 |阅读模式
包含Proteus仿真和源码
51hei.png 51hei截图20210908193904.png

单片机源程序如下:
  1. #include <reg52.h>
  2. sbit beep = P2^3;
  3. unsigned char timer0H, timer0L, time;

  4. //单片机晶振采用11.0592MHz

  5. code unsigned char FREQH[] = {
  6.     0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8,    //低音1234567
  7.     0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,//1,2,3,4,5,6,7,i
  8.     0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE,            //高音 234567
  9.     0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF};   //超高音 1234567

  10. code unsigned char FREQL[] =
  11. {
  12.     0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6,    //低音1234567
  13.     0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i
  14.     0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D,             //高音 234567
  15.     0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16        //超高音 1234567
  16. };  
  17.            
  18. code unsigned char song[] =
  19. {
  20.     6, 1, 2,  1, 2, 4,  6, 1, 2,  3, 2, 4,  2, 2, 2,  2, 2, 2,  3, 2, 1,  2, 2, 1,  1, 1, 6,    //你挑着担
  21.     7, 1, 2,  6, 1, 4,  7, 1, 2,  2, 2, 4,  3, 2, 2,  1, 2, 2,               //我牵着马
  22.     6, 1, 4,  6, 1, 6,  3, 2, 6,  6, 2, 5,  3, 2, 2,  6, 2, 5,
  23.     5, 2, 2,  4, 2, 2,  3, 2, 6,  1, 2, 5,  2, 2, 2,  3, 2, 6,
  24.     4, 2, 2,  3, 2, 2,  2, 2, 10,                                           //迎来日出,送走晚霞
  25.     6, 1, 4,  3, 2, 4,  2, 2, 2,  3, 2, 2,  6, 1, 4,  1, 2, 8,         
  26.     3, 2, 4,  2, 2, 2,  7, 1, 4,  3, 2, 2,  2, 2, 2,  6, 1, 2,  1, 2, 2,  2, 2, 2,  3, 2, 10,       //踏平坎坷成大道   
  27.     3, 2, 6,  6, 2, 4,  3, 2, 2,  6, 2, 4,  5, 2, 2,  4, 2, 2,  3, 2, 6,  5, 2, 2,  2, 2, 4,
  28.     4, 2, 2,  3, 2, 2,  2, 2, 2,  1, 2, 4,  2, 2, 8,  3, 2, 4,              //斗罢艰险又出发
  29.     2, 2, 2,  7, 1, 4,  3, 2, 2,  7, 1, 2,  6, 1, 2,  5, 1, 4,  6, 1, 8,  
  30.     3, 2, 4,  5, 2, 8,  3, 2, 2,  5, 2, 2,  6, 2, 5,
  31.     1, 3, 2,  7, 2, 2,  6, 2, 2,  5, 2, 4,  6, 2, 10,                       //啦 啦啦 啦 啦 啦啦啦
  32.     1, 3, 6,  7, 2, 5,  6, 2, 2,  6, 2, 4,  5, 2, 6,  5, 2, 2,  6, 2, 2,  3, 2, 10,     //一番番春秋冬夏
  33.     1, 3, 6,  7, 2, 5,  6, 2, 2,  6, 2, 4,  5, 2, 6,  6, 2, 2,  3, 2, 10,               //一番番酸甜苦辣
  34.     6, 1, 5,  1, 2, 2,  3, 2, 5,  1, 2, 2,  2, 2, 2,  3, 2, 2,  2, 2, 8,    //敢问路在何方
  35.     2, 2, 2,  7, 3, 4,  2, 2, 2,  7, 1, 2,  6, 1, 2,  5, 1, 4,  6, 1, 10,   //路在脚下
  36.     6, 1, 5,  1, 2, 2,  3, 2, 5,  1, 2, 2,  2, 2, 2,  3, 2, 2,  2, 2, 8,    //敢问路在何方
  37.     3, 2, 4,  5, 2, 6,  3, 2, 4,  7, 2, 5,
  38.     1, 3, 2,  7, 2, 2,  6, 2, 2,  5, 2, 4,  6, 2, 10, 6, 2, 10, 0, 0, 0     //路在脚下
  39. };

  40. void t0int() interrupt 1         //T0中断程序,控制发音的音调
  41. {
  42.     TR0 = 0;                     //先关闭T0
  43.     beep = !beep;          //输出方波, 发音
  44.     TH0 = timer0H;               //下次的中断时间, 这个时间, 控制音调高低
  45.     TL0 = timer0L;
  46.     TR0 = 1;                     //启动T0
  47. }

  48. void delay(unsigned char t)     //延时程序,控制发音的时间长度
  49. {
  50.     unsigned char t1;
  51.     unsigned long t2;
  52.     for(t1 = 0; t1 < t; t1++)    //双重循环, 共延时t个半拍
  53.       for(t2 = 0; t2 < 4000; t2++); //延时期间, 可进入T0中断去发音
  54.     TR0 = 0;                        //关闭T0, 停止发音
  55. }

  56. void sing()                      //演奏一个音符
  57. {
  58.     TH0 = timer0H;               //控制音调
  59.     TL0 = timer0L;
  60.     TR0 = 1;                     //启动T0, 由T0输出方波去发音
  61.     delay(time);                 //控制时间长度
  62. }

  63. void main(void)
  64. {
  65.     unsigned char k, i;
  66.     TMOD = 1;                    //置T0定时工作方式1
  67.     ET0 = 1;                     //开T0中断
  68.     EA = 1;                      //开总中断
  69.     while(1)
  70.         {
  71.       i = 0;
  72.       time = 1;
  73.       while(time)
  74.           {
  75.         k = song[i] + 7 * song[i + 1] - 1;//第i个是音符, 第i+1个是第几个八度
  76.         timer0H = FREQH[k];      //从数据表中读出频率数值
  77.         timer0L = FREQL[k];      //实际上, 是定时的时间长度
  78.         time = song[i + 2];   //读出时间长度数值
  79.         i += 3;
  80.         sing();                  //发出一个音符
  81.           }  
  82.     }  
  83. }
复制代码
51hei.png
所有资料51hei附件下载:
MP3 - 副本.rar (34.76 KB, 下载次数: 13)

评分

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

查看全部评分

回复

使用道具 举报

ID:857072 发表于 2021-9-9 08:40 来自手机 | 显示全部楼层
你怕是对mp3有什么误解。。。
回复

使用道具 举报

ID:277550 发表于 2021-9-9 09:29 | 显示全部楼层
仿真,

//一番番酸甜苦辣

开始乱响
回复

使用道具 举报

ID:624769 发表于 2021-9-9 21:11 | 显示全部楼层
你管这叫MP3? 这充其量属于,“单片机简易演奏器”。
回复

使用道具 举报

ID:885138 发表于 2021-9-10 07:23 来自手机 | 显示全部楼层
叫mp3是不对啦,不过让单片机把自己的想法变为led的亮灭闪烁,然后是发出声音……的确是当年很开心的事:-)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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