音乐播放器的两个关键点:1、用FATFS对音乐文件进行管理,包括打开,读取等。2、配置Codec芯片,通过DMA,把读取的音乐文件数据送到Codec。
这个工程中,主要实现第一个大点的一些操作。
直接上程序,需要注意的几个点。
#include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "lcd.h" #include "key.h" #include "sram.h" #include "malloc.h" #include "sdio_sdcard.h" #include "malloc.h" #include "ff.h" #include "string.h" #include "fattester.h"void upper(char *p); //这个函数用来把小写字母转换成大写 u8 tell_type(char *p); //通过后缀名识别文件类型 u8 wav_decode(FIL *p); //WAV文件的解码 u8 *readbuf; UINT mybr; int main(void) { u8 key,res,music_number; char *myfn; char *myfn_temp; char *filename_temp;
//FATFS相关的变量 FATFS *fs[1]; FIL *myfile; DIR mydir; FILINFO myfileinfo; FRESULT myres; //初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); delay_init(168); uart_init(115200); LED_Init(); KEY_Init(); my_mem_init(SRAMIN); my_mem_init(SRAMCCM); //SD卡初始化 while(SD_Init()) { delay_ms(500); LED0=!LED0; } //FATFS相关的很多函数,用到的结构体,需要申请内存,不然会出错,比如f_mount/f_open fs[0]=(FATFS*)mymalloc(SRAMIN,sizeof(FATFS)); myfile=(FIL*)mymalloc(SRAMIN,sizeof(FIL)); myfileinfo.lfsize = _MAX_LFN * 2 + 1; myfileinfo.lfname = mymalloc(SRAMIN,myfileinfo.lfsize); // 支持长文件名,方法为3,需要动态申请内存 _USE_LFN=3 readbuf=(u8*)mymalloc(SRAMIN,512); //读文件的缓冲区 myfn_temp= (char *)mymalloc(SRAMIN,myfileinfo.lfsize); res=f_mount(fs[0],"0:",1); //挂载 while(1) { key=KEY_Scan(0); if(key==1) //测试当前目录的文件读取,f_open-----f_read { f_open(myfile,"test1.txt",FA_READ); res=f_read(myfile,readbuf,20,&mybr); if(res) printf("Read Error:%d ",res); else while(*readbuf!='