📄 gui.c
字号:
#include "COMM.h"
DWORD Cur_Dir_Cluster;//当前目录簇号
DWORD Fat_Dir_Cluster;//父目录簇号 在FAT文件夹里面CopyDirentruyItem函数中修改!
//系统主菜单
const u8 *Menu[9]=
{
"音乐",
"图片",
"游戏",
"闹钟",
"时间",
"设置",
"电子书",
"收音机",
"七彩灯"
};
//u8 *menux[8]={"时间设置","触摸屏校准","图片浏览设置","FUCK YOU ","SELECT","测试","其他","计算机"};
//功能选择调度函数
//list :功能条目指针
//title :标题
//func :选择/确定/。。。
//len :功能条目的个数(1~8)
//sel :开始选中的条目(0~7)
//返回值:0~7,选中的条目;8,没有选择任何条目。
u8 Load_Fun_Sel(const u8 * *list,const u8 *title,u8 *func,u8 len,u8 sel)
{
u8 t,key;
TFT_CLEAR(WHITE);//清屏
TFT_Fill(0,0,239,20,Bro_TOP); //填充顶部颜色
TFT_Fill(0,21,239,41,Bro_MID); //填充中部部颜色
TFT_Fill(0,298,239,319,Bro_BTM);//填充底部颜色
//显示标题
POINT_COLOR=RED;
Show_Str_Mid(0,2,(u8*)title,0x01,240); //叠加模式,非自动换行
POINT_COLOR=BLUE;
Show_Str(0,23,"请选择:",0x01); //叠加模式,非自动换行
//加载条目信息
for(t=0;t<len;t++)
{
if(t==sel)TFT_Fill(0,42+sel*32,239,42+(sel+1)*32,BROWN);//对选中的条目,填充棕色
Show_Str(0,50+t*32,(u8*)list[t],0x01); //叠加模式,非自动换行
}
//加载 确定 返回 按钮
POINT_COLOR=RED;
Show_Str(5,300,func,0x01); //叠加模式,非自动换行
Show_Str(203,300,"返回",0x01); //叠加模式,非自动换行
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:
case 7:
case 8:
case 9://确认键按下
key-=1;
if(sel!=key&&key<len)//选中一个
{
POINT_COLOR=BLUE;//画笔颜色选择
TFT_Fill(0,42+sel*32,239,42+(sel+1)*32,WHITE);//清空上次选择的
Show_Str(0,50+sel*32,(u8*)list[sel],0x01);//重新显示上次的名字
sel=key;//选择这次选择的
TFT_Fill(0,42+sel*32,239,42+(sel+1)*32,BROWN);//填充底色
Show_Str(0,50+sel*32,(u8*)list[sel],0x01);//显示名字
}else if(sel==key||key==8)//选择按钮,或者双击
{
return sel;//返回选择的条目号
}
break;
case 10:return 8;//选择了"返回"按钮,返回一个不可能值
}
key=0;//取消按键值
}
delay_ms(1);
}
}
//设置音效的界面
//kind:0:VS1003
//kind:1:PT2314
void Load_Gui_Set_EQ(u8 kind)
{
TFT_CLEAR(WHITE);//清屏
//标题栏
TFT_Fill(0,0,239,20,MP3COLOR1); //填充顶部颜色
POINT_COLOR=GRED;
BACK_COLOR=MP3COLOR1;
Show_Str_Mid(0,3,"音效管理",0x01,240);
TFT_Fill(0,21,239,41,Bro_MID); //填充中部部颜色
TFT_Fill(0,298,239,319,Bro_BTM);//填充底部颜色
TFT_Fill(0,74,239,106,LGRAY); //填充背色
TFT_Fill(0,138,239,170,LGRAY);//填充背色
POINT_COLOR=BLUE;
if(kind) //设置PT2314
{
TFT_Fill(0,202,239,234,LGRAY);//填充背色
Show_Str(0,50,"音量:",0x01); //叠加模式,非自动换行
Show_Str(0,82,"高音:",0x01); //叠加模式,非自动换行
Show_Str(0,114,"低音:",0x01); //叠加模式,非自动换行
Show_Str(0,146,"左声道:",0x01); //叠加模式,非自动换行
Show_Str(0,178,"右声道:",0x01); //叠加模式,非自动换行
Show_Str(0,210,"超重音:",0x01); //叠加模式,非自动换行
}else//设置VS1003
{
Show_Str(0,50,"高音:",0x01); //叠加模式,非自动换行
Show_Str(0,82,"高频:",0x01); //叠加模式,非自动换行
Show_Str(0,114,"低音:",0x01); //叠加模式,非自动换行
Show_Str(0,146,"低频:",0x01); //叠加模式,非自动换行
Show_Str(0,178,"音量:",0x01); //叠加模式,非自动换行
}
//音量
POINT_COLOR=BROWN;
BACK_COLOR=WHITE;
TFT_ShowButton(100,46,1);//<
TFT_ShowButton(172,46,0);//>
//低音
TFT_ShowButton(100,110,1);//<
TFT_ShowButton(172,110,0);//>
//右声道
TFT_ShowButton(100,174,1);//<
TFT_ShowButton(172,174,0);//>
//高音
BACK_COLOR=LGRAY;
TFT_ShowButton(100,78,1);//<
TFT_ShowButton(172,78,0);//>
//左声道
TFT_ShowButton(100,142,1);//<
TFT_ShowButton(172,142,0);//>
//超重音
if(kind)
{
TFT_ShowButton(100,208,1);//<
TFT_ShowButton(172,208,0);//>
POINT_COLOR=RED;
Show_Str(5,300,"选项",0x01); //叠加模式,非自动换行
}else
{
POINT_COLOR=RED;
Show_Str(5,300,"确定",0x01); //叠加模式,非自动换行
}
//加载选项,返回按钮
Show_Str(203,300,"返回",0x01); //叠加模式,非自动换行
}
//装载键盘
//load:1,加载。0,清除
void Load_KeyBoard(u8 load)
{
u8 t;
BACK_COLOR=WHITE;
if(load)POINT_COLOR=BLACK;
else POINT_COLOR=WHITE;
for(t=0;t<11;t++) //先加载数据
{
if(t<10)TFT_ShowChar(18+18*t,269,'0'+t,16,0x01);
else TFT_ShowButton(198,265,21);//加载"<-"
}
if(load)POINT_COLOR=GRAY;//灰色边框
else POINT_COLOR=WHITE;
for(t=0;t<11;t++) //加载外框
{
if(t==10)TFT_DrawRectangle(194,269,226,285); //32*16方框
else TFT_DrawRectangle(14+18*t,269,30+18*t,285);//16*16方框
}
}
//加载闹钟设置时的界面
//不对任何参数赋值修改
void Load_Gui_Set_Alarm(void)
{
u8 t;
u8 *weekeng[7]={"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};
TFT_CLEAR(WHITE);//清屏
TFT_Fill(0,0,239,20,Bro_TOP); //填充顶部颜色
TFT_Fill(0,21,239,41,Bro_MID); //填充中部部颜色
TFT_Fill(0,298,239,319,Bro_BTM);//填充底部颜色
TFT_Fill(0,42,239,74,LGRAY); //填充开关背色
TFT_Fill(0,106,239,170,LGRAY);//填充响铃背色
TFT_Fill(0,202,239,234,LGRAY);//填充铃声背色
//显示标题
POINT_COLOR=RED;
Show_Str_Mid(0,3,"编辑闹钟",0x01,240); //叠加模式,非自动换行
POINT_COLOR=BLUE;
Show_Str(0,50,"闹钟开关:",0x01); //叠加模式,非自动换行
Show_Str(0,82,"闹铃时间:",0x01); //叠加模式,非自动换行
Show_Str(0,114,"响铃方式:",0x01); //叠加模式,非自动换行
//加载条目信息
POINT_COLOR=BLACK;
for(t=0;t<7;t++)
{
Show_Str(21+29*t,146,weekeng[t],0x01); //叠加模式,非自动换行
}
POINT_COLOR=BLUE;
Show_Str(0,178,"铃声设置:",0x01); //叠加模式,非自动换行
POINT_COLOR=BROWN;
//闹钟开关
BACK_COLOR=LGRAY;
TFT_ShowButton(85,46,1);//<
TFT_ShowButton(210,46,0);//>
//响铃方式
TFT_ShowButton(85,110,1);//<
TFT_ShowButton(210,110,0);//>
//铃声设置
BACK_COLOR=WHITE;
TFT_ShowButton(85,174,1);//<
TFT_ShowButton(210,174,0);//>
POINT_COLOR=RED;
Show_Str(5,300,"确定",0x01); //叠加模式,非自动换行
Show_Str(203,300,"返回",0x01); //叠加模式,非自动换行
}
////////////////////////////////////////////////////////////////////////
//画拖按钮,可以拖动
//keypos:0~150
void Draw_Bar_Bottom(u8 x,u8 y,u8 keypos,u8 lastpos)
{
u16 realpos=0;
if(keypos==0xff)
{
TFT_Fill(x,y,x+60,200+y,GRAY); //填充外界颜色
TFT_Fill(x+25,y+10,x+35,190+y,LGRAY); //填充顶部颜色
}else
{
realpos=180-(u16)lastpos+(u16)y;//
TFT_Fill(x+15,realpos,x+45,realpos+10,GRAY);//清空进度条,填充白色
TFT_Fill(x+25,realpos,x+35,realpos+10,LGRAY); //填充顶部颜色
realpos=180-(u16)keypos+(u16)y; //
TFT_Fill(x+15,realpos,x+45,realpos+10,BROWN);//清空进度条,填充白色
}
}
//红绿蓝按钮所在位置处理
//RGB:0,红灯;1,绿灯;3,蓝灯
void RGB_Bottom(u8 RGB,u8 pos)
{
static u8 lastred=0;
static u8 lastgreen=0;
static u8 lastblue=0;
if(pos>170)return;//非法数据,直接返回
switch(RGB)
{
case 0:
Draw_Bar_Bottom(10,93,pos,lastred);
lastred=pos;
break;
case 1:
Draw_Bar_Bottom(90,93,pos,lastgreen);
lastgreen=pos;
break;
case 2:
Draw_Bar_Bottom(170,93,pos,lastblue);
lastblue=pos;
break;
}
}
//加载彩灯控制的界面
//不对任何参数赋值修改
void Load_Gui_RGBLED(void)
{
TFT_CLEAR(WHITE);//清屏
BACK_COLOR=MP3COLOR1;
POINT_COLOR=GRED;
TFT_Fill(0,0,239,19,MP3COLOR1); //填充顶部颜色
TFT_Fill(0,298,239,319,Bro_BTM);//填充底部颜色
Show_Str_Mid(0,2,"彩灯控制",0x01,240); //叠加模式,非自动换行
TFT_Fill(0,40,239,72,LGRAY);//填充背色
TFT_Fill(0,40,239,72,LGRAY);//填充背色
POINT_COLOR=BROWN;
TFT_DrawRectangle(19,47,53,65);
TFT_DrawRectangle(187,47,221,65);
BACK_COLOR=WHITE;
TFT_Fill(0,72,239,73,BROWN);//填充响铃背色
POINT_COLOR=RED;
Show_Str(24,75,"红色",0x01); //叠加模式,非自动换行
POINT_COLOR=GREEN;
Show_Str(104,75,"绿色",0x01); //叠加模式,非自动换行
POINT_COLOR=BLUE;
Show_Str(184,75,"蓝色",0x01); //叠加模式,非自动换行
//显示标题
//加载条目信息
POINT_COLOR=RED;
BACK_COLOR=Bro_BTM;
Show_Str(5,300,"选项",0x01); //叠加模式,非自动换行
Show_Str(203,300,"返回",0x01); //叠加模式,非自动换行
Draw_Bar_Bottom(10,93,0XFF,0);
Draw_Bar_Bottom(90,93,0XFF,0);
Draw_Bar_Bottom(170,93,0XFF,0);
}
////////////////////////////////////////////////////////////////////////
//选择菜单
void Select_Menu(u8 M_Type,u8 Cnt,u8 En)
{
u8 tx;
u16 ty;
ty=10;
if(M_Type==0)//主菜单
{
tx=80*(Cnt%3)+10;//10,90,170
if(Cnt>5)ty=216;
else if(Cnt>2)ty=113;
if(En)//选中当前的菜单
{
POINT_COLOR=WHITE;//白色字体
BACK_COLOR=BLUE; //蓝色背景
}else
{
POINT_COLOR=BLACK;//黑色字体
BACK_COLOR=WHITE; //白色背景
}
if(Cnt<6)Show_Str(tx+13,ty+74,(u8*)Menu[Cnt],0);
else Show_Str(tx+5,ty+74,(u8*)Menu[Cnt],0);
}
}
//装载系统ICO文件
void Load_Sys_ICO(void)
{
u8 t,tx;
u16 ty;
FileInfoStruct temp;
POINT_COLOR=RED;//黑色字体
TFT_CLEAR(WHITE);//清屏
temp.F_Type=T_BMP;//文件属性设置
tx=10;ty=10;
for(t=0;t<9;t++)
{
temp.F_StartCluster=sys_ico[t];
tx=80*(t%3)+10;//10,90,170
AI_LoadPicFile(&temp,tx,ty,tx+59,ty+60);
Select_Menu(0,t,0);//加载字体
if(t>=5)ty=216;
else if(t>=2)ty=113;
}
}
//加载浏览界面
//设置界面
//str:"选择/确定"
void Load_Gui_Bro(u8 * str)
{
TFT_CLEAR(WHITE);//清屏
TFT_Fill(0,0,239,20,0X038A); //填充顶部颜色
TFT_Fill(0,21,239,41,0XEFC0); //填充中部部颜色
TFT_Fill(0,298,239,319,0X81BF);//填充底部颜色
POINT_COLOR=BLUE;
Show_Str(0,23,"请选择:",0x01); //叠加模式,非自动换行
POINT_COLOR=RED;
Show_Str(5,300,str,0x01); //叠加模式,非自动换行
Show_Str(203,300,"返回",0x01); //叠加模式,非自动换行
}
//加载MP3播放界面
//sysfun变量。0~9bit用来标记不同状态
void Load_Gui_Mp3(u16 funmark)
{
u16 t;
TFT_Fill(0,0,239,23,MP3COLOR1); //填充顶部颜色
POINT_COLOR=GRED;
BACK_COLOR=MP3COLOR1;
Show_Str_Mid(0,3,"音乐播放机",0x01,240);
TFT_Fill(0,24,239,41,MP3COLOR2); //填充顶部颜色
TFT_Fill(0,42,239,67,MP3COLOR3); //填充顶部颜色
BACK_COLOR=MP3COLOR3;
POINT_COLOR=GREEN;
for(t=0;t<4;t++)TFT_ShowButton(2+60*t,43,5+t);//加载 喇叭,高音低音和dsp
TFT_Fill(0,68,239,101,MP3COLOR4); //填充顶部颜色
BACK_COLOR=MP3COLOR4;
POINT_COLOR=GREEN;
t=funmark&0x03;
//显示循环模式
BACK_COLOR=MP3COLOR4;
POINT_COLOR=GREEN;
TFT_ShowButton(214,72,t+2);//加载循环模式
if((funmark>>8)&0x01)TFT_ShowButton(2,72,16); //加载有歌词图标
else TFT_ShowButton(2,72,17); //加载无歌词图标
TFT_ProBar(0);//画空进度,180*10大小
TFT_Fill(0,102,239,119,MP3COLOR5); //填充顶部颜色
t=(funmark>>7)&0x01;//是否显示超重低音
BACK_COLOR=MP3COLOR5;
POINT_COLOR=GRED;
if(t)Show_Str_Mid(0,102,"Supper Bass",0,240);
else Show_Str_Mid(0,102," ",0,240);//清除显
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -