可以显示播放时间,显示音量和显示歌名。不过歌名只能显示3个中文字或者6和英文字符。
单片机源程序如下:
- #include "reg52.h"
- #include "delay.h"
- #include "12864.h"
- #include "ysm3a3.h"
- #include "stdio.h"
- #define FOSC 11059200L //System frequency
- bit busy,SOE;
- unsigned int data1[4]={0xfd,0x02,0x04,0xdf}; //上一曲
- unsigned int data2[4]={0xfd,0x02,0x03,0xdf}; //下一曲
- unsigned int data3[4]={0xfd,0x02,0x05,0xdf}; //音量加
- unsigned int data4[4]={0xfd,0x02,0x06,0xdf}; //音量减
- unsigned int datak[4]={0xfd,0x02,0x0c,0xdf}; //暂停播放
- unsigned char data5[5]={0xfd,0x03,0x31,0x02,0xdf}; //设置音量为05/30
- unsigned char data6[5]={0xfd,0x03,0x33,0x00,0xdf}; //设置循环模式为
- unsigned int data7[7]={0xfd,0x04,0x41,0x00,0x01,0xdf}; //播放第一首歌
- unsigned int datac1[4]={0xfd,0x02,0x11,0xdf}; //查询音量
- unsigned int datac4[4]={0xfd,0x02,0x1c,0xdf}; //当前时间
- unsigned int datac6[4]={0xfd,0x02,0x1e,0xdf}; //查询歌名
- unsigned char j;
- unsigned char ss[7];
-
- sbit key1=P1^0; //上一曲
- sbit key2=P1^1; //下一曲
- sbit key3=P1^2; //音量+
- sbit key4=P1^3; //音量-
- sbit key5=P1^4; //暂停播放
- void SendData(unsigned char dat)
- { while (busy); //Wait for the completion of the previous data is sent
- ACC = dat; //Calculate the even parity bit P (PSW.0)
- busy = 1;
- SBUF = ACC; //Send data to UART buffer
- }
- void mp3init()
- {unsigned int i;
- SCON = 0x50; //8-bit variable UART
- TMOD = 0x20; //Set Timer1 as 8-bit auto reload mode
- TH1 = TL1 = -(FOSC/12/32/9600); //Set auto-reload vaule
- TR1 = 1; //Timer1 start run
- ES = 1; //Enable UART interrupt
- EA = 1; //Open master interrupt switch
- key1=key2=key3=key4=1;
- for(i=0;i<5;i++)SendData(data5[i]);Delay(2600); //音量
- for(i=0;i<5;i++)SendData(data6[i]);Delay(2600); //循环模式
- for(i=0;i<6;i++)SendData(data7[i]);Delay(2600); //播放第xx首
- }
- void mp3()
- { unsigned int i,t,ge,shi,j0,j1,fen,miao;
- j=0;
- if(key1==0)
- {for(i=0;i<4;i++)SendData(data1[i]);DelayMs(100);} //上一曲
- if(key2==0)
- {for(i=0;i<4;i++)SendData(data2[i]);DelayMs(100);} //下一曲
- if(key3==0)
- {for(i=0;i<4;i++)SendData(data3[i]);DelayMs(100);} //音量加
- if(key4==0)
- {for(i=0;i<4;i++)SendData(data4[i]);DelayMs(100);} //音量减
- if(key5==0)
- {for(i=0;i<4;i++)SendData(datak[i]);DelayMs(100);} //暂停播放
- for(i=0;i<4;i++)SendData(datac4[i]);DelayMs(60); //查询时间
-
- Show(0x9b,8,ss); //显示收到的指令
- shi=ss[4]%16;j0=ss[4]/16; //ASCII吗转10进制
- ge=ss[5]%16;j1=ss[5]/16;
- if(j0==6)shi=shi+9;
- if(j1==6)ge=ge+9;
- t=shi*16+ge;
- Show_dig(0x8f,t); //显示过滤和转换的时间(s)
- fen=t/60;miao=t%60;
- Show_dig(0x8b,fen);
- Show(0x8c,2,"分");
- Show_dig(0x8d,miao);
- Show(0x8e,2,"秒");
- }
- void mp3name()
- { unsigned int i;
- unsigned char xx[5];
- j=0;
- if(key1==0)
- {for(i=0;i<4;i++)SendData(data1[i]);DelayMs(100);} //上一曲
- if(key2==0)
- {for(i=0;i<4;i++)SendData(data2[i]);DelayMs(100);} //下一曲
- if(key3==0)
- {for(i=0;i<4;i++)SendData(data3[i]);DelayMs(100);} //音量加
- if(key4==0)
- {for(i=0;i<4;i++)SendData(data4[i]);DelayMs(100);} //音量减
- if(key5==0)
- {for(i=0;i<4;i++)SendData(datak[i]);DelayMs(100);} //暂停播放
- for(i=0;i<4;i++)SendData(datac6[i]);DelayMs(200); //查询歌名
- Show(0x9b,8,ss); //显示收到的指令
- xx[0]=ss[2];
- xx[1]=ss[3];
- xx[2]=ss[4];
- xx[3]=ss[5]; //暂存歌名
- xx[4]=ss[6];
- xx[5]=ss[7];
- Show(0x8b,4,"名:");
- Show(0x8d,6,xx);
-
- }
- void mp3yinliang()
- { unsigned int i,t,ge,shi,j0,j1;
- j=0;
- if(key1==0)
- {for(i=0;i<4;i++)SendData(data1[i]);DelayMs(100);} //上一曲
- if(key2==0)
- {for(i=0;i<4;i++)SendData(data2[i]);DelayMs(100);} //下一曲
- if(key3==0)
- {for(i=0;i<4;i++)SendData(data3[i]);DelayMs(100);} //音量加
- if(key4==0)
- {for(i=0;i<4;i++)SendData(data4[i]);DelayMs(100);} //音量减
- if(key5==0)
- {for(i=0;i<4;i++)SendData(datak[i]);DelayMs(100);} //暂停播放
- for(i=0;i<4;i++)SendData(datac1[i]);DelayMs(100); //查询音量
- Show(0x9b,8,ss); //显示收到的指令
- shi=ss[2]%16;j0=ss[2]/16; //ASCII吗转10进制
- ge=ss[3]%16;j1=ss[3]/16;
- if(j0==6)shi=shi+9;
- if(j1==6)ge=ge+9;
- t=shi*16+ge;
- Show(0x8b,6,"音量:");
- Show_dig(0x8e,t);
- Show(0x8f,2," "); //显示过滤和转换的音量
- }
- void Uart_Isr() interrupt 4 using 1
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
mp3 12864 TEA5767(显示时间,歌名和音量).rar
(1.62 KB, 下载次数: 44)
|