⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gui.c

📁 基于stm32的MP3播放器
💻 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 + -