📄 main.c
字号:
/************************************************************/
/* MP3 Code for M32L */
/* By pasyong */
/* 2006-4 */
/* Base ICC6.31A */
/************************************************************/
#include "info.h"
void Menu_Oper(void); //主目录操作函数,也是系统最顶层的操作函数
void Radio_Play(void); //收音机控制函数,收音机模式时用
void Play_Order(uchar);//mp3控制函数,播放音乐时用
void Vs1003_set(void); //VS1003控制函数,控制vs1003的设置
void Other_Mode(void); //其他模式控制函数,包括游戏和vs1003的设置功能,次级目录函数
//主循环
void main(void)
{
DDRA=0XFF;
init_system();//初始化系统
Menu_Oper();
}
//显示主菜单
void Menu_Show(void)
{
uchar t;
for(t=0;t<4;t++)LCD_write_String(t,12,menu[t],0);//写菜单
}
//显示警告信息
void warningshow(void)
{
Cleardisplay(4);
LCD_write_cstr(1,8,"unitogb.bin Failed!");
delay_ms(2000);
LCD_write_cstr(2,26,"Please Check!");
delay_ms(2000);
Cleardisplay(4);
Menu_Show();
}
//主操作程序
void Menu_Oper(void)
{
uchar temp;
uchar t;
READY=1;
Menu_Show();
while(1)
{
if(READY)
{
keyval=key_process();
if(keyval==PREV)if(MenuOper)MenuOper--;//目录向上移动
else MenuOper=3;
else if(keyval==NEXT)MenuOper++;//目录向下移动
if(MenuOper>3)MenuOper=0;
if(keyval==PLAY)//播放/暂停/进入
{
switch(MenuOper)
{
case Music_Mode://音乐播放模式
{
if(!Unit){warningshow();break;} //显示警告信息
Read_RootDir();//读取根目录信息
while(1)
{
temp=View_File();//浏览文件
if(temp>3)break;
Play_Order(temp);
}
Cleardisplay(4);//清除显示
Menu_Show(); //显示主菜单
break;
}
case Ebook_Mode: //电子书模式
{
if(!Unit){warningshow();break;}//显示警告信息
Read_RootDir();//读取根目录信息
while(1)
{
temp=View_File();
if(temp>3)break;//跳出
Read_Book(temp);
}
Cleardisplay(4);//清除显示
Menu_Show(); //显示主菜单
break;
}
case Radio_Mode: //收音机模式
{
Radio_Play(); //播放收音机模式
Cleardisplay(4);//清屏
Menu_Show(); //显示主目录
break;
}
case Set_Mode://设置VS1003模式
{
Other_Mode();
Cleardisplay(4);//清屏
Menu_Show(); //显示主目录
break;
}
}
}
for(t=0;t<4;t++)//显示图标
{
if(MenuOper==t)invt=1;
else invt=0;
Show_icon(t,0,t);
}
}
}
}
void Other_Mode(void)
{
uchar menupos=0;
uchar t=0;
Cleardisplay(4);
LCD_write_cstr(0,12,"VS1003 Set");
LCD_write_cstr(1,12,"Greedy Snake");
LCD_write_cstr(2,12,"Toy Bricks");
READY=1;//无条件更新目录
order=0;//清空按键缓冲区
while(1)
{
if(READY)
{
switch(key_process())
{
case PREV:
{
if(menupos)menupos--;
else menupos=1;
break;
}
case NEXT:
{
menupos++;
if(menupos>2)menupos=0;
break;
}
case PLAY:
{
Cleardisplay(4);//清除显示
switch(menupos)
{
case 0:Vs1003_set();break;
case 1:
{
Snake_Ini(0,0,2);
Play_Snake();//游戏
break;
}
case 2:
{
fk_init();
Play_Russia();
break;
}
}
Cleardisplay(4);
LCD_write_cstr(0,12,"VS1003 Set");
LCD_write_cstr(1,12,"Snake Game");
LCD_write_cstr(2,12,"Russia Game");
break;
}
case QUIT:return;
}
for(t=0;t<3;t++)//显示icon移动
{
if(menupos==t)invt=1;
else invt=0;
Show_icon(t,0,18+t);//18:set,19:snake,20:russia
}
}
}
}
//设置vs1003
//音量,高音和低音设置
//建议,用了CD3315可以不用vs1003的设置
//把音量调到最大,高低音调节可以关了
void Vs1003_set(void)
{
uchar t=0;
Vs1003_GUI();
Vs1003_msg();
while(1)
{
if(READY)
{
keyval=key_process();
switch(keyval)
{
case 122://高音加
{
if(vs1003ram[0]<15)vs1003ram[0]++;
else vs1003ram[0]=15;
break;
}
case 234://高音减
{
if(vs1003ram[0])vs1003ram[0]--;
else vs1003ram[0]=0;
break;
}
case 184://主音量加
{
if(vs1003ram[4]<255)vs1003ram[4]++;
else vs1003ram[4]=255;
break;
}
case 40://主音量减
{
if(vs1003ram[4])vs1003ram[4]--;
else vs1003ram[4]=0;
break;
}
case 120://低音加
{
if(vs1003ram[2]<15)vs1003ram[2]++;
else vs1003ram[2]=15;
break;
}
case 232://低音减
{
if(vs1003ram[2])vs1003ram[2]--;
else vs1003ram[2]=0;
break;
}
case 168://高频加
{
if(vs1003ram[1]<15)vs1003ram[1]++;
else vs1003ram[1]=15;
break;
}
case 48://高频减
{
if(vs1003ram[1])vs1003ram[1]--;
else vs1003ram[1]=0;
break;
}
case 104://低频加
{
if(vs1003ram[3]<15)vs1003ram[3]++;
else vs1003ram[3]=15;
break;
}
case 240://低频减
{
if(vs1003ram[3]>2)vs1003ram[3]--;
else vs1003ram[3]=2;
break;
}
case 250://保存
{
Cleardisplay(4);//清屏
LCD_write_cstr(1,35,"VS1003 Msg");
save_show();
for(t=0;t<5;t++)vs1003epm[t]=vs1003ram[t];//保存
Vs1003_GUI();
READY=0;//清除键值
break;
}
case QUIT://退出此次设置
{
set1003();//退出前把vs1003设到指定值
return ;
}
}
Vs1003_msg();
keyval=0;
}
}
}
//check ok 08/09/05
//主播放程序
//目录顺序播放
//支持前后选曲
void Play_Order(uchar fpos)
{
uchar i;
uchar temp;
uchar key=0;
//printf("MaxFile:%d\n",MaxFile);
Audio_Ch=2;//通道选择mp3
init_cd3315(Audio_Ch);//初始化cd3315
while(1)
{
key=play(fpos);//播放选中的歌曲
switch(key)//next 播放下一手. prev 播放上一首
{
case NEXT://播放下一曲
{
if(fpos<MaxFile-1){fpos++;Ico_Chg(fpos,MaxFile);}//播放下一首歌曲
else //本层目录播放完毕
{
RSTART: temp=File_Search(m_c[fpos],2);//向下搜索
if(temp==5)//文件末尾
{
temp=File_Search(CurDir,3);//从目录下,重新查找
while(1)//一只要找到符合条件的才退出
{
for(i=0;i<4;i++)if(m_c[i].Type<4)break;
if(i<4)break;//找到了一个音乐文件
temp=File_Search(m_c[3],2);//从最后一个文件开始再向下查找,一定是找到四个的
//printf("Search:%d\n",m_c[3].Clust);
}
fpos=i;
}else fpos=0;
MaxFile=temp;//更改最长文件
//printf("MaxFile:%d\n",MaxFile);
//printf("now playing:%d\n",fpos);
show_name(MaxFile); //显示此次文件的更新目录
Ico_Chg(fpos,MaxFile);//图标移动
}
break;
}
case PREV://播放上一曲
{
if(fpos)fpos--;//播放上一首歌曲
else
{
temp=File_Search(m_c[0],1);//向上搜索 ,一定找到四个文件
fpos=3;
MaxFile=temp;//更改最长文件
show_name(MaxFile); //显示此次文件的更新目录
}
Ico_Chg(fpos,MaxFile);//图标移动
if(m_c[fpos].Type>3)fpos++;//已经到达目录部分了,再向上无效
if(fpos>3){fpos=3;goto RSTART;}//最后一个就是目录文件,查找下一页播放
break;
}
case QUIT:return ;//退出
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -