找回密码
 立即注册

QQ登录

只需一步,快速开始

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

急求单片机音乐播放器汇编和C语言程序

  [复制链接]
跳转到指定楼层
楼主
ID:149801 发表于 2016-12-19 22:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1000黑币
功能:有LCD显示,能够切歌,能够暂停音乐。
要求:C语言和汇编语言都要
也可以用我下面上传的图片编写汇编和C语言

j.png (46.74 KB, 下载次数: 129)

j.png

评分

参与人数 1黑币 +5 收起 理由
xqyyzsn + 5 楼主厉害啊

查看全部评分

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

使用道具 举报

沙发
ID:149801 发表于 2016-12-19 22:34 | 只看该作者
求大神,急求
回复

使用道具 举报

板凳
ID:149801 发表于 2016-12-19 22:36 | 只看该作者
http://www.51hei.com/bbs/dpj-60190-1.html  这个贴子有仿真相应的C语言,也可以按照上面的C语言来编写汇编,只要能实现功能都行,求大神
回复

使用道具 举报

地板
ID:98767 发表于 2016-12-20 00:10 | 只看该作者
看来兄弟真的很急,我看看有没有合适的
回复

使用道具 举报

5#
ID:98767 发表于 2016-12-20 00:11 | 只看该作者
看来兄弟真的很急,我找找看有没有合适的给你
回复

使用道具 举报

6#
ID:90663 发表于 2016-12-20 08:59 来自手机 | 只看该作者
QQ1034414222 发表于 2016-12-19 22:36
http://www.51hei.com/bbs/dpj-60190-1.html  这个贴子有仿真相应的C语言,也可以按照上面的C语言来编写汇 ...

功能帮你调好了,压缩文件在你前面发的一个帖子里。你可以看一下。
回复

使用道具 举报

7#
ID:156135 发表于 2016-12-20 09:16 | 只看该作者
这个仿真图文件能不能给我一份谢谢
回复

使用道具 举报

8#
ID:149801 发表于 2016-12-20 09:49 | 只看该作者
kkfy888 发表于 2016-12-20 00:11
看来兄弟真的很急,我找找看有没有合适的给你

确实很急,兄弟帮我找找
回复

使用道具 举报

9#
ID:98767 发表于 2016-12-20 09:53 | 只看该作者
你想要1602显示歌词?播放MP3,单要51单片机实现不了啊
回复

使用道具 举报

10#
ID:149801 发表于 2016-12-20 09:58 | 只看该作者
kkfy888 发表于 2016-12-20 09:53
你想要1602显示歌词?播放MP3,单要51单片机实现不了啊

只需要显示下歌名就行了,然后切歌时换相应的歌名
回复

使用道具 举报

11#
ID:149801 发表于 2016-12-20 09:59 | 只看该作者
QQ1034414222 发表于 2016-12-20 09:58
只需要显示下歌名就行了,然后切歌时换相应的歌名

兄弟可以看看我发的C语言版,看看功能,不是很复杂,拜托了
回复

使用道具 举报

12#
ID:156135 发表于 2016-12-20 11:34 | 只看该作者
我跟楼主也差不多,也是要做一个单片机音乐盒
回复

使用道具 举报

13#
ID:156240 发表于 2016-12-20 15:25 | 只看该作者
做这个还需要音频解码器把
回复

使用道具 举报

14#
ID:149094 发表于 2016-12-20 19:04 | 只看该作者
这个有点难度,不是马上就弄的出来的,至少一个小时。
回复

使用道具 举报

15#
ID:149801 发表于 2016-12-20 21:05 | 只看该作者
953164692 发表于 2016-12-20 19:04
这个有点难度,不是马上就弄的出来的,至少一个小时。

可以帮下忙嘛兄弟,真的有点急
回复

使用道具 举报

