📄 play.c
字号:
#include <iom64v.h>
#include <macros.h>
#include <string.h>
#include <stdio.h>
#include "../Vs1003/vs1003.h"
#include "./mp3data.h"
#include "../Ch375b/375interface.h"
#include "../Keyboard/key.h"
extern uchar const nAsciiDot[];
extern uchar const play_menu[];
extern unsigned char const tab[];
///////////////////
//调试录音
///////////////////
const unsigned char header[] = {
0x52, 0x49, 0x46, 0x46, 0x1c, 0x10, 0x00, 0x00,
0x57, 0x41, 0x56, 0x45, 0x66, 0x6d, 0x74, 0x20, /*|RIFF....WAVEfmt |*/
0x14, 0x00, 0x00, 0x00, 0x11, 0x00, 0x01, 0x00,
0x40, 0x1f, 0x00, 0x00, 0x75, 0x12, 0x00, 0x00, /*|........@......|*/
0x00, 0x01, 0x04, 0x00, 0x02, 0x00, 0xf9, 0x01,
0x66, 0x61, 0x63, 0x74, 0x04, 0x00, 0x00, 0x00, /*|.......fact....|*/
0x5c, 0x1f, 0x00, 0x00, 0x64, 0x61, 0x74, 0x61,
0xe8, 0x0f, 0x00, 0x00
};
/////////////////////////////////////////////////////////////////////////
// Bitmap点阵数据表 //
// 图片: E:\..鈂new\DIR.bmp,纵向取模下高位,数据排列:从左到右从上到下 //
// 图片尺寸: 192 * 64 //
/////////////////////////////////////////////////////////////////////////
unsigned char const DIR[] = // 数据表
{
0xFF,0xFF,0xFF,0x07,0x07,0x07,0x07,0x07,
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,
0x07,0x07,0x07,0x07,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x06,0x01,0x01,0xE1,0x11,0x0E,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x20,0x06,0x01,0x01,0xE1,0x11,0x0E,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x08,0x88,0x78,0x08,0x08,0x20,0x24,
0xE8,0x30,0x20,0x30,0xEC,0x20,0x20,0x00,
0x40,0x40,0x40,0xF8,0x48,0x48,0x5C,0x68,
0x48,0x48,0xF8,0x40,0x60,0x40,0x00,0x00,
0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0x88,
0x88,0xFC,0x08,0x00,0x00,0x00,0x80,0x80,
0x88,0xA8,0xA8,0xA8,0xA8,0xA8,0xA8,0xA8,
0xFC,0x88,0x80,0x80,0x00,0x20,0x20,0xFC,
0x20,0x20,0x80,0x40,0x30,0x0C,0x10,0x20,
0x40,0x80,0x80,0x00,0x00,0x10,0x10,0x90,
0x50,0x30,0x10,0xFC,0x10,0x30,0x50,0x90,
0x18,0x10,0x00,0x80,0xE0,0xBC,0xA0,0x20,
0x80,0x90,0xFC,0x90,0x90,0xFC,0x90,0x90,
0x80,0x00,0x80,0x84,0x98,0x00,0x00,0x00,
0x78,0x48,0x48,0x48,0x48,0x7C,0x08,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x06,0x06,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x06,0x06,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x02,0x7F,0x21,0x21,0x7F,0x46,0x75,
0x4C,0xE3,0x04,0x67,0x5C,0x43,0xE0,0x00,
0x88,0x84,0xFA,0x89,0x88,0xF8,0x89,0x8A,
0xF8,0x8A,0x8B,0xF8,0x80,0x80,0x00,0x00,
0x00,0x00,0xFF,0x44,0x44,0x44,0x44,0x44,
0x44,0xFF,0x00,0x00,0x00,0x00,0x40,0x40,
0x22,0x22,0x14,0x48,0x88,0x7F,0x04,0x08,
0x14,0x22,0x60,0x20,0x00,0x0C,0x03,0xFF,
0x01,0x82,0x80,0x8D,0xB1,0x85,0x99,0xE1,
0x9D,0x80,0x80,0x00,0x00,0x81,0x81,0xBF,
0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xBF,0x80,
0x81,0x01,0x00,0x05,0x04,0xFF,0x44,0x24,
0x00,0xFE,0x52,0x52,0x52,0x52,0xFE,0x00,
0x00,0x00,0x00,0x00,0x7F,0x20,0x90,0x84,
0x45,0x25,0x15,0x0F,0x15,0x25,0xC5,0x44,
0x00,0x00,0x58,0x38,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x40,
0x42,0xCC,0x00,0x00,0x44,0x54,0x54,0x54,
0x7E,0x54,0x54,0x44,0x40,0x00,0x08,0x88,
0xF8,0x88,0x88,0x48,0xE0,0xB8,0xAE,0xE8,
0xB8,0xA8,0xE0,0x00,0x00,0x80,0x40,0xF0,
0x0E,0x00,0x00,0x7C,0x44,0xC4,0x44,0x44,
0x7E,0x04,0x00,0x00,0x04,0xC4,0xBC,0x84,
0x84,0x10,0x92,0x74,0x98,0x10,0x98,0x76,
0x90,0x10,0x00,0x20,0x20,0x20,0xFC,0x24,
0x24,0xAE,0x34,0x24,0x24,0xFC,0x20,0x30,
0x20,0x00,0x04,0x04,0x04,0x04,0x04,0x04,
0xFC,0x44,0x44,0x84,0x84,0x04,0x06,0x04,
0x00,0x08,0x08,0x08,0x88,0x68,0x18,0x2E,
0x28,0x28,0xA8,0x68,0x28,0x0C,0x08,0x00,
0x10,0x10,0x10,0xD0,0x30,0x18,0x16,0x10,
0xD0,0x10,0x10,0x10,0x18,0x10,0x00,0x10,
0xF0,0xF0,0x00,0xF0,0xF0,0x10,0x00,0x10,
0xF0,0x10,0x00,0x10,0xF0,0x10,0x00,0x00,
0xE0,0x10,0x10,0x10,0x10,0x70,0x00,0x00,
0x10,0x10,0xF0,0x10,0x10,0x00,0x00,0xC0,
0x20,0x10,0x10,0x10,0x10,0x70,0x00,0x00,
0x28,0x28,0x28,0xFC,0xA6,0x24,0x00,0xF8,
0x08,0x08,0x08,0xFC,0x08,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,
0x00,0x3F,0x10,0x08,0x00,0x7F,0x15,0x15,
0x15,0x55,0x7F,0x00,0x00,0x00,0x02,0x3F,
0x08,0x08,0x5F,0x20,0x1F,0x04,0x04,0x7F,
0x04,0x44,0x7F,0x00,0x00,0x00,0x00,0x7F,
0x00,0x21,0x11,0x09,0x05,0x7F,0x03,0x05,
0x09,0x11,0x21,0x00,0x01,0x3F,0x10,0x10,
0x3F,0x23,0x3A,0x26,0x71,0x02,0x33,0x2E,
0x21,0x70,0x00,0x44,0x42,0x7D,0x44,0x44,
0x7C,0x44,0x45,0x7C,0x45,0x45,0x7C,0x40,
0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x7F,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
0x00,0x04,0x02,0x01,0x7F,0x00,0x02,0x02,
0x22,0x42,0x3F,0x02,0x02,0x02,0x02,0x00,
0x04,0x02,0x01,0x7F,0x40,0x42,0x42,0x42,
0x7F,0x42,0x42,0x42,0x42,0x40,0x00,0x20,
0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,0x00,
0x1F,0x20,0x20,0x20,0x1F,0x00,0x00,0x00,
0x38,0x21,0x21,0x22,0x22,0x1C,0x00,0x00,
0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x0F,
0x10,0x20,0x20,0x20,0x10,0x08,0x00,0x08,
0x04,0x02,0x01,0x7F,0x00,0x03,0x00,0x1F,
0x08,0x08,0x08,0x1F,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x08,
0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x08,
0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0xE0,
0x10,0x08,0x08,0x08,0x08,0x38,0x00,0xE0,
0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x08,
0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x08,
0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x02,
0x02,0xF2,0x12,0x92,0x7E,0x92,0x12,0xFE,
0x12,0x12,0x12,0xF3,0x02,0x00,0x40,0x40,
0x20,0x10,0x08,0x04,0xE3,0x04,0x08,0x10,
0x20,0x20,0x40,0x40,0x00,0x00,0x04,0x04,
0x04,0xFF,0x54,0x54,0x54,0x54,0xFF,0x04,
0x04,0x04,0x00,0x00,0x00,0x08,0x08,0x08,
0x88,0x48,0x28,0xFF,0x28,0x48,0x88,0x08,
0x0C,0x08,0x00,0x00,0x04,0x04,0x04,0x04,
0x04,0xFC,0x04,0x04,0x04,0x04,0x06,0x04,
0x00,0x00,0x40,0x20,0x10,0xFC,0x03,0x20,
0x10,0x0C,0xFB,0x48,0x48,0x48,0x4C,0x08,
0x00,0x00,0x00,0x00,0xFE,0x22,0x22,0x22,
0x22,0x22,0x22,0xFF,0x02,0x00,0x00,0x00,
0x20,0x20,0xA2,0xAA,0x2A,0x2A,0x2A,0xEA,
0x2A,0x2A,0x3F,0xA2,0x20,0x20,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x10,
0x1F,0x10,0x01,0x06,0x18,0x10,0x00,0x10,
0x1F,0x10,0x10,0x13,0x10,0x08,0x00,0x07,
0x08,0x10,0x10,0x10,0x08,0x04,0x00,0x07,
0x08,0x10,0x10,0x10,0x08,0x07,0x00,0x10,
0x1F,0x10,0x01,0x06,0x18,0x10,0x00,0x10,
0x1F,0x10,0x10,0x10,0x08,0x07,0x00,0x00,
0x00,0x3F,0x02,0x01,0x04,0x02,0x01,0x00,
0x01,0x12,0x20,0x1F,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x09,0x29,0x25,
0x2B,0x29,0x29,0x3F,0x29,0x29,0x29,0x2B,
0x25,0x2D,0x04,0x00,0x04,0x04,0x02,0x05,
0x04,0x04,0x04,0x3F,0x04,0x04,0x04,0x05,
0x02,0x04,0x00,0x10,0x10,0x10,0x10,0x10,
0x10,0x1F,0x10,0x10,0x10,0x10,0x10,0x18,
0x10,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,
0x00,0x00,0x3F,0x04,0x04,0x04,0x06,0x04,
0x00,0x00,0x00,0x00,0x3F,0x11,0x11,0x11,
0x11,0x11,0x11,0x3F,0x00,0x00,0x00,0x00,
0x10,0x10,0x08,0x08,0x05,0x12,0x22,0x1F,
0x01,0x02,0x05,0x08,0x18,0x08,0x00,0x00,
0x00,0x30,0x48,0x48,0x30,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0xE0,0xFF,0xFF,0xFF,0xFF
};
unsigned char mp3buf[512]; /* data buffer for saving to disk */
uchar filename[3][30];
uchar Filename[40]; //保持选择的文件名称
extern uchar keybuf;
extern unsigned char const nofile[];
#define WMA
/* 以下定义的详细说明请看CH375HF9.H文件 */
#define LIB_CFG_FILE_IO 1 /* 文件读写的数据的复制方式,0为"外部子程序",1为"内部复制" */
#define LIB_CFG_INT_EN 0 /* CH375的INT#引脚连接方式,0为"查询方式",1为"中断方式" */
/* 单片机的RAM有限,其中CH375子程序用512字节,剩余RAM部分可以用于文件读写缓冲 */
//#define FILE_DATA_BUF_LEN 0x0200 /* 外部RAM的文件数据缓冲区,缓冲区长度不小于一次读写的数据长度 */
/* 如果准备使用双缓冲区交替读写,那么不要定义FILE_DATA_BUF_LEN,而是在参数中指定缓冲区起址,用CH375FileReadX代替CH375FileRead,用CH375FileWriteX代替CH375FileWrite */
#define CH375_INT_WIR ( PIND & 0x02 ) /* PIND.1, CH375的中断线INT#引脚,连接CH375的INT#引脚,用于查询中断状态 */
#include "../Ch375b/CH375HFB.H"
extern unsigned char const diskinfor[];
void mp3_pause(void)
{
while(1);
}
void mDelaymS( UINT32 ms )
{
UINT16 i;
while ( ms -- ) for ( i = 2600; i != 0; i -- );
}
//1011测试
void test_vs1003()
{
UINT16 data_pointer;UINT8 i;
Print_str("Test vs1003b... \r\n");
while (1)
{
data_pointer=0;
while(data_pointer<4800)
{
if((PIND & DREQ) != 0)
{
mp3InData();
for(i=0;i<32;i++)
{
spiSend(vsBeepMP3[data_pointer++]);
}
mp3OutData();
}//end if(PIND & DREQ)
}
}
}
uchar Init_usb(void)
{
uint i;uchar t0,data,t1,t2;
uchar size;
Print_str("Now debug usb host....\r\n");
CH375_PORT_INIT( );
/* 初始化CH375程序库和CH375芯片,操作成功返回0 */
if(CH375LibInit()==0){Print_str("Ch375 init Ok!\r\n");}
else Print_str("Ch375 init Error!\r\n");
size = 0;
while(CH375_INT_WIR){
delay_1s();
if(++size >= 5) return 0;
}
while ( CH375DiskStatus != DISK_CONNECT ) xQueryInterrupt( ); /* 查询CH375中断并更新中断状态,等待U盘插入 */
mDelaymS( 200 ); /* 延时,可选操作,有的USB存储器需要几十毫秒的延时 */
Print_str("Find usb\r\n");
/* 检查U盘是否准备好,有些U盘不需要这一步,但是某些U盘必须要执行这一步才能工作 */
for ( i = 0; i < 30; i ++ ) /* 有的U盘总是返回未准备好,不过可以被忽略 */
{
if ( CH375DiskReady( ) == ERR_SUCCESS ) break; /* 查询磁盘是否准备好 */
}
Print_str("Run here\r\n");
/* 查询磁盘物理容量 */
Print_str("Usb = ");
Print_size(CH375DiskSize());
Print_str("M\r\n");
return 1;
}
//在u盘中产生新文件
/* 检查操作状态,如果错误则显示错误代码并停机 */
void mStopIfError( uchar iError )
{
if ( iError == ERR_SUCCESS ) return; /* 操作成功 */
show_lcd(0, 0, 192, 6, &diskinfor[0],0);
while ( 1 );
}
void close_make_file(void)
{
mCmdParam.Close.mUpdateLen = 1; /* 自动计算文件长度,以字节为单位写文件,建议让程序库关闭文件以便自动更新文件长度 */
mStopIfError(CH375FileClose( ));
}
/* 产生新文件 */
void make_newfile(void)
{
uchar name;
uchar temp;
// "\RECORD\XX.WAV"
Filename[0]=0x5c;
Filename[1]='R';
Filename[2]='E';
Filename[3]='C';
Filename[4]='O';
Filename[5]='R';
Filename[6]='D';
Filename[7]=0x5c;
name = 1;
while(1){
if((name/100)!=0){temp = name/100;
Filename[8] = temp+'0';
temp = name%100;
Filename[9] = temp/10+'0';
Filename[10] = temp%10+'0';
Filename[11] = '.';
Filename[12] = 'W';
Filename[13] = 'A';
Filename[14] = 'V';
Filename[15] = 0x00;
}
else{
if((name/10)!=0){
Filename[8] = name/10+'0';
Filename[9] = name%10+'0';
Filename[10] = '.';
Filename[11] = 'W';
Filename[12] = 'A';
Filename[13] = 'V';
Filename[14] = 0x00;
}
else{
Filename[8] = name+'0';
Filename[9] = '.';
Filename[10] = 'W';
Filename[11] = 'A';
Filename[12] = 'V';
Filename[13] = 0x00;
}
}
Print_str( &Filename[0] );
strcpy( (char *)mCmdParam.Open.mPathName, &Filename[0]);
if(CH375FileOpen( ) != ERR_SUCCESS) break;
CH375FileClose( );//关闭文件
name += 1;
}
Print_str( "Make New File=" );
Print_str( &Filename[0] );
strcpy((char *)mCmdParam.Create.mPathName,&Filename[0]); /* 新文件名,在根目录下的RECORD下 */
Print_str("\r\n");
Print_str((char *)mCmdParam.Create.mPathName);
Print_str("\r\n");
mStopIfError(CH375FileCreate()); /* 新建文件并打开,如果文件已经存在则先删除后再新建 */
Print_str( "Make File Ok\r\n" );
}
//播放MP3程序
void mp3_play(char *s, uchar type)
{
uint i;
uchar t0,data,t1,t2;
UINT16 data_pointer;
uchar *ps;
uint time,time_temp;
show_clear();
show_lcd(0, 0, 192, 2, &play_menu[0],0);
show_play(s,3,0);
/* 播放MP3 */
strcpy( (char *)mCmdParam.Open.mPathName, s);
/* 打开文件 */
mStopIfError(CH375FileOpen( ));
#ifdef WMA
while(data_pointer<2048)//recommand 2048 zeros honoring DREQ befor soft reset
{ //用于从wma跳出到下一首歌,和一首歌结束填充数据//midi格式不需要
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -