您的当前位置:首页正文

include

2020-10-23 来源:爱站旅游
导读include


#include \"config.h\"

mian.c xdata FILE TmpFile

void main() { UINT32 lba = 0;

UINT16 i;

UartInit(); //初始化串口

UartSendStr(\"**************************************\\r\\n\");

UartSendStr(\"**************************************\\r\\n\");

UartSendStr(\"**************************************\\r\\n\");

UartSendStr(\"*********51MP3播放器演示程序**********\\r\\n\");

UartSendStr(\"**************************************\\r\\n\");

UartSendStr(\"**************************************\\r\\n\");

UartSendStr(\"**************************************\\r\\n\");

UartSendStr(\"**************************************\\r\\n\");

UartSendStr(\"初始化SPI接口\\r\\n\");

InitSPI(); //初始化SPI接口

UartSendStr(\"初始化VS1003\\r\\n\");

RstVs1003();

UartSendStr(\"正弦测试\\r\\n\");

//Sintest(); DelayMs(300);

UartSendStr(\"退出正弦测试\\r\\n\");

SoftRstVs1003();

UartSendStr(\"初始化CH375\\r\\n\");

InitCH375();

//初始化液晶

LCD_Init();

//显示logo

LCD_SET_CURSOR(1,1);

Print(\" mp3 player \

LCD_SET_CURSOR(2,1);

Print(\" stuelab \

SPI_HIGH_SPEED(); //高速SPI接口

UartSendStr(\"初始化文件系统\\r\\n\");

InitFat (SectorBuf);

UartSendStr(\"统计文件信息\\r\\n\");

i = StatFileNum(2, \"MP3\

sprintf(SectorBuf,\"根目录下MP3文件个数为%d .\\r\\n\

UartSendStr(SectorBuf);

i = StatFileNum(2, \"WMA\

sprintf(SectorBuf,\"根目录下WMA文件个数为%d .\\r\\n\

UartSendStr(SectorBuf);

i = StatFileNum(2, \" \

sprintf(SectorBuf,\"根目录下文件夹个数为%d .\\r\\n\

UartSendStr(SectorBuf);

UartSendStr(\"查找根目录下第一个MP3文件\\r\\n\");

SearchFile(2, 1, \"MP3\

UartSendStr(\"\\r\\n开始播放\\r\\n\");

//UartSendStr(TmpFile.short_name);

lba = ClusToLba(TmpFile.start_clus);

while (1)

{

RdSDblock(lba++,SectorBuf);

PlaySector();

}

}

#include \"config.h\" spi.c

sbit SCK = P1^7;

sbit SO = P1^5;

sbit SI = P1^6;

void InitSPI (void)

{

SCK = 1;

SO = 1;

SI = 1;

SPCR = 0xdc+3; //主机模式,允许中断,时钟常高,4分频

ES = 0; //串口中断允许。SPI和UART共用同一个中断。

EA = 0; //中断总控位

}

void SPIsendByte (unsigned char dat)

{ SDAT = dat;

while (!(SPSR & 0x80)); //等待发送完毕

SPSR = 0; //清除中断标志

}

unsigned char SPIrecvByte (void)

{ unsigned char dat

SDAT = 0XFF;

while (!(SPSR & 0x80)); //等待发送完毕

SPSR = 0; //清除中断标志

dat = SDAT; //发送的过程中同时完成接收

return dat //return SDAT;

}

void SPIsendByte2(unsigned char temp) //软件模拟SPI发送接口

{ char i;

for (i = 0; i < 8; i++)

{ SCK = 0

SO = (bit)(temp&0x80)

SCK = 1 temp <<= 1; } } /*

unsigned SPIrecvByte2(void) { char i

unsigned char temp;

for(i = 0; i < 8; i++)

SO = 1

//软件模拟SPI接收接口

{ temp <<= 1; SCK = 0

temp = ((char)SI) | temp SCK = 1

} return(temp);

} */

#include \"config.h\" void DelayMs(UINT16 ticks)

{ UINT16 tmp;

while (ticks--){ for (tmp=1000; tmp>0; tmp--); }

void DelayUs(UINT16 ticks)

{

while (ticks--);

}

} delay.c

#include \"config.h\" vs1003.c

char tmp;

void SoftWrVs1003Cmd(unsigned char addr,unsigned int cmd)

{

SPCR = 0;//关闭SPI

//SCK = 1;

//SO = 1;

//SI = 1;

WaitVs1003();

SelectCmdVs1003(); DelayUs(5);

SPIsendByte2(0x02);

SPIsendByte2(addr);

//片选

SPIsendByte2((unsigned char)(cmd>>8));

SPIsendByte2((unsigned char)cmd);

DelayUs(5);

ReleaseCmdVs1003(); //释放

SPCR = 0xdf; //打开SPI

}

void WrVs1003Cmd (unsigned char addr,unsigned int cmd)

{ WaitVs1003();

SelectCmdVs1003(); //片选

DelayUs(5);

SPIsendByte(0x02);

SPIsendByte(addr);

SPIsendByte((unsigned char)(cmd>>8));

SPIsendByte((unsigned char)cmd);

DelayUs(5);

ReleaseCmdVs1003(); //释放

}

void SoftRstVs1003(void)

{

//WrVs1003Cmd(0,0x0804); SoftWrVs1003Cmd(0,0x0804);

DelayMs(10);

SoftWrVs1003Cmd(2,0x00f6); DelayMs(1);

SoftWrVs1003Cmd(3,0x9800); DelayMs(10);

//具体功能见官方数据手册第28页(软件复位

//低音

//倍频

SoftWrVs1003Cmd(5,0xbb81); //采样率和通道数

DelayMs(1);

SoftWrVs1003Cmd(0x0b,0x2020); //音量

DelayMs(1);

}

void RstVs1003(void)

{ SelectRstVs1003(); DelayMs(10);

SPIsendByte(0xff);

ReleaseRstVs1003();

DelayMs(10);

WrVs1003Cmd(0x0b,0xffff); DelayMs(1);

//硬件复位

//音量

SoftRstVs1003();

}

void Sintest(void)

{

WrVs1003Cmd(0,0x0820); WaitVs1003();

SelectDatVs1003();

DelayUs(5);

SPIsendByte(0x53);

SPIsendByte(0xef);

SPIsendByte(0x6e);

SPIsendByte(0x30);

SPIsendByte(0);

//进入正弦测试

SPIsendByte(0);

SPIsendByte(0);

SPIsendByte(0);

DelayUs(5);

ReleaseDatVs1003();

}

void PlaySector(void)

{

UINT16 i

SelectDatVs1003();

for (i=0; i<512;) {//连续发32个字节(VS1003有32字节的缓冲区)

WaitVs1003(); // 查忙

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

SPIsendByte(SectorBuf[i++]);

}

ReleaseDatVs1003();

}

#include \"config.h\" #include #include

//#include //串口驱动函数 /* 定义CH375命令代码及返回状态 */

#include \"CH375INC.H\" /* CH375特性 */ 定义CH375.c

#define CH375_BLOCK_SIZE 64

/* CH375 maximum data block size */

#define CH375_BLK_PER_SEC 8

/* CH375 block per sector, SECTOR_SIZE/CH375_BLOCK_SIZE */

/* 以下定义适用于MCS-51单片机,其它单片机参照修改,为了提供C语言的速度需要对本程序进行优化 */

#include unsigned char volatile xdata CH375_CMD_PORT _at_ 0xff04;

/* CH375 命令端口的I/O地址 */

unsigned char volatile xdata CH375_DAT_PORT _at_ 0xfe04;

/* CH375数据端口的I/O地址 */

unsigned char xdata DATA_BUFFER[512] _at_ 0x0000;

/* 外部RAM数据缓冲区的起始地址,长度不少于一次读写的数据长度 */

sbit CH375_INT_WIRE = 0xA0^5;

/* P3.2, INT0, 连接CH375的INT#引脚,用于查询中断状态 */

/* 在P1.4连接一个LED用于监控演示程序的进度,低电平LED亮,当U盘插入后亮 */

sbit P1_4 = P1^4; #define LED_OUT_ACT( ) { P1_4 = 0; }

/* P1.4 低电平驱动LED显示

#define LED_OUT_INACT( )

{ P1_4 = 1; } /* P1.4 低电平驱动LED显示/* 延时2微秒,不精确 */

void delay2us( )

{

unsigned char i; for ( i = 2; i != 0; i -- ); }

/* 延时1微秒,不精确 */

void delay1us( )

*/

{ unsigned char i; for ( i = 1; i != 0; i -- );

} /* 延时100毫秒,不精确 */

void mDelay100mS( )

{ unsigned char i, j, c;

for ( i = 200; i != 0; i -- )

for ( j = 200; j != 0; j -- ) c+=3; }

/* 基本操作 */

void CH375_WR_CMD_PORT( unsigned char cmd )

{ /* 向CH375的命令端口写入命令,周期不小于4uS,如果单片机较快则延时 */

delay2us();

CH375_CMD_PORT=cmd; delay2us();

}

void CH375_WR_DAT_PORT( unsigned char dat )

{ /* 向CH375的数据端口

写入数据,周期不小于1.5uS,如果单片机较快则延时 */

CH375_DAT_PORT=dat;

delay1us(); /* 因为MCS51单片机较慢所以实际上无需延时 */

}

unsigned char CH375_RD_DAT_PORT()

{

/* 从CH375的数据端口读出数据,周期不小于1.5uS,如果单片机较快则延时 */

delay1us();

/* 因为MCS51单片机较慢所以实际上无需延时 */

return( CH375_DAT_PORT ); }

/* 等待CH375中断并获取状态 */

unsigned char mWaitInterrupt()

{ /* 主机端等待操作完成, 返回操作状态 */

while( CH375_INT_WIRE );

/* 查询等待CH375操作完成中断(INT#低电平) */

CH375_WR_CMD_PORT( CMD_GET_STATUS );

/* 产生操作完成中断, 获取中断状态 */

return( CH375_RD_DAT_PORT( )

); /* c = CH375_RD_DAT_PORT( ); 返回中断状态 */

/* if ( c == USB_INT_DISCONNECT ) ?;

检测到USB设备断开事件 */

/* else if ( c == USB_INT_CONNECT ) ?;

检测到USB设备连接事件 */

}

/* 设置CH375为USB主机方式 */

unsigned char mCH375Init( )

{

unsigned char i;

#ifdef TEST_CH375_PORT unsigned char c;

CH375_WR_CMD_PORT( CMD_CHECK_EXIST );

/* 测试工作状态 */

CH375_WR_DAT_PORT( 0x55 );

/* 测试数据 */

c = CH375_RD_DAT_PORT( );

/* 返回数据应该是测试数据取反 */

if ( c != 0xaa )

{ /* CH375出错 */

for ( i = 100; i != 0; i -- )

{ /* 强制数据同步 */

CH375_WR_CMD_PORT( CMD_RESET_ALL );

/* CH375执行

硬件复位 */

c = CH375_RD_DAT_PORT( );

/* 延时 */

}

mDelay100mS( ); /* 延时至少30mS */

}

#end if

CH375_WR_CMD_PORT( CMD_SET_USB_MODE ); /* 设置USB工作

模式 */

CH375_WR_DAT_PORT( 6 ); /* 模式代码,自动检测USB设接 */

for ( i = 0xff; i != 0; i -- ) /* 等待操作成功,通常需要等待10uS-20uS */

if ( CH375_RD_DAT_PORT( ) == CMD_RET_SUCCESS ) break; /*

操作成功 */

if ( i != 0 )

return( 0 ); /* 操作成功 */

else return( 0xff ); /* CH375出错,例如芯片型号错或者处于串口方式或者

不支持 */

}

/* 初始化磁盘 */

unsigned char mInitDisk( )

{ unsigned char mIntStatus;

CH375_WR_CMD_PORT( CMD_GET_STATUS );

/* 产生操作完成中断,

获取中断状态 */

mIntStatus = CH375_RD_DAT_PORT( );

if ( mIntStatus == USB_INT_DISCONNECT )

return( mIntStatus ); /* USB

设备断开 */

CH375_WR_CMD_PORT( CMD_DISK_INIT ); /* 初始化USB存储器 */

因篇幅问题不能全部显示,请点此查看更多更全内容