📄 main.c
字号:
#include <iom64v.h>
#include <macros.h>
#include <string.h>
#include <stdio.h>
#include "main.h"
#include "vs1003.h"
#include "ch375interface.h"
#define CH375_INT_WIR ( PINC & 0x80 )
#define PORT_ST (PINB & 0x01) // PB0 输入按键ST/PS
#define FILE_DATA_BUF_LEN 0x0200
#include "CH375HFB.H"
#define N_ST 0x01 //PB0 输入按键ST/PS
#define N_PREV 0x10 //PE4 输入按键PREV
#define N_NEXT 0x20 //PE5 输入按键NEXT
#define N_VOLr 0x40 //PE6 输入按键VOL-
#define N_VOLp 0x80 //PE7 输入按键VOL+
int size = 0;
int mode = 0;
unsigned char flag = 0;
unsigned char bflag = 0;
char mp3name[50];
void port_init(void){
// DDRB &= ~N_ST;
DDRB |= N_ST;
DDRE &= ~N_PREV;
DDRE &= ~N_NEXT;
DDRE &= ~N_VOLr;
DDRE &= ~N_VOLp;
PORTB = 0xFF;
}
int main(void)
{
unsigned char test = 0;
unsigned char status = 0;
unsigned char ret = 0;
unsigned int i,c;
port_init();
mp3_port_init();
/* while(PORT_ST)
bflag = 1;
delay_nms(200);
while(1)
{
if(!PORT_ST)
break;
}
bflag = 1;
*/
vs1003_init();
SPCR = 0x50; //提速
SPSR = 0x01; //setup SPI
CH375_PORT_INIT( );
xWriteCH375Cmd(CMD_RESET_ALL);
delay_nms(40);
xWriteCH375Cmd(CMD_CHECK_EXIST);
xWriteCH375Data(0x01);
test = xReadCH375Data();
xWriteCH375Cmd(CMD_SET_USB_MODE);
xWriteCH375Data(0x06);
status = xReadCH375Data();
while(CH375_INT_WIR);
xWriteCH375Cmd(CMD_GET_STATUS);
status = xReadCH375Data();
if(status == USB_INT_CONNECT)
delay_nms(250);
status = CH375LibInit();
while(1)
{
if(CH375DiskReady() == ERR_SUCCESS)break;
}
ret = CH375DiskSize();
size =(unsigned int)( mCmdParam.DiskSize.mDiskSizeSec >> 11 ) ;
while(1)
{
for ( c = 0; c < 255; c ++ )
{ /* 最多搜索前255个文件 */
strcpy( mCmdParam.Open.mPathName,"\\*" ); /* 搜索根目录下文件名*/
i = strlen( (char *)mCmdParam.Open.mPathName ); /* 计算文件名长度,以处理文件名结束符 */
mCmdParam.Open.mPathName[ i ] =0xFF; /* 将结束符替换为255说明序号在变量中 */
CH375vFileSize=c; /*指定搜索的序号,几乎没有上限*/
i = CH375FileEnumer( ); /* 文件名中含有通配符*,则为搜索文件而不打开 */
if ( i == ERR_MISS_FILE ) break; /* 再也搜索不到匹配的文件,已经没有匹配的文件名 */
if ( i != ERR_SUCCESS ) break; /* 搜索到与通配符相匹配的文件名,文件名及其完整路径在命令缓冲区中 */
if(CH375vFileSize!=0xFFFFFFFF) /*枚举到MP3文件*/
{
//else LCD_write_english_string(0,5,"this is mp3file" );
//bflag = PORT_ST;
//delay_nms(1);
strcpy( mp3name,(char *)mCmdParam.Open.mPathName );
mp3_play( (char *)mCmdParam.Open.mPathName );
}
//else LCD_write_english_string(0,5,"directory" );
}
}
return 0;
}
void mp3_play(char *s)
{
uint i;uchar t0,data,t1,t2;UINT16 data_pointer;
/* 播放MP3 */
strcpy( (char *)mCmdParam.Open.mPathName, s);
strcpy( mp3name,s );
/* 打开文件 */
i=CH375FileOpen( );
//查询当前文件的信息
CH375FileQuery( );
//LCD_write_english_string(0,1,"SongSize" );
data=(unsigned char)(CH375vFileSize/102400);
t1=data/10;
//LCD_set_XY(56,1);
//LCD_write_char(t1+48);
//LCD_write_english_string(64,1,"." );
//LCD_set_XY(68,1);
t2=data%10;
//LCD_write_char(t2+48);
//LCD_write_english_string(76,1,"M" );
//显示开始播放
//LCD_write_english_string(0,2,"Playing" );
while( 1 )
{
mCmdParam.Read.mSectorCount =1; // 指定读取的扇区数
if(flag==0) CH375FileRead(); //读完后文件指针自动后移
//处理数据
data_pointer=0;
while(data_pointer<512)
{
if(!PORT_ST)
{
/* delay_nms(200);
while(1)
{
bflag = 1;
if(!PORT_ST)
break;
}
bflag = 1;
delay_nms(200);*/
goto NEXT;
}
if(PINE&MP3_DATA_REQ) //加载数据
{
for(i=0;i<32;i++)
{
vs1003_data_write(FILE_DATA_BUF[data_pointer]);
data_pointer++;
}
}
if(data_pointer==511) break; //如果现在的数据不够了,则跳出来
}
if(mCmdParam.Read.mSectorCount<1) break; // 实际读出的扇区数较小则说明文件已经结束
}
NEXT: CH375FileClose( ); /* 关闭文件 */
}
void test_1003(void)
{
UINT16 data_pointer;UINT8 i;
while(1)
{
data_pointer=0;
while(data_pointer<4800)
{
if(PINE&MP3_DATA_REQ)
{
for(i=0;i<32;i++)
{
vs1003_data_write(vsBeepMP3[data_pointer]);
data_pointer++;
}
if(data_pointer==4799) break; //如果现在的数据不够了,则跳出来
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -