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

📄 menu_gui.c

📁 液晶菜单 51串行实现 调试已通过
💻 C
字号:
//========================================================================
// 文件名: Menu_GUI.c
// 作  者: Xinqiang Zhang(email: Xinqiang@Mzdesign.com.cn)
//			www.Mzdesign.com.cn
// 日  期: 2007/03/24
// 描  述: 菜单应用范例程序--UI显示刷新控制函数,配合MzDesign提供的通用版
//			LCD基础驱动程序
//			此代码适用于无byte操作的16位MCU,如凌阳的unsp系列MCU
//
// 参  考: 
// 版  本:
//      2007/03/24      First version    Mz Design
//      2007/07/26      V1.01			 Mz Design
//			修改Show_Item函数,使之适应不同的LCD模块的驱动
//
//========================================================================

#include "LCD_Dis.h"
#include "LCD_Config.h"
#include "Menu_GUI_config.h"

UCHAR Y_WIDTH_MENU=16;
UCHAR X_SPACE_FRONT=10;

UCHAR Dis_Menu_Num=0;

UCHAR Font_GB=0;
UCHAR Font_String=0;
//=====================================================================//
//函数:UCHAR ShowMenu_Item(UCHAR y,UINT* Menu_String,UCHAR Font_Color)
//描述:显示菜单项子函数
//参数:space_front  显示缩进值
//		y            Y轴坐标
//		Menu_String  菜单项链表的首地址指针
//返回:显示溢出情况  0:溢出    1:无溢出
//注意:无        
//=====================================================================//
UCHAR ShowMenu_Item(UCHAR y,UCHAR* Menu_String,UCHAR Font_Color)
{
	UCHAR *uiTemp;
	UCHAR uiTemp1;
	UCHAR i,x,Char_Nmb;
	x = X_SPACE_FRONT;					//Mune show front space....
	Char_Nmb = (UCHAR)Menu_String[0];
	if(Char_Nmb<0xA1)
	{
		for(i=1;i<=Char_Nmb;i++)
		{
			uiTemp = (UCHAR*)(Menu_String+i);
			uiTemp1 = (UCHAR)*uiTemp;
			if(uiTemp1>128) 
			{
				FontSet(Font_GB,Font_Color);	//选择汉字字库
				uiTemp1 = uiTemp1-128;
			}
			else
			{
				FontSet(Font_String,Font_Color);//选择ASCII码字库
			}
			PutChar(x,y,uiTemp1);
			x = x+X_Witch;//GetASIIX();

			if(x>=Dis_X_MAX) return 0;			//横坐标溢出,返回零
		}
	}
#ifdef Hz_Lib_II
	else
	{
		FontSet_cn(Font_GB,Font_Color);
		FontSet(Font_String,Font_Color);
		PutString_cn(x,y,(char *)Menu_String);
	}
#endif
	return 1;
}
//=====================================================================//
//函数:void UpDate_Menu(UCHAR First_Index,UCHAR Menu_Index,UINT** Menu_List)
//描述:刷新整屏菜单显示函数
//参数:First_Index  当面显示页的第一条菜单号
//		Menu_Index   当前处于选用的菜单项
//		Menu_List    菜单资源链表指针
//返回:无
//注意:无        
//=====================================================================//
UCHAR First_Index_old=0xff;
UCHAR y_Index_old = 0xff;
void UpDate_Menu(UCHAR First_Index,UCHAR Menu_Index,UCHAR** Menu_List)
{
	UINT y_width,y_Index;
	UCHAR List_Num,i;
	List_Num = (UINT)**Menu_List;
	y_width = Y_WIDTH_MENU;
	y_Index = 0;
	while(First_Index>List_Num) First_Index -= List_Num;
	if(List_Num>Dis_Menu_Num) List_Num = Dis_Menu_Num;
//	if(Menu_Index>List_Num) return;
	if(First_Index_old!=First_Index)
	{
		SetPaintMode(1,MENU_BACK_COLOR);
		ClrScreen();									//清屏
		SetPaintMode(1,MENU_SELE_COLOR);
		if(y_Index_old==0xff)
		{
			Rectangle(0,First_Index*y_width,Dis_X_MAX,First_Index*y_width+y_width-1,1);
			i=First_Index+1;
			ShowMenu_Item(y_Index,(UCHAR *)Menu_List[i++],MENU_SELF_COLOR);
			y_Index = y_Index+Y_WIDTH_MENU;
			for(;i<List_Num+1;i++)
			{
				ShowMenu_Item(y_Index,(UCHAR *)Menu_List[i],MENU_FONT_COLOR);
				y_Index = y_Index+Y_WIDTH_MENU;
			}
		}
		else
		{
			y_Index_old = Menu_Index-First_Index;
			Rectangle(0,y_Index_old*Y_WIDTH_MENU,Dis_X_MAX,y_Index_old*Y_WIDTH_MENU+Y_WIDTH_MENU-1,1);
			i=First_Index+1;
			while(List_Num)
			{
				if((i-1)==Menu_Index) ShowMenu_Item(y_Index,(UCHAR *)Menu_List[i],MENU_SELF_COLOR);
				else ShowMenu_Item(y_Index,(UCHAR *)Menu_List[i],MENU_FONT_COLOR);
				y_Index = y_Index+Y_WIDTH_MENU;
				i++;
				List_Num--;
			}
		}
		First_Index_old = First_Index;
	}
	else
	{
		y_Index = y_Index_old-First_Index_old;
		y_Index = y_Index*Y_WIDTH_MENU;
		SetPaintMode(1,MENU_BACK_COLOR);
		Rectangle(0,y_Index/*y_Index_old*Y_WIDTH_MENU*/,Dis_X_MAX,/*y_Index_old*Y_WIDTH_MENU*/y_Index+Y_WIDTH_MENU-1,1);
		ShowMenu_Item(y_Index,(UCHAR *)Menu_List[y_Index_old+1],MENU_FONT_COLOR);
		y_Index = Menu_Index-First_Index;
		y_Index = y_Index*Y_WIDTH_MENU;
		SetPaintMode(1,MENU_SELE_COLOR);
		Rectangle(0,/*Menu_Index*Y_WIDTH_MENU*/y_Index,Dis_X_MAX,/*Menu_Index*Y_WIDTH_MENU*/y_Index+Y_WIDTH_MENU-1,1);
		ShowMenu_Item(y_Index,(UCHAR *)Menu_List[Menu_Index+1],MENU_SELF_COLOR);
	}
	y_Index_old = Menu_Index;
}
//=====================================================================//
//函数:void Redraw_Menu(UCHAR First_Index,UCHAR Menu_Index,UINT** Menu_List)
//描述:刷新整屏菜单显示函数
//参数:First_Index  当面显示页的第一条菜单号
//		Menu_Index   当前处于选用的菜单项
//		Menu_List    菜单资源链表指针
//返回:
//注意:无        
//=====================================================================//
void Redraw_Menu(UCHAR First_Index,UCHAR Menu_Index,UCHAR** Menu_List)
{
	UCHAR *Menu_Config;
	First_Index_old=0xff;
	Menu_Config = (UCHAR *)(*Menu_List);
	Font_GB = *(Menu_Config+1);
	Font_String = *(Menu_Config+2);
	Y_WIDTH_MENU = *(Menu_Config+3);
	X_SPACE_FRONT = *(Menu_Config+4);
	Dis_Menu_Num = (Dis_Y_MAX+1)/Y_WIDTH_MENU;
	UpDate_Menu(First_Index,Menu_Index,Menu_List);
}
//=====================================================================//
//函数:void Initial_Menu(UINT** Menu_List)
//描述:刷新整屏菜单显示函数
//参数:Menu_List    菜单资源链表指针
//返回:
//注意:无        
//=====================================================================//
void Initial_Menu(UCHAR** Menu_List)
{
	UCHAR *Menu_Config;
	First_Index_old=0xff;
	y_Index_old = 0xff;
	Menu_Config = (UCHAR *)(*Menu_List);
	Font_GB = *(Menu_Config+1);
	Font_String = *(Menu_Config+2);
	Y_WIDTH_MENU = *(Menu_Config+3);
	X_SPACE_FRONT = *(Menu_Config+4);
	Dis_Menu_Num = (Dis_Y_MAX+1)/Y_WIDTH_MENU;
	UpDate_Menu(0,0,Menu_List);
}
//=====================================================================//
//函数:unsigned int GetMLNum(unsigned int* Menu_List)
//描述:获取菜单资源的菜单项个数函数
//参数: Menu_List    菜单资源链表指针
//返回:菜单项个数
//注意:无        
//=====================================================================//
UCHAR GetMLNum(UCHAR **Menu_List)
{
	UCHAR uiTemp;
//	UCHAR code*Menu_Config;
	uiTemp/*Menu_Config*/ = (unsigned char)**Menu_List;
//	uiTemp = (UCHAR)*Menu_Config;
	return uiTemp-1;
}
//=====================================================================//
//函数:unsigned int GetMLiNum_Page(unsigned int* Menu_List)
//描述:获取菜单资源在一屏可以显示的菜单项个数函数
//参数: Menu_List    菜单资源链表指针
//返回:菜单项个数
//注意:无        
//=====================================================================//
UCHAR GetMLiNum_Page(UCHAR** Menu_List)
{
	UCHAR uiTemp;
	UCHAR *Menu_Config;
	Menu_Config = (UCHAR *)(Menu_List[0]);
	uiTemp = *(Menu_Config+3);
	uiTemp = (Dis_Y_MAX+1)/uiTemp;			//
	return uiTemp;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -