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

📄 menu.c

📁 NT68617源程序代码集合
💻 C
📖 第 1 页 / 共 4 页
字号:
/*
********************************************************************************
*
*	                                LCD控制程序
*
*	                             这是一个菜单模块
*
*	文件名	: MENU.C
*	设计者	: Terry
********************************************************************************
*                                   功 能 描 述
*
*		完成自动调整处理,该自动调整包括:
*       时钟,时钟相位,水平位置,垂直位置
********************************************************************************
*/
#include "osd.h"
#include "global.h"
#include "scalar.h"

#define ShortAdjStrColor		YELLOW

uint8 KeyMenuCursor;
uint8 SubMenuCursor;
uint8 xdata MaxSubMenuItem;
uint8 MenuState;					// 菜单状态
uint8 xdata FontIndexBuf;

static void MenuShowKey(void);
static void MenuVgaSubItem(void);
static void MenuDviSubItem(void);
static void MenuShowExit(void);
static void MenuShowSubItem5(void);
static void ShowSubItemAudio(void);
static void MenuShowShortBri(void);
static void MenuShowShortCon(void);
#if EN_ACEROSD
static void MenuShowSubItemOSD(void);
#endif
static void MenuShowSubItemAudio(void);
static void MenuShowSubItemTools(void);
#if EN_ACEROSD
#else
static void MenuShowReturn(void);
static void MenuShowSubItemGBC(void);
static void MenuShowSubItemColor(void);
#endif
void MenuShowRes(void);

	// No;			窗口号
	// Hs;			水平起始位置,单位是字符
	// He;			水平结束位置,单位是字符
	// Vs;			垂直起始位置,单位是字符
	// Ve;			垂直结束位置,单位是字符
	// Attr;		窗口属性
	// Color;		窗口的背景颜色,将取代字符的背景色
	// SdColor;		阴影的颜色
	// BL_Width;	窗口边框的宽度
	// BL_RCL;		窗口边框的右边颜色
	// BL_LCL;		窗口边框的左边颜色

/*
********************************************************************************
* 	函 数 名: MenuInit
* 	功能描述: 菜单系统初始化
* 	输    入: 无
* 	返    回: 无
********************************************************************************
*/
void MenuInit(void)
{
	MenuState			= MENU_OFF;		// 菜单状态
	KeyMenuCursor       = 0;
}


uint8 code LangIndex[] = {0, 1, 2, 3, 4, 5, 6, 6, 7, 8, 9};
/*
********************************************************************************
* 	函 数 名: MenuGetStrPos
* 	功能描述: 根据系统当前所选择的语言,从变长字符串当中返回字符串的起始位置
* 	输    入: str    : 字符型指针,指向要处理的字符数组
* 	返    回: 变长的多国语言字符的起始位置。起始的第一个字符是字符串的长度,紧
*             接着是字符的内容。
********************************************************************************
*/
uint16 MenuGetStrPos(uint8 *str)
{
	uint16 Pos;
	uint8 i,lang;

	Pos = 0;
	lang = LangIndex[Language];
	for (i = 0; i< lang; i++)  {
		Pos += str[Pos] + 1;
		}
	return Pos;
}


/*
********************************************************************************
* 	函 数 名: MenuShowStr
* 	功能描述: 显示多国语言字符串, 
* 	输    入: x		: 水平位置
*             y		: 垂直位置
*			  str	: 字符串指针
*             color	: 显示颜色
* 	返    回: str指向多国语变长字符串。起始的第一个字符是字符串的长度,紧
*             接着是字符的内容。
********************************************************************************
*/
void MenuShowStr(uint8 x, uint8 y, uint8 *str, uint8 color)
{
	uint16 Pos;
	uint8 i, lang;

	Pos = 0;
	lang = LangIndex[Language];
	for (i = 0; i< lang; i++)  {
		Pos += str[Pos] + 1;
		}
	OsdAttrib(OSD_1BITFONT, color);
	OsdSpecPrint(x, y, str + Pos);
}


