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