📄 main.c
字号:
/*******************************Copyright (c)***************************************
录音钢琴主程序.
************************************************************************************/
#include "common.h"
#include "file.h"
#include "midi.h"
#include "hpi.h"
#include "lcd.h"
#include "usb.H"
/*-----------------------------------------------------------------------------------
名称: void SystemInital(void)
功能: 系统初始化.
-----------------------------------------------------------------------------------*/
void SystemInital(void)
{
AUXR = 3; //外部RAM,平时ALE无输出
SetSystemTimer0(); //设定系统定时器0
SetSystemUart(); //设定串行端口
RamAreaSelect(0); //RAM区域选择
FileListInital(); //文件管理初始设定
IrqEnable(); //中断允许
}
/*-----------------------------------------------------------------------------------
名称: void main(void)
功能: 主程序.
-----------------------------------------------------------------------------------*/
void main(void)
{
SystemInital(); //系统初始化
SL811Init(); //811 初始化
LcdInital(); //LCD 初始化
LcdDisplayLogo(); //LCD显示Logo图形
PianoSensorModify(); //钢琴传感器调整
LcdDisplayMenu(0); //LCD显示菜单图形
while(GetKeyBoard()); //键盘数据
SysWorkStatus = SYS_WORK_MENU_REC; //录音菜单状态
while(1)
{
SystemRtcTask(); //系统时钟任务
CheckUsbDevice(); //检测USB设备
switch(SysWorkStatus)
{
case SYS_WORK_MENU_REC: //录音菜单状态
switch(GetKeyBoard())
{
case KEY_ENT:
LcdClear();
LcdDisplayAscii0816(0,0,0,128);
LcdDisplayAscii0816String(0,20,0,"Record...");
LcdDisplayTempo();
LcdDisplayVolume();
ResetSystemRtc();
LcdDisplayClock(2,0,GetSystemRtc());
SoundTempoChange();
RecMidiStart();
SysWorkStatus = SYS_WORK_RUN_REC;
break;
case KEY_UP:
case KEY_DOWN:
if(FlagRecEnd)
{
LcdClear();
LcdDisplayAscii0816(0,0,0,128);
LcdDisplayAscii0816String(0,20,0,"Rec Player...");
LcdDisplayVolume();
ResetSystemRtc();
LcdDisplayClock(2,0,GetSystemRtc());
PlayerStart();
SysWorkStatus = SYS_WORK_REC_PLAY;
}
break;
case KEY_LEFT:
LcdClear();
LcdDisplayMenu(3);
SysWorkStatus = SYS_WORK_MENU_SET;
break;
case KEY_RIGHT:
LcdClear();
LcdDisplayMenu(1);
SysWorkStatus = SYS_WORK_MENU_SAVE;
break;
}
break;
case SYS_WORK_MENU_SAVE: //存储菜单状态
switch(GetKeyBoard())
{
case KEY_ENT:
if(FlagRecEnd)
{
LcdClear();
LcdDisplayInputTextInital();
SysWorkStatus = SYS_WORK_RUN_SAVE;
}
break;
case KEY_LEFT:
LcdClear();
LcdDisplayMenu(0);
SysWorkStatus = SYS_WORK_MENU_REC;
break;
case KEY_RIGHT:
LcdClear();
LcdDisplayMenu(2);
SysWorkStatus = SYS_WORK_MENU_PLAY;
break;
}
break;
case SYS_WORK_MENU_PLAY: //放音菜单状态
switch(GetKeyBoard())
{
case KEY_ENT:
LcdClear();
LcdDisplayPlaySelectMenu(0);
SysWorkStatus = SYS_WORK_SEL_RAM_PLAY;
break;
case KEY_LEFT:
LcdClear();
LcdDisplayMenu(1);
SysWorkStatus = SYS_WORK_MENU_SAVE;
break;
case KEY_RIGHT:
LcdClear();
LcdDisplayMenu(3);
SysWorkStatus = SYS_WORK_MENU_SET;
break;
}
break;
case SYS_WORK_MENU_SET: //设定菜单状态
switch(GetKeyBoard())
{
case KEY_ENT:
LcdClear();
LcdDisplayParamMenu(0);
SysWorkStatus = SYS_WORK_SET_MENU_0;
break;
case KEY_LEFT:
LcdClear();
LcdDisplayMenu(2);
SysWorkStatus = SYS_WORK_MENU_PLAY;
break;
case KEY_RIGHT:
LcdClear();
LcdDisplayMenu(0);
SysWorkStatus = SYS_WORK_MENU_REC;
break;
}
break;
case SYS_WORK_RUN_REC: //录音工作状态
if(!RecMidiRun()) //MIDI文件记录
{
RecMidiEnd();
LcdClear();
LcdDisplayMenu(0);
SysWorkStatus = SYS_WORK_MENU_REC;
break;
}
SoundTempoRun(); //声卡节拍器运行
LcdDisplayClock(2,0,GetSystemRtc()); //LCD显示时钟
switch(GetKeyBoard())
{
case KEY_ENT:
RecMidiEnd();
LcdClear();
LcdDisplayMenu(0);
SysWorkStatus = SYS_WORK_MENU_REC;
break;
case KEY_UP:
case KEY_UP_ON:
if(FlagTempo)
{
if(ParamaTempo<240)
{
ParamaTempo ++;
SoundTempoChange();
LcdDisplayTempo();
}
}
break;
case KEY_DOWN:
case KEY_DOWN_ON:
if(FlagTempo)
{
if(ParamaTempo>40)
{
ParamaTempo --;
SoundTempoChange();
LcdDisplayTempo();
}
}
break;
case KEY_LEFT:
case KEY_LEFT_ON:
if(ParamaVolume>0)
{
ParamaVolume --;
SoundVolumeAdj();
LcdDisplayVolume();
}
break;
case KEY_RIGHT:
case KEY_RIGHT_ON:
if(ParamaVolume<127)
{
ParamaVolume ++;
SoundVolumeAdj();
LcdDisplayVolume();
}
break;
}
break;
case SYS_WORK_RUN_SAVE: //存储工作状态
switch(GetKeyBoard())
{
case KEY_ENT:
if(InputTableRow==0)
{
if(!FileNameCheckMemory(InputFileName))
InputNameLen = 0;
LcdClear();
FlagSaveSel = false;
LcdDisplaySaveSelect();
SysWorkStatus = SYS_WORK_SAVE_ENT;
}
else
{
if(InputNameLen<8)
{
InputFileName[InputNameLen++] = TextInTabel[(InputTableRow-1)*17+InputTableCol];
LcdDisplaytInputFileName(42);
}
LcdDisplayCursor(0);
LcdDisplayAsciiTabel(0xFF);
InputTableRow = 0;
}
break;
case KEY_LEFT:
if(InputTableRow!=0)
{
if(InputTableCol)
InputTableCol --;
else
InputTableCol = 16;
LcdDisplayCursor(1);
LcdDisplayAsciiTabel((InputTableRow-1)*17+InputTableCol);
}
else
{
if(InputNameLen)
{
InputFileName[InputNameLen-1] = ' ';
InputNameLen --;
LcdDisplaytInputFileName(42);
LcdDisplayCursor(0);
}
}
break;
case KEY_RIGHT:
if(InputTableRow!=0)
{
if(InputTableCol<16)
InputTableCol ++;
else
InputTableCol = 0;
LcdDisplayCursor(1);
LcdDisplayAsciiTabel((InputTableRow-1)*17+InputTableCol);
}
break;
case KEY_UP:
if(InputNameLen<8)
{
if(InputTableRow)
InputTableRow --;
else
InputTableRow = 3;
if(InputTableRow==0)
{
LcdDisplayAsciiTabel(0xFF);
LcdDisplayCursor(0);
}
else
{
LcdDisplayCursor(1);
LcdDisplayAsciiTabel((InputTableRow-1)*17+InputTableCol);
}
}
break;
case KEY_DOWN:
if(InputNameLen<8)
{
if(InputTableRow<3)
InputTableRow ++;
else
InputTableRow = 0;
if(InputTableRow==0)
{
LcdDisplayAsciiTabel(0xFF);
LcdDisplayCursor(0);
}
else
{
LcdDisplayCursor(1);
LcdDisplayAsciiTabel((InputTableRow-1)*17+InputTableCol);
}
}
break;
}
break;
case SYS_WORK_SEL_RAM_PLAY: //放音选择RAM状态
switch(GetKeyBoard())
{
case KEY_ENT:
if(MemMiscCnt=FileSearchMemory())
{
MemMiscPt=0;
FileOpenMemory(MemMiscPt);
LcdClear();
LcdDisplaytFileName(MemMiscPt+1,&FileList[MemMiscPt].Name);
LcdDisplayVolume();
ResetSystemRtc();
LcdDisplayClock(2,32,GetSystemRtc());
PlayerStart();
SysWorkStatus = SYS_WORK_RUN_PLAY;
}
break;
case KEY_UP:
LcdClear();
LcdDisplayPlaySelectMenu(2);
SysWorkStatus = SYS_WORK_SEL_EXT_PLAY;
break;
case KEY_DOWN:
LcdClear();
LcdDisplayPlaySelectMenu(1);
SysWorkStatus = SYS_WORK_SEL_USB_PLAY;
break;
}
break;
case SYS_WORK_SEL_USB_PLAY: //放音选择USB状态
switch(GetKeyBoard())
{
case KEY_ENT:
MemMiscCnt = ReadtUsbList(InOutBuf);
if(MemMiscCnt!=0)
{
MemMiscPt = 0;
if(FileOpenDisk(MemMiscPt))
{
LcdClear();
LcdDisplaytFileName(MemMiscPt+1,InputFileName);
LcdDisplayVolume();
ResetSystemRtc();
LcdDisplayClock(2,32,GetSystemRtc());
PlayerStart();
SysWorkStatus = SYS_WORK_USB_PLAY;
}
}
break;
case KEY_UP:
LcdClear();
LcdDisplayPlaySelectMenu(0);
SysWorkStatus = SYS_WORK_SEL_RAM_PLAY;
break;
case KEY_DOWN:
LcdClear();
LcdDisplayPlaySelectMenu(2);
SysWorkStatus = SYS_WORK_SEL_EXT_PLAY;
break;
}
break;
case SYS_WORK_SEL_EXT_PLAY: //放音选择退出状态
switch(GetKeyBoard())
{
case KEY_ENT:
LcdClear();
LcdDisplayMenu(2);
SysWorkStatus = SYS_WORK_MENU_PLAY;
break;
case KEY_UP:
LcdClear();
LcdDisplayPlaySelectMenu(1);
SysWorkStatus = SYS_WORK_SEL_USB_PLAY;
break;
case KEY_DOWN:
LcdClear();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -