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

📄 main.c

📁 mp3播放器软件
💻 C
📖 第 1 页 / 共 3 页
字号:
   /*=============================================================================
                                       Main Program
                                      T-Square Design
===========================================================================*/
#pragma code debug small
#define DEBUG_KEY
#define CHINESE
#include<stdio.h>
#include<reg52.h>
#include<string.h>
#include<stdlib.h>
#include<MATH.h>
#include<absacc.h>
#include<intrins.h>
#include<CTYPE.h>
#if 0
#define KEY_PLUS	5
#define KEY_DEC		9

#define KEY_MENU 	6
#define KEY_AB		10

#define KEY_STOP	89

#define KEY_UP		13
#define KEY_DOWN	14

#define KEY_PLUS1	KEY_PLUS+0x20
#define KEY_DEC1	KEY_DEC+0x20

#define KEY_PRE		KEY_UP
#define KEY_NEXT 	KEY_DOWN

#define KEY_FB		KEY_UP+0x20
#define KEY_FF	 	KEY_DOWN+0x20

#define KEY_FB_OFF		KEY_UP+0x40
#define KEY_FF_OFF	 	KEY_DOWN+0x40

#define KEY_OFF		KEY_MENU+0x20
#endif
#include"define.h"
#include"function.h"
#include"key.h"
#include"key1.c"
#include"flash.h"
#include"flash64.c"
#include"faccess.h" 
#include"faccess2.c"
#include"lcd.c"
//=============================================================================
//variable for debug
//=============================================================================
#define BK_ON		XBYTE[EGPIO_OUT+3]=XBYTE[EGPIO_OUT+3]|0X04
#define BK_OFF		XBYTE[EGPIO_OUT+3]=XBYTE[EGPIO_OUT+3]&0xfb
//#define Flash_64M
//58pin,gpio26.
#define GA 1280
#define GD 1856
#define BCD
#define VOLT		65*32+2
#define MP3_24DEC	28*32
#define I2S		65*32
#define ROCK		66*32
#define POP		    (66*32)+2
#define JAZZ		(66*32)+4
#define CLASSIC		(66*32)+6
#define BASS		(66*32)+8
#define PLAYMODE  	0
#define STOPMODE  	4
#define PAUSEMODE 	5
#define RECMODE     1
#define PLAYON		(97*32)+2
#define CLOSETIME   20000
#define POWER_OFF	XBYTE[EGPIO_OUT+3]=XBYTE[EGPIO_OUT+3]&0xfd
xdata unsigned char Volt;
//=============================================================================
//=============================================================================
#ifdef CHINESE
code char  *Menu[6] = {"音乐","录音","背光","删除","内存信息","返回"};
code char  *BkMenu[5] = {"关闭","5 秒","10 秒","15 秒","20 秒"};
#else
code char  *Menu[6] = {"MUSIC","RECORD","BACKLIGHT","DELETE FILE","MEMORY INFO","RETURN"};
code char  *BkMenu[5] = {"OFF","5 SEC","10 SEC","15 SEC","20 SEC"};
#endif
xdata char  **MenuPo;
xdata unsigned char conserve = 0;
xdata unsigned char conserve1 = 0;
//xdata struct PlayList 
xdata struct PlayList FcbTable;
xdata struct File PlayFile;//,Point2;
xdata struct t2time CurrTime=0;
//////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/*MP3 INITIAL STATUS*/
bit	  CloseFlg = 0;
bit   Power_Off= 0;
bit	  PlayModeReq = 1;			
bit	  BkMode = 0;
bit	  BatTest = 0;
xdata unsigned int		BattTestTime = 0;
xdata unsigned int		CloseTime = 0;
xdata unsigned int      BackLightTime;
xdata unsigned char     BackLight;
xdata unsigned char     BackTime = 0;
xdata unsigned char	    CurrFileType=4;//1 MP3,2 PCM,4 G72,0 nothing
xdata unsigned short 	CurrOpenFileNo=0;
xdata unsigned char 	BattState=3;//0: full, 1: 3/4 full 2: 1/2 full 3:1/4 full 4:pull down
xdata unsigned char     WorkState=0;    
unsigned short    	Command=0;                      //command dsp send to mcu

xdata unsigned char    	Ms1Count=50;                    //count 1ms number
unsigned char     	DmBufPage=0;
xdata unsigned char CurrLrcLength =0;
xdata char  Vol;
xdata unsigned char 	RepMode;//zls 2003/9/5
xdata unsigned char 	EqMode;


xdata unsigned int RepFirstCluster;
///////////////////////////////////////////////////////////////////////////////
xdata unsigned int VolumnConTime;
bit VolumnCh = 0;
bit VolumnDispReq = 0;
bit     TimeDispMFg=0;        //time display munits flag
bit	TimeDispSFg = 0;		//time display second flag
bit	TimeDispHFg = 0;
bit     DataRequestFg=0;        //DSP data request interrupt flag
bit     OpenPlayFile=0;	//0:none open music file,1: opend music file
bit     InitStateFg=1;
bit     PlayFileEndF=0;
//bit 	PlayFileEndB=0;
bit     InitLrcFg=1;
///////////////////////////////////////////////////////////////////////////////
//bit  ProcWordDisp(char *String,unsigned char Page,unsigned char Column_Length,bit en_ch,bit Mode);
bit  ProcWordDisp(char *String,unsigned char Page,unsigned char Column_Length,unsigned char Width,bit Mode);
//void  InitDisplay(void);
void Get_Data(unsigned char* DispBuff,unsigned char String_Len,unsigned char Width,bit reload);
xdata unsigned char Buf[16];
//xdata unsigned char DispBuff[64];
//xdata unsigned char PageLine;
bit	LineA = 0;
bit	MenuReq = 0;
xdata unsigned char FileArrg[99] = 0;
xdata unsigned char MenuKey = 0;
xdata unsigned char Line1;
xdata unsigned char Line2;
xdata unsigned char SelectLine = 1;
xdata unsigned char  MenuItem = 0;
xdata unsigned char	 MenuNum = 0;
xdata unsigned char buffer[216];//store 8 data of display
xdata unsigned char EndLoop = 0;
xdata unsigned char buff_addr =0;
xdata unsigned char DispLength = 0;
xdata unsigned char StringLength = 0;
bit ModeDispReqFg=0;
bit BattDispReqFg=0;
//sbit    Bk = P3^1;
//sbit	Key_Lock = P3^3;
//sbit 	POWER = P3^0;
//sbit	WP = P3^0;

//bit	StartLrcFg=1;
bit	  Recing = 0;
xdata char Playing = 0;	//0:stop,1:play,2:pause
xdata unsigned int	NextCluster;
xdata int	MenuConTime;
char IdmaRw = 0;	//0:write to DSP,1:read from DSP
void Delay(unsigned char);
//extern char DownloadDsp(struct File *F,unsigned short Len,unsigned short DAddr,unsigned short BAddr);
extern unsigned short DownloadDsp(unsigned short F,unsigned short Len,unsigned short DAddr,unsigned short BAddr);
extern char LoadDspPm(unsigned int ProgramName);
//extern char LoadDspPm(char* ProgramName);
extern void SendCmd(unsigned short Command);
extern bit	Key;
void  ProcMenu(void);
//void  ProcBkLight(void);
void  ProcRep(void);
void  ProcDelFile(void);
void  DispMemInfo(void);
void  ProcVolumnDisp(void);
void BattTest(void);
void PowerOff(void);
void PlayInitial(unsigned char);
unsigned int ExternDir(unsigned int FirstCluster);
void WriteEn(char*,unsigned char ,unsigned char);
void PlayInitial(unsigned char No)
{
	if(Recing)
		WorkState = RECMODE;
	else{
		if(Playing == 0)
		{
			WorkState = STOPMODE;
			CloseFlg = 1;
			CloseTime = CLOSETIME;
		}else{
			if(Playing == 1)
			{
				WorkState = PLAYMODE;
			}else{
				WorkState = PAUSEMODE;
				CloseFlg = 1;
				CloseTime = CLOSETIME;
			}
		}
	}
	if(TotalFile==0)
	{
		/*strcpy(Buf,"NO REC FILE");
		WriteEng(6,10);*/
		ClearLcdRam(0x70);
		WriteEn("No REC FILE1",5,10);
		return;
	}
		strcpy(Buf,"RECORD");
		Buf[6] = 0x20;
		Buf[7] = 0x20;
		Buf[8] = No/10+0x30;
		Buf[9] = No%10+0x30;
		Buf[10] = 0;
		WriteEng(1,0);
		ModeDispReqFg = 1;
		Buf[0] = '0';
		Buf[1] = '0';
		Buf[2] = ':';
		Buf[3] = 0;
		WriteEng(7,0);
		Buf[2] = 0;
		WriteEng(7,18);
	
}
//systemp initial
//output none
void Delay(unsigned char Time)
{
	while(Time--);
}
void ProcVolumnDisp(void)
{
	unsigned char i;
	unsigned char DotVlu;
	unsigned char StartColum;
	unsigned char Volumn;
	StartColum = 15;
	Volumn = Vol+5;
	ClearLcdRam(0x70);
	strcpy(Buf,"Vol");
	WriteEng(1,StartColum);
	InitLcdCfg(0,StartColum);
	DotVlu = 0xff;
	XBYTE[LCD_CMDH] = 0x42;//start to write data	
	for(i = 0;i<Volumn+Volumn/3;i+=4)
 	{
 		WriteData(DotVlu);
 		Delay(0x10);
 		WriteData(DotVlu);
 		Delay(0x10);
 		WriteData(0x00);
 		Delay(0x10);
 	}
 	if(Volumn>20)
 	{
 		InitLcdCfg(1,StartColum+18);
 		DotVlu = 0xff;
 		XBYTE[LCD_CMDH] = 0x42;
 		for(i = 25;i<Volumn+Volumn/3;i+=4)
 		{
 			WriteData(DotVlu);
 			Delay(0x10);
 			WriteData(DotVlu);
 			Delay(0x10);
 			WriteData(0x00);
 			Delay(0x10);
 		}
 		InitLcdCfg(2,StartColum+18);
 		DotVlu = 0;
 		XBYTE[LCD_CMDH] = 0x42;
 		for(i = 25;i<Volumn+Volumn/3;i+=4)
 		{
 			WriteData(DotVlu);
 			Delay(0x10);
 			WriteData(DotVlu);
 			Delay(0x10);
 			WriteData(0x00);
 			Delay(0x10);
 			DotVlu<<=1;
 			DotVlu|=0x01;
 		}
 	}
 	if(Volumn>42)
 	{
 		InitLcdCfg(3,StartColum+45);
 		DotVlu = 1;
 		XBYTE[LCD_CMDH] = 0x42;
 		for(i = 59;i<Volumn+Volumn/3;i+=4)
 		{
 			WriteData(DotVlu);
 			Delay(0x10);
 			WriteData(DotVlu);
 			Delay(0x10);
 			WriteData(0x00);
 			Delay(0x10);
 			DotVlu<<=1;
 			DotVlu|=0x01;
 		}
 	}
}	
void Load(unsigned short Addr)
{
	//xdata unsigned short Blo;
	//xdata unsigned short Pa;
	XBYTE[EGPIO_OUT]=XBYTE[EGPIO_OUT]&0Xef; //reset DAC and ADC
	//Blo = Addr /32;
	//Pa = Addr % 32;
	EA = 0;
	MARK=0xaa;
	CARD_NUMBER=0x11;//0x20 or 0x30
	READ_BLOCK_H=0x00; 
	READ_BLOCK_M=0x00;
	READ_BLOCK_L=Addr / 32;
	B_TO_P_NUMBER=32;
	READ_PAGE_ADDR=Addr % 32;
	READ_LEN=48;
	XBYTE[0xff] = 3;
	Bl();
}
void  ProcMenu(void)
{
	bit MenuDispReq = 0;
	bit	MenuEndReq  = 0;
	MenuConTime = 2000;
	if(MenuItem == 0)
	{
		ClearLcdRam(0x00);
		MenuItem = 1;
		MenuPo = Menu;
		MenuNum = 6;
		LineA = 0;
		Line1 = 0;
		Line2 = 1;
		MenuKey = 0;
		MenuDispReq = 1;
	}
	switch(MenuKey)
	{
		case KEY_NEXT: 
			if(LineA == 1)
			{
				Line1 = Line2;
				if(Line2 == MenuNum-1)
					Line2 = 0;
				else Line2++;
			}else LineA = 1;
			MenuDispReq = 1;
			break;
		case KEY_PREV:
			if(LineA == 0)
			{
				Line2 = Line1;
				if(Line1 == 0)
					Line1 = MenuNum-1;
				else Line1--;
			}else LineA = 0;
			MenuDispReq = 1;
			break;
		case KEY_MODE:		
			if(LineA)
				 SelectLine = Line2;
			else SelectLine = Line1;
			if(MenuItem == 1)
				{
				switch(SelectLine)
				{
					case 0x00:
							SendCmd(STOP);
							McuRw;
							
	                        
							XBYTE[0x1000] = RepMode;
                            XBYTE[0x1001]=Vol;
                            XBYTE[0x1002] = BackLight;
                            XBYTE[0x1003] = EqMode;
                            SmcBlockErase(99);
                            MemoryRw;
                            SmcPageProgram(3199);
							McuRw;
							//XBYTE[EGPIO_OUT] &=0x6f;//set low 1770 power on 
							Load(10*32);//load mp3 mode
					case 0x01:
							SendCmd(STOP);
							ClearLcdRam(0x70);
							if(TotalFile == 99)
								break;
							Recing = 1;
							Playing = 0;
							TotalFile++;
							ModeDispReqFg = 1;
							for(i = 0;i <99;i++)
							{
								if(FileArrg[i]==0)
								{
									FileArrg[i] =1;
									break;
								}
							}
							i++;
							Buf[0] = 'R';
							Buf[1] = i/10 + 0x30;
							Buf[2] = i%10 + 0x30;
							Buf[3] = '.';
							Buf[4] = 'G';
							Buf[5] = '7';
							Buf[6] = '2';
							Buf[7] = 0;
							XBYTE[EGPIO_OUT+2]=XBYTE[EGPIO_OUT+2]&0X7f;//gpio23,pin44,adc_pw low,disable battle detect.
							while(Fcreat(&PlayFile,Buf,RepFirstCluster)==FALSE)
								ExternDir(RepFirstCluster);
							PlayInitial(i);
							LoadDspPm(GA);//GA is page address.
							//LoadDspPm("GA.NEW");
							//LoadDspPm("GA.NEW");
							Command = 0xab00;
							DataRequestFg = 0;
							DmBufPage = 0;							
							MenuItem = 0;
							conserve1 = 0;
							CurrOpenFileNo = i;
							return;
							break;
					case 0x02:
							MenuPo = BkMenu;
							MenuNum = 5;
							LineA = 0;
							Line1 = BackLight;
							if(Line1 == MenuNum	-1)
									Line2 = 0;
							else    Line2 = Line1+1;				
							MenuDispReq = 1;
							MenuItem = 3;
							break;
					case 0x03:
							ProcDelFile();
							MenuEndReq = 1;							
							break;
					case 0x04:
							DispMemInfo();
							break;							
					case 0x05:
							MenuEndReq = 1;
							break;
				    }
				}
				else if(MenuItem == 3)
					{
						BackLight = SelectLine;
						MenuEndReq = 1;
					}
					
					
	}					
	if(MenuDispReq)
	{
		ET0 = 0;
		StringLength = 0;
		ProcWordDisp(MenuPo[Line1],3,0,12,~LineA);
		StringLength = 0;
		ProcWordDisp(MenuPo[Line2],1,0,12,LineA);
		ET0 = 1;
	}
	if(MenuEndReq)
	{
		MenuItem = 0;
		conserve1 = 0;
		ClearLcdRam(0x71);
		PlayInitial(CurrOpenFileNo);
	}
	MenuKey = 0;
}	
void ProcDelFile()
{
	xdata unsigned char i;
	xdata unsigned char j;
	ClearLcdRam(0x70);
	SendCmd(STOP);
	Command = 0;
	TimeDispSFg = 0;
	TimeDispMFg = 0;
	CurrTime.Second = 0;
	CurrTime.Minute = 0;
	Playing = 0;
	if(TotalFile == 0)
	{
		//PlayInitial(0);
		return;
	}
	WriteEn("Del",6,10);
	WriteEn("Y:MODE KEY",7,28);
	WriteEn("N:OTHER KEY",1,28);
	while(1)
	{
		ScanKey();
		GetKeyValue();
		if(NewKey !=0)
		{
			    if(NewKey == KEY_MODE)
				{
					j = 0;
					for(i = 0;i<99;i++)
					{
						if(FileArrg[i] ==1)
						{
							j++;
							if(j == CurrOpenFileNo)			
							break;
						}
					}
					i++;
					Buf[0] = 'R';
					Buf[1] = i/10 + 0x30;
					Buf[2] = i%10 + 0x30;
					Buf[3] = '.';
					Buf[4] = 'G';
					Buf[5] = '7';
					Buf[6] = '2';
					Buf[7] = 0;
					DelFile(Buf,RepFirstCluster);					
					for(i=0;i<99;i++)
    				{
    					FileArrg[i] = 0;
    				}
    				TotalFile=Traverse(0,4,RepFirstCluster);
    				if(TotalFile != 0)
						CurrOpenFileNo = 1;
    				//ClearLcdRam(0x70);
    				//PlayInitial(CurrOpenFileNo);
				}
				NewKey = 0;
				return;
		}
		
	}

⌨️ 快捷键说明

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