16#
ID:149801 发表于 2016-12-21 10:04 | 只看该作者
gmz 发表于 2016-12-20 09:16
这个仿真图文件能不能给我一份谢谢

你可以去我另外一个贴下载
回复

使用道具 举报

17#
ID:156871 发表于 2016-12-22 17:01 来自手机 | 只看该作者
帮不上你什么,只能帮你顶了
回复

使用道具 举报

18#
ID:156920 发表于 2016-12-22 17:43 | 只看该作者
没人给代码吗?
回复

使用道具 举报

19#
ID:149801 发表于 2016-12-22 18:24 | 只看该作者

没有啊
回复

使用道具 举报

20#
ID:1 发表于 2016-12-23 03:46 | 只看该作者
你把这个稍微改一下就行了http://www.51hei.com/bbs/dpj-56107-1.html
回复

使用道具 举报

21#
ID:57657 发表于 2017-2-19 08:00 | 只看该作者
wav的解码算法是最简单的了,只要能识别出头文件部分的信息就能对数据进行简单的一些运算后送到数模转换器就行。
用sd卡或u盘的话就用znfat或fatfs的开源文件系统驱动程序源码进行移植即可。

回复

使用道具 举报

22#
ID:208751 发表于 2017-6-11 15:11 | 只看该作者
#include<reg52.h>  #define        uint unsigned int #define uchar unsigned char       //硬件端口定义 sbit SPK=P2^0;  //定义音乐输出端口 sbit key1=P3^2; //定义按键1 用于 暂停 sbit key2=P3^3; //定义按键2 用于 切换 sbit rs=P2^1;             sbit rw=P2^2;             sbit ep=P2^3;  void delay1(uint z) {   uint x,y;   for(x=z;x>0;x--)   for(y=110;y>0;y--); } void write_com(uchar com) {  rs=0;  rw=0;  ep=0;  P0=com;  delay1(2);  ep=1;  delay1(2);  ep=0;  delay1(2); } void write_dat(uchar dat) {  rs=1;  rw=0;  ep=0;  P0=dat;  delay1(2);  ep=1;  delay1(2);  ep=0;  delay1(2); } void write_zfc(uchar *p) {   while(*p!=0)   write_dat(*p++); } void init_1602() {  write_com(0x38);  write_com(0x01);  write_com(0x06);  write_com(0x0c); } unsigned char W=0,T;        //用于选择音乐 unsigned char Timer0_H,Timer0_L,Time; void delay5ms(void)   //误差 0us {     unsigned char a,b;     for(b=185;b>0;b--)         for(a=12;a>0;a--); } void delay500ms(void)   //误差 0us {     unsigned char a,b,c;     for(c=205;c>0;c--)         for(b=116;b>0;b--)             for(a=9;a>0;a--); }                          //世上只有妈妈好 数据表        音谱,高中低音,音长 code unsigned char MUSIC[102]={        6,2,3,      5,2,1,      3,2,2,    5,2,2,    1,3,2,    6,2,1,    5,2,1, 6,2,4,      3,2,2,      5,2,1,    6,2,1,    5,2,2,           3,2,2,    1,2,1, 6,1,1,      5,2,1,      3,2,1,           2,2,4,         2,2,3,           3,2,1,    5,2,2, 5,2,1,      6,2,1,      3,2,2,           2,2,2,    1,2,4,           5,2,3,    3,2,1, 2,2,1,      1,2,1,      6,1,1,           1,2,1,         5,1,6,           0,0,0                                        };                                                 //送别 数据表        音谱,高中低音,音长 code unsigned char MUSIC1[174]={         5,2,2,                3,2,1,                5,2,1,                1,3,4,          6,2,2,                1,3,2,                 5,2,4,      5,2,2,                1,2,1,                2,2,1,                3,2,2,                2,2,1,                 1,2,1,      2,2,8,      5,2,2,                3,2,1,                5,2,1,                1,3,3,                 7,2,1,           6,2,2,                1,3,2,                5,2,4,      5,2,2,                2,2,1,                 3,2,1,                4,2,3,                7,1,1,           1,2,8,      6,2,2,                1,3,2,                 1,3,4,      7,2,2,                6,2,1,                7,2,1,                1,3,4,      6,2,1,                 7,2,1,                1,3,1,                6,2,1,                6,2,1,                5,2,1,                3,2,1,                 1,2,1,           2,2,8,           5,2,2,                3,2,1,                5,2,1,                1,3,3,                 7,2,1,      6,2,2,                1,3,2,                5,2,4,      5,2,2,                2,2,1,                 3,2,1,                4,2,3,                7,1,1,           1,2,8                                                                 };                                                 //新年好 数据表        音谱,高中低音,音长 code unsigned char MUSIC2[90]={                 1,2,1,                1,2,1,                1,2,2,                5,1,2, 3,2,1,                3,2,1,                3,2,2,                1,2,2, 1,2,1,                3,2,1,                5,2,2,                5,2,2, 4,2,1,                3,2,1,                2,2,4,      2,2,1,                 3,2,1,                4,2,2,                4,2,2,      3,2,1,                 2,2,1,                3,2,2,                1,2,2,      1,2,1,                 3,2,1,                2,2,2,                5,1,2,      7,1,1,                 2,2,1,                1,2,4                                                                 };                                                 //童年 数据表        音谱,高中低音,音长 code unsigned char MUSIC3[423]={         5,1,1,                5,1,1,                3,1,1,                5,1,2,                3,1,1,                5,1,2,      6,1,1,                 6,1,1,                1,2,1,                6,1,2,                6,1,1,                1,2,2,      2,2,1,                2,2,1,                 3,2,1,                2,2,2,                5,1,1,                6,1,1,                5,1,1,      1,2,1,                1,2,1,                 5,1,1,                1,2,1,                1,2,1,                1,2,2,                1,2,1,      1,2,1,                5,1,2,                 1,2,1,                6,1,1,                5,1,1,                3,1,1,                2,1,1,      1,1,2,                3,1,1,                 5,1,1,                5,1,2,                5,1,1,                3,1,1,      6,1,1,                6,1,1,                1,2,1,                 6,1,1,                6,1,1,                6,1,1,                6,1,1,                5,1,1,      1,2,2,                1,2,1,                 1,2,1,                1,2,1,                6,1,1,                1,2,1,                6,1,1,      5,1,2,                0,2,1,                 3,1,1,                6,1,1,                1,2,1,                6,1,1,                5,1,1,      3,1,1,                2,1,1,                 3,1,1,                5,1,1,                5,1,2,                5,1,1,                3,1,1,      6,1,1,                6,1,1,                 1,2,1,                6,1,1,                6,1,1,                6,1,1,                6,1,1,                5,1,1,      1,2,2,                 1,2,1,                1,2,1,                1,2,1,                6,1,1,                6,1,1,                1,2,1,      2,2,2,                 0,2,1,                5,1,1,                2,2,1,                5,2,1,                2,2,2,      5,2,1,                5,2,2,                 5,2,1,                5,2,1,                5,2,1,                3,2,1,                2,2,1,      1,2,1,                1,2,2,                 6,1,1,                6,1,1,                1,2,1,                6,1,1,                1,2,1,      2,2,1,                2,2,1,                 2,2,1,                2,2,1,                2,2,1,                1,2,1,                3,2,1,                2,2,1,      2,2,8,       3,2,1,                3,2,2,                3,2,1,                3,2,2,                2,2,2,      1,2,1,                1,2,2,                 1,2,1,                2,2,1,                1,2,1,                6,1,1,                5,1,1,      5,1,1,                5,1,2,                 5,1,1,                6,1,1,                5,1,1,                2,2,1,                3,2,1,      1,2,8,           1,2,1,                 5,1,2,                1,2,1,                6,1,1,                5,1,1,                3,1,1,                2,1,1,      1,2,6,                 0,2,2                                                          };                          // 音阶频率表 高八位 code unsigned char FREQH[]={    0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,                                  0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i                                 0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,                                 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,                                } ;                          // 音阶频率表 低八位 code unsigned char FREQL[]={     0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,                                  0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i                                  0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,                                   0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,                                 }; /*uS延时函数,含有输入参数 unsigned char t,无返回值  unsigned char 是定义无符号字符变量,其值的范围是  0~255,大致延时长度 T=tx2+5 uS */ void DelayUs2x(unsigned char t) {             while(--t); } /* mS延时函数,含有输入参数 unsigned char t,无返回值  unsigned char 是定义无符号字符变量,其值的范围是 0~255*/ void DelayMs(unsigned char t) {             while(t--)     {              //大致延时1mS                 DelayUs2x(245);                 DelayUs2x(245);     } } /*节拍延时函数  各调1/4节拍时间:  调4/4  125ms  调2/4  250ms  调3/4  187ms*/ void delay(uchar t) {     uchar i;         for(i=0;i<t;i++)             DelayMs(250);     TR0=0; } /*定时器0中断*/ void TIM0_ISR() interrupt 1 {         TR0=0;               SPK=!SPK;         TH0=Timer0_H;         TL0=Timer0_L;         TR0=1; } /*歌曲处理函数*/ void Song() {         TH0=Timer0_H;//赋值定时器时间,决定频率         TL0=Timer0_L;         TR0=1;       //打开定时器         delay(Time); //延时所需要的节拍                       } /*主函数*/ void led(unsigned char a); void main(void) {         unsigned int i;         unsigned char k;         TMOD|=0x01; //置定时器0工作方式1         EA=1;       //打开全局中断         ET0=1;      //打开 定时器0 中断         EX0=1;                //打开 外部中断0 中断         IT0=1;                //设置为下降沿中断         EX1=1;                //打开 外部中断1 中断         IT1=1;                //设置为下降沿中断         PX1=1;                //设置 外部中断1 为高优先级         init_1602();         while(1)     {                   //i=0;                                 if(W==0)                 {                           T=W;                         write_com(0x81);                          write_zfc("Only mother is good");                                         write_com(0xc4);                          write_zfc("in the world");                 for(i=0;i<100;i=i+3)                     {         //音乐数组长度 ,唱完从头再来                                 led(MUSIC[i]);                                  k=MUSIC[i]+7*MUSIC[i+1]-1;//去音符振荡频率所需数据                     Timer0_H=FREQH[k];                     Timer0_L=FREQL[k];                     Time=MUSIC[i+2];          //节拍时长                    // i=i+3;                     Song();                                 if(T!=W)                                         break;                 }                 }                                 if(W==1)                 {                           T=W;                         write_com(0x01);                         write_com(0x80);                          write_zfc("   Farewell   ");                 for(i=0;i<174;i=i+3)                     {         //音乐数组长度 ,唱完从头再来                                 led(MUSIC1[i]);                                      k=MUSIC1[i]+7*MUSIC1[i+1]-1;//去音符振荡频率所需数据                     Timer0_H=FREQH[k];                     Timer0_L=FREQL[k];                     Time=MUSIC1[i+2];          //节拍时长                    // i=i+3;                     Song();                                 if(T!=W)                                         break;                 }                 }                 if(W==2)                 {                           T=W;                         write_com(0x80);                          write_zfc(" Happy New Year ");                 for(i=0;i<90;i=i+3)                     {         //音乐数组长度 ,唱完从头再来                                 led(MUSIC2[i]);                                     k=MUSIC2[i]+7*MUSIC2[i+1]-1;//去音符振荡频率所需数据                     Timer0_H=FREQH[k];                     Timer0_L=FREQL[k];                     Time=MUSIC2[i+2];          //节拍时长                    // i=i+3;                     Song();                                 if(T!=W)                                         break;                 }                 }                 if(W==3)                 {                           T=W;                         write_com(0x80);                          write_zfc("  The Childhood");                 for(i=0;i<423;i=i+3)                     {         //音乐数组长度 ,唱完从头再来                                 led(MUSIC3[i]);                                     k=MUSIC3[i]+7*MUSIC3[i+1]-1;//去音符振荡频率所需数据                     Timer0_H=FREQH[k];                     Timer0_L=FREQL[k];                     Time=MUSIC3[i+2];          //节拍时长                    // i=i+3;                     Song();                                 if(T!=W)                                         break;                 }                 }       }  } /* 频谱函数*/ void led(unsigned char a)         {         switch(a)         {                 case 0:P1=0xff;break;                 case 1:P1=0x7f;break;         //D1-D7亮                 case 2:P1=0x7e;break;         //D2-D7亮                 case 3:P1=0x7c;break;         //D3-D7亮                 case 4:P1=0x78;break;         //D4-D7亮                 case 5:P1=0x70;break;         //D5-D7亮                 case 6:P1=0x60;break;         //D6-D7亮                 case 7:P1=0x40;break;         //D7亮                 case 8:P1=0x00;break;         //全灭         }  } /*外部中断0 中断服务程序        用于暂停*/ void zhongduan0() interrupt 0 {        delay5ms();        //按键去抖         if(!key1)         {                 while(!key1);        //松手检测                 while(key1&&T==W);        //检测按键是否按下                 delay5ms();        //按键去抖                 while(key1&&T==W);        //检测按键是否按下                 while(!key1&&T==W);        //松手检测         } } /*外部中断1 中断服务程序*/ void zhongduan1() interrupt 2 {        delay5ms();        //按键去抖         if(!key2)         {                 if(W==3)                         W=0;                 else                         W++;                 while(!key2);        //松手检测                 delay500ms();                         } }
回复