#if USE_AUDIO
	#if EN_ACEROSD
	uint8 code VgaKeyItem[6][2][2] = {
	{{0x10, ICON_PICTURE},	{0x14, ICON_PICTURE}},		//Picture
	{{0x18, ICON_OSD},	{0x14, ICON_OSD}},		//OSD
	{{0x18, ICON_AUDIO}, {0x1C, ICON_AUDIO}},		//Audio
	{{0x20, ICON_TOOLS}, {0x24, ICON_TOOLS}},		//Tools
	{{0x28, ICON_INFORMATION}, {0x2C, ICON_INFORMATION}},		//Information
	{{0x30, ICON_KEYFRAME}, {0x34, ICON_KEYFRAME}},		//KeyFrame
	};
	#else
	uint8 code VgaKeyItem[6][2] = {
	{0x10, 0}, 	//Picture
	{0x14, 1}, 	//OSD
	{0x18, 2}, 	//Audio
	{0x20, 3},		//Tools
	{0x24, 4},  	//Information
	{0x28, 5},  	//KeyFrame
	};
	#endif
#else
	#if EN_ACEROSD
	uint8 code VgaKeyItem[5][2][2] = {
	{{0x10, ICON_PICTURE},	{0x14, ICON_PICTURE}},		//Picture
	{{0x18, ICON_OSD},	{0x14, ICON_OSD}},		//OSD
//	{{0x18, ICON_AUDIO}, {0x1C, ICON_AUDIO}},		//Audio
	{{0x20, ICON_TOOLS}, {0x24, ICON_TOOLS}},		//Tools
	{{0x28, ICON_INFORMATION}, {0x2C, ICON_INFORMATION}},		//Information
	{{0x30, ICON_KEYFRAME}, {0x34, ICON_KEYFRAME}},		//KeyFrame
	};
	#else
	uint8 code VgaKeyItem[5][2] = {
	{0x10, 0},
	{0x14, 1},
	{0x18, 2},
	{0x20, 4},
	{0x24, 5},
	};
	#endif
#endif


OSDWIN code KeyMenuWin = {
	WIN7,				// No;			窗口号
	0,					// Hs;			水平起始位置,单位是字符
	OSD_FRAME_WIDTH-1,	// He;			水平结束位置,单位是字符
	0,					// Vs;			垂直起始位置,单位是字符
	1,					// Ve;			垂直结束位置,单位是字符
	0x00,				// Attr;		窗口属性
	LIGHTGRAY,			// Color;		窗口的背景颜色,将取代字符的背景色
	DARKGRAY,			// SdColor;		阴影的颜色
	0x02,				// BL_Width;	窗口边框的宽度
	DARKGRAY,			// BL_RCL;		窗口边框的右边颜色
	WHITE,				// BL_LCL;		窗口边框的左边颜色
};

OSDWIN code BackMenuWin = {
#if EN_ACEROSD
	WIN8,				// No;			窗口号
	0,					// Hs;			水平起始位置,单位是字符
	OSD_FRAME_WIDTH-1,	// He;			水平结束位置,单位是字符
	0,					// Vs;			垂直起始位置,单位是字符
	OSD_FRAME_HEIGHT-1, // Ve;			垂直结束位置,单位是字符
	0,//	WIN_EN_BEVEL + WIN_BL_TYPE2,				// Attr;		窗口属性
	BACKWINPALETTE,			// Color;		窗口的背景颜色,将取代字符的背景色
	DARKGRAY,			// SdColor; 	阴影的颜色
	0x00,				// BL_Width;	窗口边框的宽度
	DARKGRAY,			// BL_RCL;		窗口边框的右边颜色
	WHITE,				// BL_LCL;		窗口边框的左边颜色

#else
	WIN8,				// No;			窗口号
	0,					// Hs;			水平起始位置,单位是字符
	OSD_FRAME_WIDTH-1,	// He;			水平结束位置,单位是字符
	0,					// Vs;			垂直起始位置,单位是字符
	OSD_FRAME_HEIGHT-1,	// Ve;			垂直结束位置,单位是字符
	WIN_EN_BEVEL + WIN_BL_TYPE2,				// Attr;		窗口属性
	LIGHTGRAY,			// Color;		窗口的背景颜色,将取代字符的背景色
	DARKGRAY,			// SdColor;		阴影的颜色
	0x00,				// BL_Width;	窗口边框的宽度
	DARKGRAY,			// BL_RCL;		窗口边框的右边颜色
	WHITE,				// BL_LCL;		窗口边框的左边颜色
#endif
};


#if EN_ACEROSD
/*
********************************************************************************
* 	函 数 名: MenuShowMainCornerIcon
* 	功能描述: 显示主菜单四个倒角的图标+ 主菜单背景图标
* 	输    入: 无
* 	返    回: 无	//08-04-17
********************************************************************************
*/
static void MenuShowMainCornerIcon(void)
{
	uint8 Icon;
	uint8 xdata buf[7];
	
	OsdAttrib(OSD_2BITFONT, PALETTE_MAINCORNER);

	Icon = ICON_MAINCORNER;
	buf[0] = Icon++;
	OsdShowStr(BackMenuWin.Hs,BackMenuWin.Vs,buf,1);
	buf[0] = Icon++;
	OsdShowStr(BackMenuWin.He,BackMenuWin.Vs,buf,1);
	buf[0] = Icon++;
	OsdShowStr(BackMenuWin.Hs,BackMenuWin.Ve,buf,1);
	buf[0] = Icon++;
	OsdShowStr(BackMenuWin.He,BackMenuWin.Ve,buf,1);

	OsdAttrib(OSD_2BITFONT, WHITE - 1);
	for(Icon=0; Icon<7; Icon++) 	buf[Icon] = ICON_LOGOTEST + Icon;
	OsdShowStr(BackMenuWin.Hs+1, BackMenuWin.Vs+1,buf,7);
}
#endif


/*
********************************************************************************
* 	函 数 名: MenuShowKey
* 	功能描述: 显示主菜单项目,6个3*2的图标,
* 	输    入: 无
* 	返    回: 无
********************************************************************************
*/
static void MenuShowKey(void)
{
	uint8 i;
	
#if EN_ACEROSD
	#if USE_AUDIO
		for (i = 0; i < 5; i++)
		{
			OsdAttrib(OSD_2BITFONT, VgaKeyItem[i][0][0]);
			OsdShowIcon(BackMenuWin.Hs + 1, BackMenuWin.Vs + SubMenuWin.Vs + 1 + i * 4, VgaKeyItem[i][0][1]);

			OsdAttrib(OSD_2BITFONT, VgaKeyItem[5][0][0]);
			OsdShowIconFrame(BackMenuWin.Hs, BackMenuWin.Vs + SubMenuWin.Vs + i * 4, VgaKeyItem[5][0][1]);
		}

	#else
	for (i = 0; i < 4; i++)
	{
		OsdAttrib(OSD_2BITFONT, VgaKeyItem[i][0][0]);
		OsdShowIcon(BackMenuWin.Hs + 1, BackMenuWin.Vs + SubMenuWin.Vs + 1 + i * 4, VgaKeyItem[i][0][1]);
		
		OsdAttrib(OSD_2BITFONT, VgaKeyItem[4][0][0]);
		OsdShowIconFrame(BackMenuWin.Hs, BackMenuWin.Vs + SubMenuWin.Vs + i * 4, VgaKeyItem[4][0][1]);
	}
	#endif
#else
	#if USE_AUDIO
		for (i = 0; i < 6; i++)
		{
			OsdAttrib(OSD_2BITFONT, VgaKeyItem[i][0]);
			OsdShowIcon(BackMenuWin.Hs + 2 + (i<<2), BackMenuWin.Vs + 1, VgaKeyItem[i][1]);
		}
	#else
	for (i = 0; i < 5; i++)  {
		OsdAttrib(OSD_2BITFONT, VgaKeyItem[i][0]);
		OsdShowIcon(BackMenuWin.Hs + 2 + i * 5, BackMenuWin.Vs + 1, VgaKeyItem[i][1]);
		}
	#endif
#endif
}


OSDWIN code SubMenuWin = {
#if EN_ACEROSD
	WIN7,				// No;			窗口号
	6,					// Hs;			水平起始位置,单位是字符
	OSD_FRAME_WIDTH-1,	// He;			水平结束位置,单位是字符
	3,					// Vs;			垂直起始位置,单位是字符
	OSD_FRAME_HEIGHT-4,	// Ve;			垂直结束位置,单位是字符
	//WIN_EN_BEVEL + WIN_BL_TYPE2 + WIN_EN_MIX,			// Attr;		窗口属性
	0,					//WIN_EN_BEVEL + WIN_BL_TYPE2,
	SUBWINPALETTE,
	DARKGRAY,			// SdColor;		阴影的颜色
	0x00,				// BL_Width;	窗口边框的宽度
	WHITE,				// BL_RCL;		窗口边框的右边颜色
	DARKGRAY,	

#else
	WIN7,				// No;			窗口号
	1,					// Hs;			水平起始位置,单位是字符
	OSD_FRAME_WIDTH-2,	// He;			水平结束位置,单位是字符
	4,					// Vs;			垂直起始位置,单位是字符
	OSD_FRAME_HEIGHT-2,	// Ve;			垂直结束位置,单位是字符
	//WIN_EN_BEVEL + WIN_BL_TYPE2 + WIN_EN_MIX,			// Attr;		窗口属性
	WIN_EN_BEVEL + WIN_BL_TYPE2,
	LIGHTGRAY,			// Color;		窗口的背景颜色,将取代字符的背景色
	DARKGRAY,			// SdColor;		阴影的颜色
	0x00,				// BL_Width;	窗口边框的宽度
	WHITE,				// BL_RCL;		窗口边框的右边颜色
	DARKGRAY,			// BL_LCL;		窗口边框的左边颜色
#endif
};

/*
********************************************************************************
* 	函 数 名: MenuShowSubItem
* 	功能描述: 显示不同输入信号条件下,各个子菜单的条目
* 	输    入: 无
* 	返    回: 无
*   注    意: 不同的输入条件下采用不同的菜单内容
********************************************************************************
*/
#if EN_ACEROSD
void MenuShowSubBlankIcon(uint8 x, uint8 y, uint8 Height)
{
	uint8 i;
	uint8 xdata buf[10];

	for(i=0;i<10;i++)	buf[i] = ICON_BLANK;
	
	OsdAttrib(OSD_2BITFONT, BACKWINPALETTE);
	for(i=y; i<Height+1; i=i+2)
	OsdShowStr(x,i,buf,10);
}
#endif

void MenuShowSubItem(void)
{
#if EN_ACEROSD
	OSDWIN xdata CursonWin;

	OsdDisWindow(WIN1);
	CursonWin.No = WIN1;
	CursonWin.Hs = SubMenuWin.He - 14;
	CursonWin.He = CursonWin.Hs + 9;
	CursonWin.Vs = 0;
	CursonWin.Ve = 0;
	CursonWin.Attr = 0;//WIN_EN_BEVEL + WIN_BL_TYPE2;
	CursonWin.BL_LCL = PALETTE_VALSCROLL;
	CursonWin.BL_RCL = PALETTE_VALSCROLL;
	CursonWin.BL_Width = 0x00;
	CursonWin.Color = PALETTE_VALSCROLL;
#endif

	FontIndex = FontIndexBuf;
	Alignment = LEFT;

#if EN_ACEROSD
	StringWidth = SubMenuWin.He - SubMenuWin.Hs - 1;
	FontIndexBackup[9] = FontIndex;
#else
	StringWidth = OSD_FRAME_WIDTH - 4;
#endif


	switch (KeyMenuCursor) {
#if EN_ACEROSD
		case 0:
	#if USE_DAEWOO
			CursonWin.Vs = SubMenuWin.Vs + 2;
			CursonWin.Ve = CursonWin.Vs + 12;
	#else
			CursonWin.Vs = SubMenuWin.Vs + 4;
			CursonWin.Ve = CursonWin.Vs + 12;
	#endif
			MenuShowSubItemImage();	//须增加部分参数 08-04-16
			OsdSetWin(&CursonWin);
			MenuShowSubBlankIcon(CursonWin.Hs, CursonWin.Vs, CursonWin.Vs + 2 * 6);
			break;

		case 1:
			CursonWin.Vs = SubMenuWin.Vs + 2;
			CursonWin.Ve = CursonWin.Vs + 6;
			MenuShowSubItemOSD();
			OsdSetWin(&CursonWin);
			MenuShowSubBlankIcon(CursonWin.Hs, CursonWin.Vs, CursonWin.Vs + 2 * MaxSubMenuItem);
//			MenuShowSubItemColor();
			break;

	#if USE_AUDIO
		case 2:
			CursonWin.Vs = SubMenuWin.Vs + 4;
			CursonWin.Ve = CursonWin.Vs + 2;
			MenuShowSubItemAudio();
			OsdSetWin(&CursonWin);
			MenuShowSubBlankIcon(CursonWin.Hs, CursonWin.Vs, CursonWin.Vs + 2);
			break;

		case 3:
			CursonWin.Vs = SubMenuWin.Vs + 12;
			CursonWin.Ve = CursonWin.Vs + 2;
			MenuShowSubItemTools();

⌨️ 快捷键说明

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