void spi_write(uint8 ch);void VS1003init();void wr_commad(unsigned char addr,unsigned char hdat,unsigned char ldat) ;void sintest(unsigned char x) ;void delayms(uint16 z);void delayus(uint16 z);
void main(){int i;VS1003init();XDCS=0;for(i=0;i<20000;i++){DREQ=1;while(!DREQ);spi_write(music);}while(1);}void spi_write(uint8 ch){uint8 i;for(i=0;i<8;i++){MOSI=0x80&ch; //高位先写ch<<=1;SCLK=0; //上升沿有效SCLK=1;}}void wr_commad(unsigned char addr,unsigned char hdat,unsigned char ldat) { DREQ=1; while(!DREQ); XCS=0; spi_write(0x02); spi_write(addr); spi_write(hdat); spi_write(ldat); XCS=1; }void VS1003init(){XRST=0;delayus(100);XDCS=XCS=XRST=1;wr_commad(0x00,0x80,0x04); //VS1003新模式 软件复位delayus(10);DREQ=1;while(!DREQ);wr_commad(0x03,0x98,0x00); //VS1003时钟:3倍频delayus(10);wr_commad(0x05,0xbb,0x81); //VS1003采样率:48Kps 立体声delayus(10);wr_commad(0x02,0x00,0x55); //设置重音delayus(10);wr_commad(0x0b,0x20,0x20); //设置音量delayus(10);spi_write(0x00); //写4个字节的无效数据以驱动spi_write(0x00);spi_write(0x00);spi_write(0x00);} void sintest(unsigned char x) //正弦测试(循环){ wr_commad(0x00,0x08,0x20); //VS1003测试模式 DREQ=1; while(!DREQ); XDCS=0;XCS=1; spi_write(0x53); spi_write(0xef); spi_write(0x6e); spi_write(x); //频率 spi_write(0); spi_write(0); spi_write(0); spi_write(0); delayus(5000); spi_write(0x45); spi_write(0x78); spi_write(0x69); spi_write(0x74); spi_write(0); spi_write(0); spi_write(0); spi_write(0); delayus(5000); XDCS=1; } void delayms(uint16 z){uint16 i,j;for(i=z;i>0;i--)for(j=110;j>0;j--);} void delayus(uint16 z){while(z--);}
这段代码可以播放原先附有的music[](音乐数据),然后我把这段音乐数据改为别的歌(前面32个字节有在的),为什么就播不了了?帮帮忙哈,太感谢您了
2019-7-24 08:05:33
程序要怎么改?能给我讲一下思路吗?谢谢哈。我看上面那个程序好像也是直接读取music里面的字节,前面32个字节和后面的数据读取方式都一样的,感觉有点奇怪
程序要怎么改?能给我讲一下思路吗?谢谢哈。我看上面那个程序好像也是直接读取music里面的字节,前面32个字节和后面的数据读取方式都一样的,感觉有点奇怪
举报
2019-7-24 08:25:20
码率是VS1003自动识别的,你只要找到VS1003支持的音频格式,然后丢给他就是了。。。
码率是VS1003自动识别的,你只要找到VS1003支持的音频格式,然后丢给他就是了。。。
举报
2019-7-24 08:34:10
我想请教你目前做成功的 那部分,把数据放在单片机里可以放,指教一下
我想请教你目前做成功的 那部分,把数据放在单片机里可以放,指教一下
举报