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

📄 main.c

📁 M16-Mp3.rar
💻 C
字号:

//--------------------------- 实验程序名称:MP3播放器 ------------------------------
//
//开发平台:ATmega16教学实验板
//外设使用:1. T/C0定时器  2. AD模数转换(通道7)   3. SPI总线
//模块使用:1.AD键盘   2.SD卡   3.VS1003模块
//频率:外频16MHz
//电压:3.3V
//
//存储体:SD卡
//文件系统:FAT32
//显示器:不带
//音乐文件:SD卡上命名“音乐”文件夹,在“音乐”文件夹内存储歌曲,格式为“MP3“。
//按键操作: |  Key6  |  Key5  |   Key4  |  Key3  |  Key2  |  Key1  |
//           |  播放  |  停止  |  上一首 |  音量+ |  音量- | 下一首 |
//
//原理:使用ATmega16读取SD卡中音乐文件传输到VS1003进行解码播放。
//重点:1.文件系统  2.SD卡驱动
//
//作者:廖华明(师兄)
//日期:2009.7.8
//
//----------------------------------------------------------------------------------

#include "SPI.h"
#include "Usart.h"
#include "fat.h"
#include "vs1003.h"
#include "AD_key.h"


//--------------  音乐播放程序 -------------------//

void VS1003_Play(void);



//----------------- ------------------------------
//
//                   主函数
//
//------------------------------------------------
void main()
{
   Usart_Init(9600);     // 串口初始化9600bps
   SPI_Init();           // SPI初始化,默认速度400Hz
   VS1003_Init();        // VS1003芯片初始化
   while(SD_Init());     // SD卡循环初始化
   Fat_Init();           // 文件系统初始化
   AD_Init();            // AD初始化
   TC0_Init();           // T/C0初始化
   
   VS1003_Play();        // 音乐播放
}



//----------------- ------------------------------
//
//                  音乐播放函数
//
//------------------------------------------------
void VS1003_Play(void)
{
	uint32 n;
	uint32 i;
	uint32 size_buf=0;        // 已播放的文件大小
	uint32 num;               // 音乐文件所在的簇
	uint8 music_num=0;        // 正在播放文件的号码
	uint8 play_flag=0;        // 播放标志
	uint16 data_pointer=0;   
	uint8 music_next=0,music_last=0; // 音乐换曲标志
	uint8 vol_flag=0;         // 音量调节标志
	
	AD_Flag=0;                // AD键盘标志
    AD_time=0;                // AD键盘采样次数
    key_num=0;                // 按键号
	
	GetMusicFile();           // 获取音乐文件
	
	num = fclust[music_num];  // 调用音乐文件

	while(1)
	{
		for(i=0;i<8;i++)
		{ 
		   SD_ReadBlock(FirstDataSector+(num-2)*8+i,Fat_Buffer);   // 获取音乐文件的数据
			do
			{	
			    //--------------------------- AD按键检测 ---------------------------//
				
			    if(key_num==6&&AD_time==0)play_flag=1;             // Key6按下,播放
				else if(key_num==5&&AD_time==0)play_flag=0;        // Key5按下,停止
				else if(key_num==1&&AD_time==0)music_next=1;       // Key1按下,下一首
				else if(key_num==4&&AD_time==0)music_last=1;       // Key4按下,上一首
				else if(key_num==3&&AD_time==0)vol_flag=1;         // Key3按下,音量+
				else if(key_num==2&&AD_time==0)vol_flag=2;         // Key2按下,音量-
				
				//-------------- 音量调节 ----------------//
				if(vol_flag!=0)                                 
				{
				  if(vol_flag==1)
				  {
				    if(VOL>27)VOL=29;
					else VOL+=2;
				  }
				  else
				  {
				    if(VOL<2)VOL=0;
					else VOL-=2;
				  }
					
				  VS1003_WriteReg(VS1003_SPI_VOL ,VOL_BUFFER[VOL]); // 送音量数据
				  
				  while(VS1003_DREQ_STATE() != VS1003_DREQ);	 // 等待
				  
				  key_num = 0;
				  vol_flag=0;
				}
				
				
				//----------------- 换曲操作 -----------------//  
				
				if(music_next!=0||music_last!=0)
				{
				  data_pointer=512;
				  i=8;
				}
				
				//---------------- 音乐数据送入 ------------------//  
				else if(VS1003_DREQ_STATE()== VS1003_DREQ&&play_flag!=0) 
				{	
					for(n=0;n<32;n++)
					{	
						VS1003_WriteDat(Fat_Buffer[data_pointer]); // 发送数据
						data_pointer++;	
					}
					size_buf+=32;
				}
				
				if(size_buf>=fsize[music_num]-64)
				{
				   data_pointer=512;
				   i=8;
				  size_buf=0;
				}
				
			}while(data_pointer<511); 
			
		  data_pointer=0;
		  
		}
		
		//---------- 下一簇 ------------//  
		num = FatNextCluster(num);	
		
		if(num==CLUST_EOFE||music_next!=0||music_last!=0)
		{
		   if(music_last!=0)
		   {
		     if(music_num>0)music_num--;
			 else music_num = fcount-1;
		   }
		   
		   else
		   {
		     if(music_num<fcount-1)music_num++;
			 else music_num=0;
		   }
		   
		   num = fclust[music_num];
		   play_flag=1;
		   music_next = 0;
		   music_last = 0;
		   key_num=0;
	   }
		
	} 
	 	
}


⌨️ 快捷键说明

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