?? main.c~
字號:
/************************************************************/
/* MP3 Code for M32L */
/* By pasyong */
/* 2006-4 */
/* Base ICC6.31A */
/************************************************************/
#include "info.h"
void Menu_Oper(void); //主目錄操作函數(shù),也是系統(tǒng)最頂層的操作函數(shù)
void Radio_Play(void); //收音機(jī)控制函數(shù),收音機(jī)模式時(shí)用
void Play_Order(uchar);//mp3控制函數(shù),播放音樂時(shí)用
void Vs1003_set(void); //VS1003控制函數(shù),控制vs1003的設(shè)置
void Other_Mode(void); //其他模式控制函數(shù),包括游戲和vs1003的設(shè)置功能,次級目錄函數(shù)
//主循環(huán)
void main(void)
{
DDRA=0XFF;
init_system();//初始化系統(tǒng)
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--;//目錄向上移動(dòng)
else MenuOper=3;
else if(keyval==NEXT)MenuOper++;//目錄向下移動(dòng)
if(MenuOper>3)MenuOper=0;
if(keyval==PLAY)//播放/暫停/進(jìn)入
{
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: //收音機(jī)模式
{
Radio_Play(); //播放收音機(jī)模式
Cleardisplay(4);//清屏
Menu_Show(); //顯示主目錄
break;
}
case Set_Mode://設(shè)置VS1003模式
{
Other_Mode();
Cleardisplay(4);//清屏
Menu_Show(); //顯示主目錄
break;
}
}
}
for(t=0;t<4;t++)//顯示圖標(biāo)
{
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,"Snake Game");
LCD_write_cstr(2,12,"Russia Game");
READY=1;//無條件更新目錄
order=0;//清空按鍵緩沖區(qū)
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移動(dòng)
{
if(menupos==t)invt=1;
else invt=0;
Show_icon(t,0,18+t);//18:set,19:snake,20:russia
}
}
}
}
//設(shè)置vs1003
//音量,高音和低音設(shè)置
//建議,用了CD3315可以不用vs1003的設(shè)置
//把音量調(diào)到最大,高低音調(diào)節(jié)可以關(guān)了
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://退出此次設(shè)置
{
set1003();//退出前把vs1003設(shè)到指定值
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;//找到了一個(gè)音樂文件
temp=File_Search(m_c[3],2);//從最后一個(gè)文件開始再向下查找,一定是找到四個(gè)的
//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);//圖標(biāo)移動(dòng)
}
break;
}
case PREV://播放上一曲
{
if(fpos)fpos--;//播放上一首歌曲
else
{
temp=File_Search(m_c[0],1);//向上搜索 ,一定找到四個(gè)文件
fpos=3;
MaxFile=temp;//更改最長文件
show_name(MaxFile); //顯示此次文件的更新目錄
}
Ico_Chg(fpos,MaxFile);//圖標(biāo)移動(dòng)
if(m_c[fpos].Type>3)fpos++;//已經(jīng)到達(dá)目錄部分了,再向上無效
if(fpos>3){fpos=3;goto RSTART;}//最后一個(gè)就是目錄文件,查找下一頁播放
break;
}
case QUIT:return ;//退出
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -