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

📄 main.c

📁 mp3播放器软件
💻 C
📖 第 1 页 / 共 3 页
字号:
		if(DispLength!=0)
			buff_addr+=(Width<<1);
	}
	InitLcdCfg(Page-1,Column);
	for(Colu = 1;Colu<Width*Length;Colu+=2)
	{
		WriteData(buffer[buff_addr+Colu]^conserve1);
	}
	for(;Colu<224;Colu+=2)
	{
		WriteData(0^conserve1);
	}
	InitLcdCfg(Page,Column);
	for(Colu = 0;Colu<Length*Width;Colu+=2)
	{
		WriteData(buffer[buff_addr+Colu]^conserve);
	}
	for(;Colu<224;Colu+=2)
	{
		WriteData(0^conserve);
	}
	if(DispLength==StringLength)
	{
		EndLoop = 1;
	}
	if(Column ==0)
		DispLength+=2;
	if(Length1<=18)return 1;
	return 0;
}
/////////////////////////////////////////////////////////////////////////////
void    ProcDisplay()
{
       	unsigned char Column;
       	unsigned char ii;
       	if(VolumnCh)
       	{
    	   	if(VolumnDispReq)
       		{
       			ProcVolumnDisp();
       			VolumnDispReq = 0;
       		}else
       		{
       			if(VolumnConTime==0)
       			{
       				ClearLcdRam(0x40);
       				VolumnCh = 0;
					ModeDispReqFg = 1;       				
       				
					
       				PlayInitial(CurrOpenFileNo);
    	   		}
    	   	}
       	}else{
       		if(MenuReq)
       		{
       				ProcMenu();
       				MenuReq = 0;
 			}
       		if((ModeDispReqFg==1)&&(MenuItem==0))
       		{       
       			MemoryRw;
       			SmcRead(PLAYON);
       			McuRw;
       			InitLcdCfg(7,58);
       			for(Column = 0;Column <15;Column++)
       			{
              		WriteData(XBYTE[16*WorkState+0x1000+Column]);
       			}
       			ModeDispReqFg=0;
       			if(CurrFileType == 1)
       				WriteEn("Mp3",7,73);
       			else 
       				WriteEn("WMA",7,73);
       		}
       		if(MenuItem==0)
       		{
       			if(TimeDispMFg)
				{
					Buf[0] = '0' +(CurrTime.Minute>>4);
					Buf[1] = '0'+ (CurrTime.Minute & 0x0f);
					Buf[2] = ':';
					Buf[3] = 0;
					WriteEng(7,18);
					TimeDispMFg = 0;
				}
				if(TimeDispSFg)
				{
					Buf[0] = '0' +(CurrTime.Second>>4);
					Buf[1] = '0'+ (CurrTime.Second & 0x0f);
					Buf[2] = 0;
					WriteEng(7,36);
					TimeDispSFg = 0;
				}
			}
			
       	}
       	
       	
  
} 
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
bit    ProcPlay()      //whenever in orginal or  repeat play
{ 
	xdata unsigned short j;
	xdata unsigned char i;
	if(OpenPlayFile == 0)
        {  
            i = 0;
            Buf[0] = 'R';
            for(j = 0;j < 99;j++)
            {
            	if(FileArrg[j] == 1)
            	{
            		i++;
            		if(i == CurrOpenFileNo)
            			break;
            	}
            }
            j++;
            Buf[1] = j/10 + 0x30;
            Buf[2] = j%10 + 0x30;
            Buf[3] = '.';
            Buf[4] = 'G';
            Buf[5] = '7';
            Buf[6] = '2';
            Buf[7] = 0;
            if(OpenFileByName(&PlayFile,Buf,RepFirstCluster)==FALSE)return FALSE;
            OpenPlayFile = 1;        
       }
        return 1;
}
//////////////////////////////////////////////////////////////////////////////
void ProcDspData()
{
	if(Playing)
	{
		IdmaRw = 0;       
        if(Fread((char xdata *)0x1000,512,&PlayFile)!=1)
       		DownloadDsp(&PlayFile,256, 0x4000+DmBufPage*0x100,0);
       	else	
       	{
       		PlayFileEndF = 1;
       	}
    }
    if(Recing)
    {
    	IdmaRw = 1;
		DownloadDsp(0,256, 0x4000+DmBufPage*0x100,0);
    	if(Fwrite(&PlayFile)==FALSE)
    	{
    		SendCmd(STOP);
    		ClearLcdRam(0x80);
            Fclose(&PlayFile);
            /*strcpy(Buf,"Disk Over");
            WriteEng(7,10);*/
            WriteEn("Disk Erro!",7,10);
            /*strcpy(Buf,"PLS CHECK DISK");
            WriteEng(6,0);*/
            WriteEn("Pls Check Disk",6,0);
            Recing = 0;
            WorkState = STOPMODE;
    //        return 0;
        }
    }
    SendCmd(BUF0_OK + DmBufPage);
    if(DmBufPage)
       	  DmBufPage=0;
    else
       	  DmBufPage++;									
   //return 0;
}

void InitLcdCfg(unsigned char Page,unsigned char waddr)
{
	WriteCmd(0xb0+Page);	//page
	LcdBusy();							
	WriteCmd(0x10|((waddr+0x0)>>4));//column address 
	LcdBusy();	
	WriteCmd((waddr+0x0)&0x0f);
	LcdBusy();				
	XBYTE[LCD_CMDH] = 0x42;				
}

void WriteEng(unsigned char Row,unsigned char Col)
{
	xdata unsigned char i,C1 = 0;
	xdata unsigned short Offset;
	InitLcdCfg(Row,Col);			
	XBYTE[LCD_CMDH] = 0x42;//start to write data	
	while (Buf[C1] != 0)
	{
		Offset = Buf[C1]*8;//count offset(english)			
		MemoryRw;
		SmcRead(36*32+(Offset>>9));
		McuRw;
		for(i = 0;i <6;i++)
		{
			WriteData(XBYTE[0x1000+i+(Offset%512)]);              
		}
		C1++;
	}	
}
void WriteEn(char* string,char Row,char Clou)
{
	strcpy(Buf,string);
	WriteEng(Row,Clou);
}
void BattTest(void)
{
	xdata unsigned char B;
	xdata unsigned int i;
	//LoadDspPm(VOLT);
	for(i = 0; i<200;i++)
	{
		Delay(250);
	}
	SendCmd(0xbd00);
	B = XBYTE[0x200];
	Volt = B;
	if (B<=135) BattState = 0xff;
	else if (B<=150) BattState = 0;
	else if (B<=160) BattState =1;
	else if (B<=170) BattState = 2;
	else if (B<=180) BattState = 3;
	else if (B>=180) BattState=4;
	BattDispReqFg = 1;
	/*Buf[0] = B/100;
	Buf[1] = B/10 - Buf[0]*10;
	Buf[2] = B%10;
	Buf[0] += 0x30;
	Buf[1] += 0x30;
	Buf[2] += 0x30;
	Buf[3] = 0;
	WriteEng(7,32);*/
	//LoadDspPm(MP3_24DEC);

}
void PowerOff(void)
{
	xdata unsigned int i;
	SendCmd(STOP);
	if(Recing)
	{
		ProcDspData();
		Fclose(&PlayFile);
    }
	ClearLcdRam(0x80);
	WriteEn("POWER OFF",6,20);
	MemoryRw;
	SmcRead(3199);
	McuRw;
    XBYTE[0x1001] = Vol;
    XBYTE[0x1002] = BackLight;
    SmcBlockErase(99);
    MemoryRw;
    SmcPageProgram(3199);
	for(i = 0;i<1000;i++)
	{
		Delay(250);
	}
	ClearLcdRam(0x80);
	POWER_OFF;	
	BK_OFF;
	while(1);
}
unsigned int FcreatDir(char* Name)
{
	xdata struct LogicAddress LogicAddr; 
	xdata unsigned int i;
	xdata unsigned int Cluster;
	xdata unsigned int Count;
	Cluster = SearchUnusedCluster(0);
	ReqDiskSpace(Cluster,0,1,0);
	LogicAddr.Cluster = 1;
	LogicAddr.Sector = 0;
	while(1)
	{
		MemoryRw;
		ReadLogicPage(&LogicAddr);
		McuRw;
		for(i = 0;i<16;i++)
		{
			if((XBYTE[0x1000 + (i<<5)] == 0)||(XBYTE[0x1000+(i<<5)] == 0xe5))
			{
				for(Count = 0;Count < 12;Count++)
				{
					XBYTE[0x1000 + (i<<5) + Count] = ' ';
				}
				//strcpy(&XBYTE[0x1000 + (i<<5)],Name);
				for(Count = 0;Count < 8;Count++)
				{
					if(Name[Count])
						XBYTE[0x1000+(i<<5) + Count] = Name[Count];
					else break;
				}
				XBYTE[0x1000 + (i <<5) + 0x0b] = 0x10;
				XBYTE[0x1000 + (i <<5) + 0x0c] = 0x08;
				XBYTE[0x1000 + (i <<5) + 0x0d] = 0x7a;
				XBYTE[0x1000 + (i <<5) + 0x0e] = 0xe7;
				XBYTE[0x1000 + (i <<5) + 0x0f] = 0x93;
				XBYTE[0x1000 + (i <<5) + 0x1a] = Cluster;
				XBYTE[0x1000 + (i <<5) + 0x1b] = Cluster >> 8;
				XBYTE[0x1000 + (i<<5) + 0x1c] = 0;
				XBYTE[0x1000 + (i <<5) + 0x1d] = 0;
				MemoryRw;
				WriteFcb(LogicAddr.Sector);
				McuRw;
				for(i = 0;i<512;i++)
				{
					XBYTE[0x1000 + i] = 0;
				}
				for(Count = 0;Count < 12;Count++)
				{
					XBYTE[0x1000+Count] = ' ';
					XBYTE[0x1020+Count] = ' ';
				}
				XBYTE[0x1000] = '.';
				XBYTE[0x1000+0x0b] = 0x10;
				XBYTE[0x1000+0x1a] = Cluster;
				XBYTE[0x1000+0x1b] = Cluster >> 8;
				XBYTE[0x1020] = '.';
				XBYTE[0x1021] = '.';
				XBYTE[0x1020+0x0b] = 0x10;
				XBYTE[0x1020+0x1a] = 0;
				XBYTE[0x1020+0x1b] = 0;
				LogicAddr.Cluster = Cluster;
				LogicAddr.Sector  = 0;
				MemoryRw;
				WriteLogicPage(&LogicAddr);
				McuRw;
				for(i = 0;i<64;i++)
				{
					XBYTE[0x1000 + i] = 0X0;
				}
				while(1)
				{
					LogicAddr.Sector++;
					if(LogicAddr.Sector == PbrInfo.SectorPerCluster)break;
					MemoryRw;
					WriteLogicPage(&LogicAddr);
					McuRw;
				}
				LogicAddr.Cluster = 0;
				LogicAddr.Sector  = Cluster>>8;
				MemoryRw;
				ReadLogicPage(&LogicAddr);
				McuRw;
				XBYTE[0x1000 + (Cluster&0x00ff)*2 + 1] = 0xff;
				XBYTE[0x1000 + (Cluster&0x00ff)*2] = 0xff;
				MemoryRw;
				WriteFat(LogicAddr.Sector);
				McuRw;
				return Cluster;
			}
		}
		LogicAddr.Sector++;
		if(LogicAddr.Sector == PbrInfo.RootDirEntry)return 0;
	}
}
unsigned int ExternDir(unsigned int FirstCluster)
{
	xdata unsigned int Cluster1;
	xdata unsigned int Cluster;
	xdata unsigned char Sector;
	xdata unsigned int  i;
	xdata struct LogicAddress LogicAddr;
	Cluster1 = FirstCluster;
	while(1)
		{
			Cluster = FindNextCluster(Cluster1);
			if(Cluster >= 0xfff0)
			{
				Cluster  = SearchUnusedCluster(0);
				break;
			}else{
				Cluster1 = Cluster;
			}
		}
	if(!Cluster)return 0;
	LogicAddr.Cluster = Cluster;
	ReqDiskSpace(LogicAddr.Cluster,0,1,0);
	McuRw;
	for(LogicAddr.Sector=0;LogicAddr.Sector < PbrInfo.SectorPerCluster;LogicAddr.Sector++)
	{
		WriteLogicPage(&LogicAddr);
	}
	LogicAddr.Cluster = 0;
	LogicAddr.Sector  = Cluster1 >> 8;
	MemoryRw;
	ReadLogicPage(&LogicAddr);
	McuRw;
	XBYTE[0x1000 + (Cluster1&0x00ff)*2 + 1] = Cluster >>8;
	XBYTE[0x1000 + (Cluster1&0x00ff)*2] = Cluster;
	Sector = Cluster >> 8;
	if(LogicAddr.Sector != Sector)
	{
		MemoryRw;
		WriteFat(LogicAddr.Sector);
		McuRw;
		MemoryRw;
		LogicAddr.Sector = Sector;
		ReadLogicPage(&LogicAddr);
		McuRw;
	}
	XBYTE[0x1000 + (Cluster&0x00ff)*2+1] = 0xff;
	XBYTE[0x1000 + (Cluster&0x00ff)*2]   = 0xff;
	MemoryRw;
	WriteFat(LogicAddr.Sector);
	McuRw;
	return Cluster;
}
	
void main()
{
    unsigned int i;
	
	#ifdef DEBUG_KEY
	unsigned char savedkey;
	#endif   
    IdmaRw = 0;
    SysIni();
    LcdInital();
    SelectCard(1);
    IniLogicDisk();
    
	ProcLoadState(LoadDspPm(I2S));
    LoadDspPm(GD);
    RepFirstCluster = Traverse(0,0x40,1);
    if(RepFirstCluster == 0)
    {
    	 RepFirstCluster = FcreatDir("VOICE");
    	
    }
    for(i=0;i<99;i++)
    {
    	FileArrg[i] = 0;
    }
    TotalFile=Traverse(0,4,RepFirstCluster);
    if(TotalFile != 0)
		CurrOpenFileNo = 1;
    ClearLcdRam(0x80);
    PlayInitial(CurrOpenFileNo);
    XBYTE[EGPIO_OUT+2]=XBYTE[EGPIO_OUT+2]&0X7f; //OPEN A/D
    BattTest();
    XBYTE[EGPIO_OUT+2]=XBYTE[EGPIO_OUT+2]|0x80; //OPEN A/D
    IntrIni();
	write_1770(3,0x89);//1//10001001
	write_1770(1,Vol);
    write_1770(2,Vol);
    while(1)
    {
        	    EA = 0;
                if(DataRequestFg)
                {
                      DataRequestFg=0;
                      ProcDspData();
                      if(Playing)
                      	XBYTE[EGPIO_OUT+2]=XBYTE[EGPIO_OUT+2]&0X7f; //OPEN A/D
    				  if(BattTestTime == 1000)
    				  	{
    				  		BattTest();                  
    				  		BattTestTime = 0;
    				  	}
    				  if(Playing)
    				  	XBYTE[EGPIO_OUT+2]=XBYTE[EGPIO_OUT+2]|0x80; //OPEN A/D
                }
                EA = 1;
                ScanKey();
                GetKeyValue();
     #ifdef DEBUG_KEY
	    ClearLcdRam(0x80);
	    WriteEn("No REC FILE",4,10);
	     if(savedkey!=NewKey)
	     	{
	     	  savedkey=NewKey;
	     	}
	     if(savedkey!=0)
	     	{
	     	
	     	Buf[0] = '0' +(savedkey>>4);	
	     	if((savedkey & 0x0f)>9)
			  Buf[1] = '0'+ (savedkey & 0x0f)+7;
	     	else
	     	  Buf[1] = '0'+ (savedkey & 0x0f);	
			Buf[2] = 0;
			WriteEng(4,10);
			//iteEn("Mp3",7,40);
	     	}
	      //NewKey=0;	
		  //if((NewKey==2)||(NewKey==4)||(NewKey==6)||(NewKey==0x24)||(NewKey==0x22)||(NewKey==0x26))
		   
	#endif
                if(NewKey)
                {
                	CloseFlg = 0;
                }
                if(PlayFileEndF)
                {
                	SendCmd(STOP);
                	Playing = 0;
                	VolumnCh = 0;
                	MenuItem = 0;
                	ClearLcdRam(0x70);
                	PlayInitial(CurrOpenFileNo);
                	PlayFileEndF = 0;
                }
                if(NewKey)
                {           
                     KeyJob();
                     NewKey=0;
                }
                if (Command)
                {
                      ProcCommand(Command);
		      		  Command=0;
            	}
            	if(CloseFlg)
            	{
            		if(CloseTime == 0)
            			//PowerOff();            	
            			Load(32*10);
            	}
        		ProcDisplay();
        		if ((XBYTE[EXT_GPIO_STATUS+3] & 1) == 1)
        		{
	               SendCmd(STOP);
	               if(Recing)
				   {
						ProcDspData();
						Fclose(&PlayFile);
				   }
				   /*ClearLcdRam(0x80);
        		   WriteEn("Usb...",6,20);
        		   XBYTE[0xff] = 3;*/
           		   Load(0);
				}
		}
}		   

⌨️ 快捷键说明

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