?? setting.c
字號:
#include "COMM.h"
//設置功能部分代碼
const u8 *Smenu_F1[5]={"時間設置","圖片瀏覽設置","音效管理","屏幕校準","音樂彩燈"};//設置模式下,第一級父目錄
const u8 *Smenu_F2[2]={"瀏覽模式","瀏覽間隔"};//圖片瀏覽設置
const u8 *Smenu_S1[3]={"手動瀏覽","順序瀏覽","隨機瀏覽"};//圖片瀏覽模式
const u8 *Smenu_S2[6]={"1秒鐘","2秒鐘","5秒鐘","10秒鐘","30秒鐘","1分鐘"};//間隔時間
const u8 *Smenu_S3[3]={"禁止","漸變模式","跳變模式"};//音樂彩燈使能標志
const u8 *Smenu_F3[4]={"音源選擇","音效調用","音效保存","VS1003設置"};//音效設置
const u8 *Smenu_S4[3]={"收音機音源","外部音源","MP3音源"};//音源選擇
const u8 *Smenu_S5[5]={"音效1","音效2","音效3","音效4","音效5"};//音效列表
const u8 PIC_Time_Table[6]={1,2,5,10,30,60};//延時列表
//這兩個變量保存在EEPROM的地址為:486 487
u8 PIC_View_Status=0;//圖片播放狀態 bit6 7:模式;bit0~2 :播放間隔時間 列表 486
u8 MUS_RGB_Status=0; //音樂彩燈使能標志 487
//音樂彩燈設置
void Set_MUS_RGB(void)
{
u8 selx=0;
MUS_RGB_Status=FM24C16_ReadOneByte(487);//讀取彩燈標志
selx=MUS_RGB_Status;
if(selx>2)selx=0;
while(1)
{
selx=Load_Fun_Sel(Smenu_S3,"音樂彩燈","確定",3,selx);
if(selx==8)return;//返回
else
{
MUS_RGB_Status=selx;
FM24C16_WriteOneByte(487,MUS_RGB_Status);//保存PIC_View_Status到地址486
return;//設置完之后返回
}
}
}
//圖片瀏覽的相關參數設置
void Set_Pic_View(void)
{
u8 selx=0;
u8 temp=0;
PIC_View_Status=FM24C16_ReadOneByte(486);//讀取圖片模式標志
while(1)
{
selx=Load_Fun_Sel(Smenu_F2,"圖片瀏覽設置","設置",2,temp);
if(selx==8)return;//返回
else
{
if(selx==0)//模式設置
{
temp=PIC_View_Status>>6;//得到瀏覽模式
selx=Load_Fun_Sel(Smenu_S1,"瀏覽模式","確定",3,temp);
if(selx<3)//得到有效按鍵
{
PIC_View_Status&=0x3f;//高兩位復位
PIC_View_Status|=selx<<6;//得到新值
FM24C16_WriteOneByte(486,PIC_View_Status);//保存PIC_View_Status到地址486
}
temp=0;
}else//間隔時間設置
{
temp=PIC_View_Status&0x07;//得到瀏覽模式
selx=Load_Fun_Sel(Smenu_S2,"瀏覽間隔","確定",6,temp);
if(selx<6)//得到有效按鍵
{
PIC_View_Status&=0xF8;//后3位復位
PIC_View_Status|=selx;
FM24C16_WriteOneByte(486,PIC_View_Status);//保存PIC_View_Status到地址486
}
temp=1;
}
}
}
}
//設置時間.
void Set_Time(void)
{
u16 tyear;
u8 key;
u8 tempdate;//月份日期暫存器
u8 tmon,tdate,tmin,tsec,thour;
rtc_get();//更新時間
tyear=timer.w_year;
tmon=timer.w_month;
tdate=timer.w_date;
tmin=timer.min;
thour=timer.hour;
tsec=timer.sec;
//顯示GUI界面
Load_Gui_Bro("確定");
TFT_Fill(0,42,239,297,WHITE);//填充白色,清空上次的顯示
POINT_COLOR=RED;
Show_Str(88,2,"時間設定",0x01);//疊加模式,非自動換行
TFT_Fill(0,42,239,297,WHITE); //填充白色,清空上次的顯示
BACK_COLOR=WHITE;//白色背景
Show_Str(36,120,"時",0x01); //疊加模式,非自動換行
Show_Str(120,120,"分",0x01); //疊加模式,非自動換行
Show_Str(196,120,"秒",0x01); //疊加模式,非自動換行
Show_Str(36,184,"年",0x01); //疊加模式,非自動換行
Show_Str(120,184,"月",0x01); //疊加模式,非自動換行
Show_Str(196,184,"日",0x01); //疊加模式,非自動換行
POINT_COLOR=BROWN;
TFT_ShowButton(4,142,1);//<
TFT_ShowButton(4,206,1);//<
for(key=0;key<6;key++)
{
if(key<3)TFT_ShowButton(60+key*76,142,0);//>
else TFT_ShowButton(60+(key-3)*76,206,0);//>
}
for(key=0;key<4;key++)
{
if(key<2)TFT_ShowButton(96+key*76,142,1);//<
else TFT_ShowButton(96+(key-2)*76,206,1);//<
}
POINT_COLOR=BLUE;//藍色字體
//更新顯示
TFT_ShowNum(28,210,tyear/100,16,0); //顯示年
TFT_ShowNum(44,210,tyear%100,16,0);
TFT_ShowNum(120,210,tmon,16,0); //顯示月
TFT_ShowNum(196,210,tdate,16,0); //顯示日
//顯示時分秒
TFT_ShowNum(36,146,thour,16,0);
TFT_ShowNum(120,146,tmin,16,0);
TFT_ShowNum(196,146,tsec,16,0);
key=0;
Pen_Point.Key_Sta=Key_Up;//釋放顯示期間的觸發
while(1)
{
if(Pen_Point.Key_Sta==Key_Down||NPEN)key=Touch_To_Num(2);//得到了按鍵值
if(key)//有按鍵按下
{
//修正月份天數
if(Is_Leap_Year(tyear)&&tmon==2)tempdate=mon_table[1]+1;
else tempdate=mon_table[tmon-1];
switch(key)
{
//設置時間
case 1:
if(thour)thour--;
else thour=23;
break;
case 2:
if(thour<23)thour++;
else thour=0;
break;
case 3:
if(tmin)tmin--;
else tmin=59;
break;
case 4:
if(tmin<59)tmin++;
else tmin=0;
break;
case 5:
if(tsec)tsec--;
else tsec=59;
break;
case 6:
if(tsec<59)tsec++;
else tsec=0;
break;
//設置日期
case 7:
if(tyear>2000)tyear--;
else tyear=2050;
break;
case 8:
if(tyear<2050)tyear++;
else tyear=2000;
break;
case 9:
if(tmon>1)tmon--;
else tmon=12;
break;
case 10:
if(tmon<12)tmon++;
else tmon=1;
break;
case 11:
if(tdate>1)tdate--;
else tdate=tempdate;
break;
case 12:
if(tdate<tempdate)tdate++;
else tdate=1;
break;
case 13://"確定"按鈕按下了
TFT_CLEAR(BLACK);//清屏,黑色背景
POINT_COLOR=GRED;//黃色字體
rtc_set(tyear,tmon,tdate,thour,tmin,tsec);
Show_Str(68,60,"時間修改成功!",0x01);//疊加模式,非自動換行
delay_ms(1000);//延時
return;
case 14:return;//"返回"按鈕按下了
}
//修正月份.
if(Is_Leap_Year(tyear)&&tmon==2)tempdate=mon_table[1]-1;
else tempdate=mon_table[tmon-1];
//更新顯示
TFT_ShowNum(28,210,tyear/100,16,0); //顯示年
TFT_ShowNum(44,210,tyear%100,16,0);
TFT_ShowNum(120,210,tmon,16,0); //顯示月
TFT_ShowNum(196,210,tdate,16,0); //顯示日
//顯示時分秒
TFT_ShowNum(36,146,thour,16,0);
TFT_ShowNum(120,146,tmin,16,0);
TFT_ShowNum(196,146,tsec,16,0);
key=0;//把按鍵值取消掉
delay_ms(50);//不讓反應速度太快.
Pen_Point.Key_Sta=Key_Up;//釋放顯示期間的觸發
}
delay_ms(1);
}
}
//處理鍵值
//selx:選中的條目編號 0~5
//kind:0,VS1003;1,PT2314
void Pro_Key_EQ(u8 selx,u8 kind)
{
if(Is_In_Area(100,46+32*selx,124,70+32*selx))//減
{
if(voltemp[selx]&&(kind==1))voltemp[selx]--;
else if(vs1003ram[selx]&&(kind==0))vs1003ram[selx]--;
}else if(Is_In_Area(172,46+32*selx,196,70+32*selx))//加
{
if(kind)voltemp[selx]++;
else
{
if(vs1003ram[selx]<255)vs1003ram[selx]++;
if(selx<4&&vs1003ram[selx]>15)vs1003ram[selx]=15; //范圍限定
}
}
}
//音效下面設置
//sel:選中與否
//num:項目號 0~5
//kind:0,VS1003,1:PT2314
void EQ_Item_Sel(u8 num,u8 sel,u8 kind)
{
if((num%2)==0)BACK_COLOR=WHITE;//假定沒有選中,原背景
else BACK_COLOR=LGRAY;
if(sel)BACK_COLOR=BROWN;//棕色背景,選中了
POINT_COLOR=BLACK; //筆是黑色的
if(kind)//PT2314設置
{
if(num==5)
{
if(voltemp[num]==0)Show_Str(132,210,"開啟",0);
else Show_Str(132,210,"關閉",0);
}else TFT_ShowNum(140,50+32*num,voltemp[num],16,0x00);
}else //VS1003設置
{
if(num<4)TFT_ShowNum(140,50+32*num,vs1003ram[num],16,0x00);
else TFT_Show3Num(136,50+32*num,vs1003ram[num],16,0x00);
}
}
//設置VS1003的音效
void Set_Vs1003_EQ(void)
{
u8 key;
u8 sel;
Load_Gui_Set_EQ(0);//裝載VS1003界面
Read_VS_Set();//讀取數據
for(key=0;key<5;key++)
{
if(key==sel)EQ_Item_Sel(key,1,0);//更新數據
else EQ_Item_Sel(key,0,0);//更新數據
}
key=0;
Pen_Point.Key_Sta=Key_Up;//釋放顯示期間的觸發
while(1)//等待按鍵
{
if((Pen_Point.Key_Sta==Key_Down||NPEN)&&Pen_Point.Key_LSta)key=Touch_To_Num(4);//得到按鍵值
if(PEN)//按鍵松開了,狀態改變(狀態機)
{
Pen_Point.Key_LSta=1;
Pen_Point.Key_Sta=Key_Up;
}
if(key)//有按鍵按下
{
Pen_Point.Key_LSta=0;
switch(key)
{
case 1:
case 2:
case 3:
case 4:
case 5:
key-=1;
if(sel!=key&&key<8)//選中一個
{
EQ_Item_Sel(sel,0,0);
sel=key;//選擇這次選擇的
EQ_Item_Sel(sel,1,0);
}else if(sel==key)//選擇按鈕,或者雙擊
{
Pro_Key_EQ(sel,0);//操作數值
EQ_Item_Sel(sel,1,0);//更新數據
}
break;
case 9://確定按鈕按下了
Save_VS_Set();//保存
case 10:
return;//選擇了"返回"按鈕,返回一個不可能值
}
key=0;//取消按鍵值
}
delay_ms(1);
}
}
//音效設置
//返回值:0,退出 1,繼續
u8 Option_EQ(void)
{
u8 selx=0;
u8 temp=0;
while(1)
{
selx=Load_Fun_Sel(Smenu_F3,"音效管理","選擇",4,temp);//進入第一級目錄
if(selx==8)return 1;//返回
else
{
temp=selx;
switch(selx)
{
case 0://音源選擇
selx=Audio_Ch;
selx=Load_Fun_Sel(Smenu_S4,"音源選擇","確定",3,selx-1);//進入第一級目錄
if(selx<3)
{
Audio_Ch=selx+1;
init_pt2314(Audio_Ch);//設置生效
return 0;
}
break;
case 1://音效調用
selx=INITDSP;
selx=Load_Fun_Sel(Smenu_S5,"調用音效","確定",5,selx);//進入第一級目錄
if(selx<5)
{
INITDSP=selx;
read_dsp();//讀取音效
init_pt2314(Audio_Ch);//設置生效
return 0;
}
break;
case 2://音效保存
selx=INITDSP;
selx=Load_Fun_Sel(Smenu_S5,"保存到音效","確定",5,selx);//進入第一級目錄
if(selx<5)
{
INITDSP=selx;
save_dsp();//保存音效
return 0;
}
break;
case 3://VS1003設置
Set_Vs1003_EQ();
break;
}
}
}
}
//音效設置
void Set_EQ(void)
{
u8 key,sel=0;
EQRST:
read_dsp();//讀取音效
Load_Gui_Set_EQ(1);//裝載PT2314界面
for(key=0;key<6;key++)
{
if(key==sel)EQ_Item_Sel(key,1,1);//更新數據
else EQ_Item_Sel(key,0,1);//更新數據
}
key=0;
Pen_Point.Key_Sta=Key_Up;//釋放顯示期間的觸發
while(1)//等待按鍵
{
if((Pen_Point.Key_Sta==Key_Down||NPEN)&&Pen_Point.Key_LSta)key=Touch_To_Num(4);//得到按鍵值
if(PEN)//按鍵松開了,狀態改變(狀態機)
{
Pen_Point.Key_LSta=1;
Pen_Point.Key_Sta=Key_Up;
}
if(key)//有按鍵按下
{
Pen_Point.Key_LSta=0;
switch(key)
{
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
key-=1;
if(sel!=key&&key<8)//選中一個
{
EQ_Item_Sel(sel,0,1);
sel=key;//選擇這次選擇的
EQ_Item_Sel(sel,1,1);
}else if(sel==key)//選擇按鈕,或者雙擊
{
Pro_Key_EQ(sel,1);//操作數值
VOL_Data_Check(sel,&voltemp[sel]);//檢查PT2314設置的數據合法性
EQ_Item_Sel(sel,1,1);//更新數據
init_pt2314(Audio_Ch);//設置生效
}
break;
case 9://選項按鈕按下了
Option_EQ();
goto EQRST;
case 10:
FM24C16_WriteOneByte(30,INITDSP);//保存此次DSP值,就是下次開機調用的DSP值
return;//選擇了"返回"按鈕,返回一個不可能值
}
key=0;//取消按鍵值
}
delay_ms(1);
}
}
//設置模式
void Set_Viewer(void)
{
u8 selx=0;
while(1)
{
selx=Load_Fun_Sel(Smenu_F1,"系統設置","選擇",5,selx);
if(selx==8)return;//返回
else
{
switch(selx)
{
case 0://時間設置
Set_Time();
break;
case 1://圖片瀏覽設置
Set_Pic_View();
break;
case 2://音效設置
Set_EQ();
break;
case 3://屏幕校準
touch_adjust();
break;
case 4://音樂彩燈
Set_MUS_RGB();
break;
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -