📄 main.c
字号:
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 + -