使用道具 举报

23#
ID:257472 发表于 2017-12-4 23:52 | 只看该作者
请问怎么播放音乐
回复

使用道具 举报

24#
ID:257503 发表于 2017-12-5 02:55 | 只看该作者
让我看看线
回复

使用道具 举报

25#
ID:255579 发表于 2017-12-14 09:29 | 只看该作者
http://www.51hei.com/bbs/dpj-56107-1.html


#include<reg52.h>  #define        uint unsigned int #define uchar unsigned char       //硬件端口定义 sbit SPK=P2^0;  //定义音乐输出端口 sbit key1=P3^2; //定义按键1 用于 暂停 sbit key2=P3^3; //定义按键2 用于 切换 sbit rs=P2^1;             sbit rw=P2^2;             sbit ep=P2^3;  void delay1(uint z) {   uint x,y;   for(x=z;x>0;x--)   for(y=110;y>0;y--); } void write_com(uchar com) {  rs=0;  rw=0;  ep=0;  P0=com;  delay1(2);  ep=1;  delay1(2);  ep=0;  delay1(2); } void write_dat(uchar dat) {  rs=1;  rw=0;  ep=0;  P0=dat;  delay1(2);  ep=1;  delay1(2);  ep=0;  delay1(2); } void write_zfc(uchar *p) {   while(*p!=0)   write_dat(*p++); } void init_1602() {  write_com(0x38);  write_com(0x01);  write_com(0x06);  write_com(0x0c); } unsigned char W=0,T;        //用于选择音乐 unsigned char Timer0_H,Timer0_L,Time; void delay5ms(void)   //误差 0us {     unsigned char a,b;     for(b=185;b>0;b--)         for(a=12;a>0;a--); } void delay500ms(void)   //误差 0us {     unsigned char a,b,c;     for(c=205;c>0;c--)         for(b=116;b>0;b--)             for(a=9;a>0;a--); }                          //世上只有妈妈好 数据表        音谱,高中低音,音长 code unsigned char MUSIC[102]={        6,2,3,      5,2,1,      3,2,2,    5,2,2,    1,3,2,    6,2,1,    5,2,1, 6,2,4,      3,2,2,      5,2,1,    6,2,1,    5,2,2,           3,2,2,    1,2,1, 6,1,1,      5,2,1,      3,2,1,           2,2,4,         2,2,3,           3,2,1,    5,2,2, 5,2,1,      6,2,1,      3,2,2,           2,2,2,    1,2,4,           5,2,3,    3,2,1, 2,2,1,      1,2,1,      6,1,1,           1,2,1,         5,1,6,           0,0,0                                        };                                                 //送别 数据表        音谱,高中低音,音长 code unsigned char MUSIC1[174]={         5,2,2,                3,2,1,                5,2,1,                1,3,4,          6,2,2,                1,3,2,                 5,2,4,      5,2,2,                1,2,1,                2,2,1,                3,2,2,                2,2,1,                 1,2,1,      2,2,8,      5,2,2,                3,2,1,                5,2,1,                1,3,3,                 7,2,1,           6,2,2,                1,3,2,                5,2,4,      5,2,2,                2,2,1,                 3,2,1,                4,2,3,                7,1,1,           1,2,8,      6,2,2,                1,3,2,                 1,3,4,      7,2,2,                6,2,1,                7,2,1,                1,3,4,      6,2,1,                 7,2,1,                1,3,1,                6,2,1,                6,2,1,                5,2,1,                3,2,1,                 1,2,1,           2,2,8,           5,2,2,                3,2,1,                5,2,1,                1,3,3,                 7,2,1,      6,2,2,                1,3,2,                5,2,4,      5,2,2,                2,2,1,                 3,2,1,                4,2,3,                7,1,1,           1,2,8                                                                 };                                                 //新年好 数据表        音谱,高中低音,音长 code unsigned char MUSIC2[90]={                 1,2,1,                1,2,1,                1,2,2,                5,1,2, 3,2,1,                3,2,1,                3,2,2,                1,2,2, 1,2,1,                3,2,1,                5,2,2,                5,2,2, 4,2,1,                3,2,1,                2,2,4,      2,2,1,                 3,2,1,                4,2,2,                4,2,2,      3,2,1,                 2,2,1,                3,2,2,                1,2,2,      1,2,1,                 3,2,1,                2,2,2,                5,1,2,      7,1,1,                 2,2,1,                1,2,4                                                                 };                                                 //童年 数据表        音谱,高中低音,音长 code unsigned char MUSIC3[423]={         5,1,1,                5,1,1,                3,1,1,                5,1,2,                3,1,1,                5,1,2,      6,1,1,                 6,1,1,                1,2,1,                6,1,2,                6,1,1,                1,2,2,      2,2,1,                2,2,1,                 3,2,1,                2,2,2,                5,1,1,                6,1,1,                5,1,1,      1,2,1,                1,2,1,                 5,1,1,                1,2,1,                1,2,1,                1,2,2,                1,2,1,      1,2,1,                5,1,2,                 1,2,1,                6,1,1,                5,1,1,                3,1,1,                2,1,1,      1,1,2,                3,1,1,                 5,1,1,                5,1,2,                5,1,1,                3,1,1,      6,1,1,                6,1,1,                1,2,1,                 6,1,1,                6,1,1,                6,1,1,                6,1,1,                5,1,1,      1,2,2,                1,2,1,                 1,2,1,                1,2,1,                6,1,1,                1,2,1,                6,1,1,      5,1,2,                0,2,1,                 3,1,1,                6,1,1,                1,2,1,                6,1,1,                5,1,1,      3,1,1,                2,1,1,                 3,1,1,                5,1,1,                5,1,2,                5,1,1,                3,1,1,      6,1,1,                6,1,1,                 1,2,1,                6,1,1,                6,1,1,                6,1,1,                6,1,1,                5,1,1,      1,2,2,                 1,2,1,                1,2,1,                1,2,1,                6,1,1,                6,1,1,                1,2,1,      2,2,2,                 0,2,1,                5,1,1,                2,2,1,                5,2,1,                2,2,2,      5,2,1,                5,2,2,                 5,2,1,                5,2,1,                5,2,1,                3,2,1,                2,2,1,      1,2,1,                1,2,2,                 6,1,1,                6,1,1,                1,2,1,                6,1,1,                1,2,1,      2,2,1,                2,2,1,                 2,2,1,                2,2,1,                2,2,1,                1,2,1,                3,2,1,                2,2,1,      2,2,8,       3,2,1,                3,2,2,                3,2,1,                3,2,2,                2,2,2,      1,2,1,                1,2,2,                 1,2,1,                2,2,1,                1,2,1,                6,1,1,                5,1,1,      5,1,1,                5,1,2,                 5,1,1,                6,1,1,                5,1,1,                2,2,1,                3,2,1,      1,2,8,           1,2,1,                 5,1,2,                1,2,1,                6,1,1,                5,1,1,                3,1,1,                2,1,1,      1,2,6,                 0,2,2                                                          };                          // 音阶频率表 高八位 code unsigned char FREQH[]={    0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,                                  0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i                                 0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,                                 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,                                } ;                          // 音阶频率表 低八位 code unsigned char FREQL[]={     0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,                                  0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i                                  0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,                                   0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,                                 }; /*uS延时函数,含有输入参数 unsigned char t,无返回值  unsigned char 是定义无符号字符变量,其值的范围是  0~255,大致延时长度 T=tx2+5 uS */ void DelayUs2x(unsigned char t) {             while(--t); } /* mS延时函数,含有输入参数 unsigned char t,无返回值  unsigned char 是定义无符号字符变量,其值的范围是 0~255*/ void DelayMs(unsigned char t) {             while(t--)     {              //大致延时1mS                 DelayUs2x(245);                 DelayUs2x(245);     } } /*节拍延时函数  各调1/4节拍时间:  调4/4  125ms  调2/4  250ms  调3/4  187ms*/ void delay(uchar t) {     uchar i;         for(i=0;i<t;i++)             DelayMs(250);     TR0=0; } /*定时器0中断*/ void TIM0_ISR() interrupt 1 {         TR0=0;               SPK=!SPK;         TH0=Timer0_H;         TL0=Timer0_L;         TR0=1; } /*歌曲处理函数*/ void Song() {         TH0=Timer0_H;//赋值定时器时间,决定频率         TL0=Timer0_L;         TR0=1;       //打开定时器         delay(Time); //延时所需要的节拍                       } /*主函数*/ void led(unsigned char a); void main(void) {         unsigned int i;         unsigned char k;         TMOD|=0x01; //置定时器0工作方式1         EA=1;       //打开全局中断         ET0=1;      //打开 定时器0 中断         EX0=1;                //打开 外部中断0 中断         IT0=1;                //设置为下降沿中断         EX1=1;                //打开 外部中断1 中断         IT1=1;                //设置为下降沿中断         PX1=1;                //设置 外部中断1 为高优先级         init_1602();         while(1)     {                   //i=0;                                 if(W==0)                 {                           T=W;                         write_com(0x81);                          write_zfc("Only mother is good");                                         write_com(0xc4);                          write_zfc("in the world");                 for(i=0;i<100;i=i+3)                     {         //音乐数组长度 ,唱完从头再来                                 led(MUSIC);                                  k=MUSIC+7*MUSIC[i+1]-1;//去音符振荡频率所需数据                     Timer0_H=FREQH[k];                     Timer0_L=FREQL[k];                     Time=MUSIC[i+2];          //节拍时长                    // i=i+3;                     Song();                                 if(T!=W)                                         break;                 }                 }                                 if(W==1)                 {                           T=W;                         write_com(0x01);                         write_com(0x80);                          write_zfc("   Farewell   ");                 for(i=0;i<174;i=i+3)                     {         //音乐数组长度 ,唱完从头再来                                 led(MUSIC1);                                      k=MUSIC1+7*MUSIC1[i+1]-1;//去音符振荡频率所需数据                     Timer0_H=FREQH[k];                     Timer0_L=FREQL[k];                     Time=MUSIC1[i+2];          //节拍时长                    // i=i+3;                     Song();                                 if(T!=W)                                         break;                 }                 }                 if(W==2)                 {                           T=W;                         write_com(0x80);                          write_zfc(" Happy New Year ");                 for(i=0;i<90;i=i+3)                     {         //音乐数组长度 ,唱完从头再来                                 led(MUSIC2);                                     k=MUSIC2+7*MUSIC2[i+1]-1;//去音符振荡频率所需数据                     Timer0_H=FREQH[k];                     Timer0_L=FREQL[k];                     Time=MUSIC2[i+2];          //节拍时长                    // i=i+3;                     Song();                                 if(T!=W)                                         break;                 }                 }                 if(W==3)                 {                           T=W;                         write_com(0x80);                          write_zfc("  The Childhood");                 for(i=0;i<423;i=i+3)                     {         //音乐数组长度 ,唱完从头再来                                 led(MUSIC3);                                     k=MUSIC3+7*MUSIC3[i+1]-1;//去音符振荡频率所需数据                     Timer0_H=FREQH[k];                     Timer0_L=FREQL[k];                     Time=MUSIC3[i+2];          //节拍时长                    // i=i+3;                     Song();                                 if(T!=W)                                         break;                 }                 }       }  } /* 频谱函数*/ void led(unsigned char a)         {         switch(a)         {                 case 0:P1=0xff;break;                 case 1:P1=0x7f;break;         //D1-D7亮                 case 2:P1=0x7e;break;         //D2-D7亮                 case 3:P1=0x7c;break;         //D3-D7亮                 case 4:P1=0x78;break;         //D4-D7亮                 case 5:P1=0x70;break;         //D5-D7亮                 case 6:P1=0x60;break;         //D6-D7亮                 case 7:P1=0x40;break;         //D7亮                 case 8:P1=0x00;break;         //全灭         }  } /*外部中断0 中断服务程序        用于暂停*/ void zhongduan0() interrupt 0 {        delay5ms();        //按键去抖         if(!key1)         {                 while(!key1);        //松手检测                 while(key1&&T==W);        //检测按键是否按下                 delay5ms();        //按键去抖                 while(key1&&T==W);        //检测按键是否按下                 while(!key1&&T==W);        //松手检测         } } /*外部中断1 中断服务程序*/ void zhongduan1() interrupt 2 {        delay5ms();        //按键去抖         if(!key2)         {                 if(W==3)                         W=0;                 else                         W++;                 while(!key2);        //松手检测                 delay500ms();                         } }
回复

使用道具 举报

26#
ID:264067 发表于 2017-12-20 10:59 | 只看该作者
方案设想.docx (14.09 KB, 下载次数: 7)
回复

使用道具 举报

27#
ID:264310 发表于 2017-12-20 15:37 | 只看该作者
来个一蓝牙模块,单片机控制个蓝牙模块不简单?
回复

使用道具 举报

28#
ID:264310 发表于 2017-12-20 15:38 | 只看该作者
来个蓝牙模块就ok
回复

使用道具 举报

29#
ID:264606 发表于 2017-12-21 08:52 | 只看该作者
我有程序   是AT89c51的  你能用上吗??
回复

使用道具 举报

30#
ID:264606 发表于 2017-12-21 08:55 | 只看该作者
我有程序
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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