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

📄 mp3._c

📁 自制MP3程序
💻 _C
字号:
/************************************************************/
/*		         MP3 Code for   M32L					    */
/*				   By   pasyong								*/
/*				   2006-4									*/
/*				   Base ICC6.31A					        */
/************************************************************/
#include <iom64v.h>
#include <macros.h>
#include <stdio.h>
#include "1011.h"
#include "mp3.h"
#include "sd.h"
#include "fat.h"
#include "lcd.h"
#include "bmp.h"
#include "delay.h"

void key_port(void)
 {
 DDRE=0X00;
 PORTE=0XFF;
 }
void main()
{
key_port();
spi_init();
   LCD_Init();
   LCD_clear();
   LCD_write_String(0,5,"MEGA64L    MP3"); // 显示英文字符串
   LCD_draw_map(0,2,AVR_bmp,40,24);        // 显示“AVR”位图 
   LCD_draw_map(44,2,china_bmp,36,15);     // 显示”实验室“位图 
mp3_port_init();vs1003_init();vs1003_init();
sd_port_init();SD_Init();SD_Init();
SPCR = 0x50;                //提速
SPSR = 0x01;                //setup SPI

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(!(PINE&STOP))
	   {
	    delay_nus(250);delay_nus(250);delay_nus(250);delay_nus(250);delay_nus(250);
		if(!(PINE&STOP))
		{
		 flag^=0x01;
		 }
	   }
	  //VOLUP键按下
	  if(!(PINE&VOLDOWN))  
	   {
	    delay_nus(250);
	    if(!(PINE&VOLDOWN))  
		  {
		  vol=vol+((uint)(2<<8)+2);
		   if(vol>=0xFAFA) vol=0xF0F0; 
	       else vs1003_cmd_write(0x0b,vol);    //每次左右声道VOL减2
		  }
	   }
	  //VOLDOWN键按下
	  if(!(PINE&VOLUP)) 
	    {
		delay_nus(250);delay_nus(250);delay_nus(250);delay_nus(250);
		if(!(PINE&VOLUP)) 
		  {
		   vol=vol-((uint)(2<<8)+2);
		   if(vol<=0x0505) vol=0x0505;
		   else vs1003_cmd_write(0x0b,vol);   //每次左右声道VOL加2
	      }
		}
	   //NEXT键按下
	  if(!(PINE&NEXTSONG)) 
	    {
		while(!(PINE&NEXTSONG));
		  goto NEXT;       //跳到下一首歌曲
	    }
	    //PREV键按下
	  if(!(PINE&PREVSONG)) 
	    {
		delay_nus(250);delay_nus(250);delay_nus(250);delay_nus(250);
		if(!(PINE&PREVSONG))
		  {
		  t=t-2;goto NEXT;  //返回前一首歌曲
	      }
		}
		
	 	
		 data_pointer=0; 
        while(data_pointer<512)
        {    
            if(PINB&MP3_DATA_REQ)
               {
                 for(n=0;n<32;n++)
		           {
                    vs1003_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(1);  /* 下一首歌曲*/
	
}














⌨️ 快捷键说明

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