📄 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 + -