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

📄 main.i

📁 使用硬盘制作mp3的源程序
💻 I
字号:
#line 1 "C:\DATA\MP3\Player\Code\main.c"
#line 1 "C:/iccavr/include/iom128v.h"




#line 7 "C:/iccavr/include/iom128v.h"


#line 11 "C:/iccavr/include/iom128v.h"


#line 14 "C:/iccavr/include/iom128v.h"


#line 17 "C:/iccavr/include/iom128v.h"


#line 20 "C:/iccavr/include/iom128v.h"






























































































































































































































































































































































































































































































































































































































































































































































































#line 2 "C:\DATA\MP3\Player\Code\main.c"
#line 1 "C:\DATA\MP3\Player\Code/fat.h"






void InitFat(void);
unsigned long Clust2LBA(unsigned long clust);
unsigned long GetNextCluster(unsigned long Clust);
int GetDir(unsigned long Cluster, unsigned int From, unsigned int Qte, unsigned int Display);
void DisplayFiles(unsigned char *LinePtr);

































struct PartRecord
{
		unsigned char 	IsActive;
		unsigned char 	StartHead;
		unsigned int	StartCylSect;
		unsigned char	PartType;
		unsigned char	EndHead;
		unsigned int	EndCylSect;
		unsigned long	StartLBA;
		unsigned long	Size;
};

struct BootRecord
{
	   unsigned char 	jmp[3];
	   unsigned char 	name[8];
	   unsigned int  	BytesPerSec;
	   unsigned char 	SecPerClust;
	   unsigned int	 	ResSectors;
	   unsigned char 	FATs;
	   unsigned int	 	RootDirEnts;
	   unsigned int	 	Sectors;
	   unsigned char 	Media;
	   unsigned int	 	FATsecs;
	   unsigned int	 	SecPerTrack;
	   unsigned int	 	Heads;
	   unsigned long 	HiddenSecs;
	   unsigned long 	HugeSectors;
	   unsigned long 	FATSize;
	   unsigned int  	ExtFlags;
	   unsigned int  	FSVers;
	   unsigned long 	RootClust;
	   unsigned int  	FSInfo;
	   unsigned int  	Backup;
};


struct DirEntry
{
		unsigned char	Name[8];
		unsigned char	Extension[3];
		unsigned char	Attributes;
		unsigned char   LowerCase;
		unsigned char   CHundredth;
		unsigned char   CTime[2];
		unsigned char   CDate[2];
		unsigned char   ADate[2];
		unsigned int    FirstClustHi;
		unsigned char   MTime[2];
		unsigned char   MDate[2];
		unsigned int    FirstClustLo;
		unsigned long   FileSize;
};


struct WinEntry
{
        unsigned char   Cnt;
        unsigned int    Part1[5];
        unsigned char   Attr;
        unsigned char   Reserved1;
        unsigned char   Chksum;
        unsigned int    Part2[6];
        unsigned int    Reserved2;
        unsigned int    Part3[2];
};


struct FileInfo
{
 	   unsigned char 	Name[256];
	   unsigned char	Extension[3];
	   unsigned char	Attr;
	   unsigned long	FirstClust;
	   unsigned long	FileSize;
};



#line 3 "C:\DATA\MP3\Player\Code\main.c"
#line 1 "C:\DATA\MP3\Player\Code/ata.h"





int init_ata(unsigned char device);
void ata_hard_reset(void);
void ata_select_device(unsigned char device);

void ata_write_word(unsigned char reg,unsigned int wordout);
void ata_write_byte(unsigned char reg,unsigned char byteout);

unsigned int ata_read_word(unsigned char reg);
unsigned char ata_read_byte(unsigned char reg);

unsigned char ata_rdy(void);
unsigned char ata_bsy(void);
unsigned char ata_drq(void);
unsigned char ata_err(void);

void ata_write_sector(unsigned char device, unsigned long lbasector, unsigned int *ptr);
void ata_read_sector_byte(unsigned char device, unsigned long lbasector,
	 					  unsigned int from, unsigned int qte,unsigned char *ptr);


























































































































#line 147 "C:\DATA\MP3\Player\Code/ata.h"


#line 150 "C:\DATA\MP3\Player\Code/ata.h"


#line 154 "C:\DATA\MP3\Player\Code/ata.h"







#line 4 "C:\DATA\MP3\Player\Code\main.c"
#line 1 "C:\DATA\MP3\Player\Code/vs1001.h"





void VS1001Init(unsigned char HardReset);
void VS1001_SetVolume(unsigned char Left,unsigned char Rignt);
void VS1001_Stream(unsigned char *Data,unsigned char Qte);
void VS1001_Write(unsigned char Address,int Count,unsigned int *pData);
void VS1001_Read(unsigned char Address,int Count,unsigned int *pData);
unsigned char Reg_Test(void);
void Sine_On(unsigned char Freq);
void Sine_Off(void);
void Sine_Sweep(void);
unsigned char WriteByteSPI(unsigned char byte);
























#line 5 "C:\DATA\MP3\Player\Code\main.c"
#line 1 "C:\DATA\MP3\Player\Code/remote.h"






void InitRemote(void);
void RemoteSendLine(unsigned char LinePtr);
void RemoteSendScreen(unsigned char Header,unsigned char LinePtr);
void SendRemote(char *buffer);
void SendByte(unsigned char TxByte);
void TxChar(unsigned char ch);
void RxChar(void);








#line 6 "C:\DATA\MP3\Player\Code\main.c"
#line 1 "C:\DATA\MP3\Player\Code/main.h"











void main(void);
void DirBrowser(unsigned long Cluster);
void FileBrowser(unsigned long Cluster);
int PlayMP3(void);
int DoTask(int Percent);


#line 7 "C:\DATA\MP3\Player\Code\main.c"
#line 1 "C:\DATA\MP3\Player\Code/generic.h"






void delay_ms(int ms);
void delay_us(unsigned int us);


#line 8 "C:\DATA\MP3\Player\Code\main.c"
#line 1 "C:/iccavr/include/string.h"


#line 1 "C:/iccavr/include/_const.h"




#line 10 "C:/iccavr/include/_const.h"







#line 4 "C:/iccavr/include/string.h"







typedef unsigned int size_t;


void *memcpy(void *, void *, size_t);
void *memset(void *, int, size_t);
void *memchr(void *, int, size_t);
int memcmp(void *, void *, size_t);
void *memmove(void *, void *, size_t);

char *strchr( char *, int);
int strcoll( char *, char *);
size_t strcspn( char *, char *);
char *strncat(char *, char *, size_t);
int strncmp( char *, char *, size_t);
char *strncpy(char *, char *, size_t);
char *strpbrk( char *, char *);
char *strrchr( char *, int);
size_t strspn( char *, char *);
char *strstr( char *, char *);


char *strtok(char *, char *);


size_t strlen( char *);
char *strcpy(char *, char *);
int strcmp( char *, char *);
char *strcat(char *, char *);


size_t cstrlen(const char *cs);
char *cstrcpy(char *, const char *cs);
char *cstrncpy(char *, const char *cs, size_t);
int cstrcmp(const char *cs, char *);
char *cstrcat(char *, const char *);




char *cstrstr(char *ramstr, const char *romstr);
char *cstrstrx(char *ramstr, const char *romstr);



#line 57 "C:/iccavr/include/string.h"

#line 9 "C:\DATA\MP3\Player\Code\main.c"
#line 1 "C:/iccavr/include/stdio.h"


#line 1 "C:/iccavr/include/stdarg.h"


typedef char *va_list;




#line 9 "C:/iccavr/include/stdarg.h"

char *_va_start(void *, int);

#line 13 "C:/iccavr/include/stdarg.h"




#line 4 "C:/iccavr/include/stdio.h"
#line 1 "C:/iccavr/include/_const.h"




#line 10 "C:/iccavr/include/_const.h"







#line 5 "C:/iccavr/include/stdio.h"

int getchar(void);
int putchar(char);
int puts( char *);
int printf( char *, ...);
int vprintf( char *, va_list va);
int sprintf(char *, char *, ...);

int scanf( char *, ...);
int sscanf(char *, char *, ...);
int vscanf( char *, va_list va);






int cprintf(const char *, ...);
int csprintf(char *, const char *, ...);



#line 10 "C:\DATA\MP3\Player\Code\main.c"
#line 1 "C:/iccavr/include/macros.h"






























#line 33 "C:/iccavr/include/macros.h"











void _StackCheck(void);
void _StackOverflowed(char);




#line 11 "C:\DATA\MP3\Player\Code\main.c"







unsigned char text[255];




void main(void)
{
init_sci();
ClrScr();
tx_char(1,0x07);
GotoXY(1,1);
tx_string(1,"MP3 Player 1.0\0");
GotoXY(1,2);
tx_string(1,"--------------\0");
GotoXY(1,3);
if ((*(volatile unsigned char *)0x54) & 0x01) tx_string(1,"-Power ON\0");
GotoXY(1,4);
if ((*(volatile unsigned char *)0x54) & 0x02) tx_string(1,"-Ext RESET\0");
GotoXY(1,5);
if ((*(volatile unsigned char *)0x54) & 0x04) tx_string(1,"-Brown Out\0");
GotoXY(1,6);
if ((*(volatile unsigned char *)0x54) & 0x08) tx_string(1,"-Watch Dog\0");
(*(volatile unsigned char *)0x54) = 0x0f;

delay_ms(5000);

 asm("wdr");
(*(volatile unsigned char *)0x41) = 0x0f;

ClrScr();
GotoXY(1,1);
tx_string(1,"MP3 Player 1.0\0");
GotoXY(1,2);
tx_string(1,"--------------\0");

VS1001Init();

GotoXY(1,4);
if (init_ata(0)) tx_string(1,"-ATA OK\0");
else tx_string(1,"-ATA FAIL\0");

GotoXY(1,5);
if (Reg_Test()) tx_string(1,"-MP3 OK\0");
else tx_string(1,"-MP3 FAIL\0");

GotoXY(1,6);
tx_string(1," Press a key  \0");

InitFat();

VS1001_SetVolume(50,50);
Sine_Sweep();

while(!is_char(1))asm("wdr");
rx_char(1);

DirBrowser(2);
}




void DirBrowser(unsigned long Cluster)
{
extern unsigned char text[255];
extern struct FileInfo File;
unsigned char ch;
unsigned int MaxFile;
static int FilePtr = 0;
static int Page = 0;
static int FilePtrSave;

ClrScr();
GotoXY(1,1);
tx_string(1,"-- Dir List --\0");
FilePtr = Page * 5;
MaxFile = GetDir(Cluster,FilePtr,999,1,0);
GotoXY(2,2);
GetDir(2,FilePtr,5,1,1);
FilePtr = FilePtrSave;
GotoXY(1,(FilePtr% 5)+2);
while(1)
		{
		while(!is_char(1))asm("wdr");
		ch = rx_char(1);
		if (ch == '2')
		   {
		   FilePtr++;
		   if (FilePtr >= MaxFile) FilePtr--;
		   if ((FilePtr / 5) != Page)
		   	  {
			  Page = FilePtr / 5;
			  ClrScr();
			  GotoXY(1,1);
			  tx_string(1,"-- Dir List --\0");
			  GotoXY(2,2);
			  GetDir(Cluster,FilePtr,5,1,1);
			  }
		   GotoXY(1,(FilePtr% 5)+2);
		   }

		if (ch == '8')
		   {
		   FilePtr--;
		   if (FilePtr < 0) FilePtr = 0;
		   if ((FilePtr / 5) != Page)
		   	  {
			  FilePtr -= (5 - 1);
			  Page = FilePtr / 5;
			  ClrScr();
			  GotoXY(1,1);
			  tx_string(1,"-- Dir List --\0");
			  GotoXY(2,2);
			  GetDir(Cluster,FilePtr,5,1,1);
			  FilePtr += (5 - 1);
			  }
		   GotoXY(1,(FilePtr% 5)+2);
		   }

		if (ch == '6')
		   {
		   FilePtrSave = FilePtr;
		   GetDir(Cluster,FilePtr,1,1,1);
		   FileBrowser(File.FirstClust);
		   }
		}
}




void FileBrowser(unsigned long Cluster)
{
extern unsigned char text[255];
extern struct FileInfo File;
unsigned char ch;
unsigned int MaxFile;
int FilePtr,Page;

ClrScr();
GotoXY(1,1);
tx_string(1,"--Song List --\0");
FilePtr = 0;
Page = 0;
MaxFile = GetDir(Cluster,FilePtr,999,0,0);
GotoXY(2,2);
GetDir(Cluster,FilePtr,5,0,1);
GotoXY(2,2);
while(1)
		{
		while(!is_char(1))asm("wdr");
		ch = rx_char(1);
		if (ch == '2')
		   {
		   FilePtr++;
		   if (FilePtr >= MaxFile) FilePtr--;
		   if ((FilePtr / 5) != Page)
		   	  {
			  Page = FilePtr / 5;
			  ClrScr();
			  GotoXY(1,1);
			  tx_string(1,"--Song List --\0");
			  GotoXY(2,2);
			  GetDir(Cluster,FilePtr,5,0,1);
			  }
		   GotoXY(1,(FilePtr% 5)+2);
		   }

		if (ch == '8')
		   {
		   FilePtr--;
		   if (FilePtr < 0) FilePtr = 0;
		   if ((FilePtr / 5) != Page)
		   	  {
			  FilePtr -= (5 - 1);
			  Page = FilePtr / 5;
			  ClrScr();
			  GotoXY(1,1);
			  tx_string(1,"--Song List --\0");
			  GotoXY(2,2);
			  GetDir(Cluster,FilePtr,5,0,1);
			  FilePtr += (5 - 1);
			  }
		   GotoXY(1,(FilePtr% 5)+2);
		   }

		if (ch == '6')
		   {
		   FilePtr--;
		   	   do
		   	   {
			   FilePtr++;
			   if (FilePtr > MaxFile) break;
			   ClrScr();
			   GotoXY(1,1);
			   GetDir(Cluster,FilePtr,1,0,0);
		   	   tx_string(1,"-Song Playing-\0");
			   GotoXY(1,3);
		   	   sprintf(&text[0],"%s\0",&File.Name[0]);
		   	   tx_string(1,&text[0]);
			   GotoXY(2,5);
   			   sprintf(&text[0],"Percent = 0  \0");
   			   tx_string(1,&text[0]);
			   }
		   	   while(PlayMP3());

		   ClrScr();
		   GotoXY(1,1);
		   tx_string(1,"--Song List --\0");
		   GotoXY(2,2);
		   GetDir(Cluster,FilePtr,5,0,1);
		   GotoXY(1,(FilePtr% 5)+2);
		   }
		if (ch == '4')
		   {
		   DirBrowser(2);
		   }
		}
}







int PlayMP3(void)
{
unsigned char buffer[512];
unsigned long LBA,i,j,NextCluster,TimeOut,ByteSend,Percent;
extern struct FileInfo File;
extern struct BootRecord Boot;

VS1001Init();
ByteSend = 0;
NextCluster = File.FirstClust;
while (1)
 	  {
	  LBA = Clust2LBA(NextCluster);
	  for (i=0;i<Boot.SecPerClust;i++)
	  	  {
		  ata_read_sector_byte(0, LBA+i, 0, 512, (unsigned char*)&buffer);
		  for (j=0;j<Boot.BytesPerSec;j=j+32)
			  {
			  TimeOut = 0;
			  while (!((*(volatile unsigned char *)0x36) & 0x80))
			  		{
 asm("wdr");
					if (DoTask((int)Percent) == 1) return 0;
					TimeOut++;
					if (TimeOut > 100000) return 0;
					}
			  VS1001_Stream(&buffer[j],32);
			  }
		  }
	  ByteSend += (Boot.BytesPerSec * Boot.SecPerClust);
	  Percent = (ByteSend / (File.FileSize / 100));
	  NextCluster = GetNextCluster(NextCluster);
	  if (NextCluster > 0x0ffffff6) break;
	  }
return 1;
}




int DoTask(int Percent)
{
extern unsigned char text[255];
static int LastPercent;

if ((Percent != LastPercent) && (Percent < 100))
   {
   LastPercent = Percent;
   GotoXY(2,5);
   sprintf(&text[0],"Percent = %d\0",Percent);
   tx_string(1,&text[0]);
   }

if (is_char(1))
   {
   if (rx_char(1) == '5') return 1;
   }
return 0;
}

⌨️ 快捷键说明

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