⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mp3._c

📁 /*** *** *** *** *** *** *** *** *** *** / /* MP3 Code for M32L */ /* By pasyong
💻 _C
字号:
/************************************************************/
/*		         MP3 Code for   M32L					    */
/*				   By   pasyong								*/
/*				   2006-4									*/
/*				   Base ICC6.31A					        */
/************************************************************/
#include <iom32v.h>
#include <macros.h>
#include <stdio.h>
#include "1011.h"
#include "mp3.h"
#include "sd.h"
#include "fat.h"
#include "uarst.h"
#include "3310.h"

void key_port(void)
{
 DDRD=0X00;
 PORTD=0XFF;
}
void main()
{
 key_port();
 spi_init();

 mp3_port_init();vs1011_init();vs1011_init();
 sd_port_init();SD_Init();SD_Init();
 uart0_init();
 SPCR = 0x50;                //提速
 SPSR = 0x01;                //setup SPI

 lcd_port();
 LCD_init(); 
 
 fatInit();                  //查询SDFAT格式
 if(Fat32Enabled)            //设置FAT格式标志
 FAT_MASK=FAT32_MASK;
 else 
 FAT_MASK=FAT16_MASK;


  while(1)
  { 
    //播放音乐
   for(t=3;t<50;t++)
   {
	  flag=0;
	  mp3_play(fatGetDirEntry(t));
	 }
  }
}


void mp3_play(unsigned long FirstClust)
{  
 uint32 LBA,NextCluster;
 uint16 i,data_pointer,rate;
 uint8 n,t1;
 NextCluster = FirstClust;

 while (1)
 {	
	LBA =fatClustToSect(NextCluster);
	for (i=0;i<SectorsPerCluster;i++)
	{
	 if(flag==0)  ReadBlock(LBA+i);      //读完后文件指针自动后移
		  
	 //按键处理程序
	 //ST/PS键按下
	 if(!(PIND&STOP))
	 {
	  delay_nus(250);
		if(!(PIND&STOP))
		{
		 flag^=0x01;
		}
	 }
	  //VOLUP键按下
	 if(!(PIND&VOLDOWN))  
	 {
	  delay_nus(250);
	  if(!(PIND&VOLDOWN))  
		{
		 vol=vol+((uint)(2<<8)+2);
		 if(vol>=0xF0F0) vol=0xF0F0; 
	   else vs1011_cmd_write(0x0b,vol);    //每次左右声道VOL减2
		}
	  }
	  //VOLDOWN键按下
	 if(!(PIND&VOLUP)) 
	 {
		delay_nus(250);
		if(!(PIND&VOLUP)) 
		{
		 vol=vol-((uint)(2<<8)+2);
		 if(vol<=0x0505) vol=0x0505;
		 else vs1011_cmd_write(0x0b,vol);   //每次左右声道VOL加2
	  }
	 }
	   //NEXT键按下
	 if(!(PIND&NEXTSONG)) 
	 {
		delay_nus(250);		
		if(!(PIND&NEXTSONG))  goto NEXT;       //跳到下一首歌曲
	 }
	    //PREV键按下
	 if(!(PIND&PREVSONG)) 
	 {
		delay_nus(250);
		if(!(PIND&PREVSONG))
		{
		 t=t-2;goto NEXT;  //返回前一首歌曲
	  }
	 }
		
	 	
	 data_pointer=0; 
   while(data_pointer<512)
   {    
    if(PINB&MP3_DATA_REQ)
    {
     for(n=0;n<32;n++)
		 {
      vs1011_data_write(BUFFER[data_pointer]);
      data_pointer++;   
   	 }
		}
	  if (data_pointer==511) break;   //如果现在的数据不够了,则跳出来
	 }
	}
	NextCluster = fatNextCluster(NextCluster);
	if (NextCluster >=(CLUST_RSRVD&FAT_MASK))break;
	}
 NEXT: delay_nus(3);  /* 下一首歌曲*/
	
}














⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -