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

📄 osd.c

📁 NT68617源程序代码集合
💻 C
📖 第 1 页 / 共 3 页
字号:
********************************************************************************
*/
void OsdWinGradient(uint8 win, uint8 Ctrl1, uint8 Ctrl2)
{
	WrScalarRegBit(rP0A5, win, B0000_0111);
	WrScalarReg(rP0A3, Ctrl1);
	WrScalarReg(rP0A4, Ctrl2);
}
#endif


/*
********************************************************************************
* 	函 数 名: OsdLoadBlankFont
* 	功能描述: 载入空白字符的字库
* 	输    入: 无
* 	返    回: 无
********************************************************************************
*/
void OsdLoadBlankFont(void)
{
	WrScalarPort(PORT_OSD_1BF, 0x00, Osd1bitFont_Common, 27);
}


/*
********************************************************************************
* 	函 数 名: OsdAttrib
* 	功能描述: 设置OSD显示的属性,因此在调用OSD的字符及字符串显示时,要先调用这个
*             函数设置显示的属性
* 	输    入: Attrib	: 属性字节,其意义如下
*                       : [7-4] 背景颜色
*                       : [3-2] 选择字形类别
*                               00 单色字符,索引为:0-255
*                               01 单色字符,索引为:256-511
*                               10 四色字符
*                               11 16色字符
*             color		: 字符的颜色
* 	返    回: 无
********************************************************************************
*/
void OsdAttrib(uint8 Attrib, uint8 color)
{
	WrScalarReg(rP0CC, Attrib);
	Attrib &= 0x0C;
	if (Attrib == OSD_2BITFONT || Attrib == OSD_4BITFONT)  
		WrScalarReg(rP0CD, color);
	else  
		WrScalarReg(rP0CD, color - 1);
}


/*
********************************************************************************
* 	函 数 名: OsdShowStr
* 	功能描述: 在指定位置显示字符串
* 	输    入: x		: 水平位置
*             y		: 垂直位置
*             str	: 字符指针
*             num	: 字符串的字符数
* 	返    回: 无
*   注    意: 字符显示的颜色和属性在OsdColor,OsdAttr中定义
********************************************************************************
*/

void OsdShowStr(uint8 x, uint8 y, uint8 *str, uint16 num)
{
	WrScalarPort(PORT_OSD_HCRA, (uint16)y * OsdFrameWidth + x, str, num);
}


/*
********************************************************************************
* 	函 数 名: OsdShowChar
* 	功能描述: 在指定位置显示字符
* 	输    入: x		: 水平位置
*             y		: 垂直位置
*             c	    : 要显示的字符
* 	返    回: 无
*   注    意: 字符显示的颜色和属性在OsdColor,OsdAttr中定义,因此要预先定义字符
*             的显示属性
********************************************************************************
*/
void OsdShowChar(uint8 x, uint8 y, uint8 c)
{
	WrScalarPort(PORT_OSD_HCRA, (uint16)y * OsdFrameWidth + x, &c, 1);
}

#if EN_ACEROSD
void OsdShowIconFrame(uint8 x, uint8 y, uint8 Icon)
{
	uint8 i, buf[1];

	buf[0] = Icon;
	OsdShowStr(x, y, buf, 1);						//LEFT TOP ICON

	buf[0] = Icon + 1;
	for(i=0; i<4; i++)	OsdShowStr(x+1+i, y, buf, 1);	//MID-TOP ICON * 4

	buf[0] = Icon + 2;
	OsdShowStr(x+5, y, buf, 1);						//RIGHT-TOP ICON

	buf[0] = Icon + 3;
	for(i=0; i<2; i++)	OsdShowStr(x, y+1+i, buf, 1);	//LEFT MID ICON * 2

	buf[0] = Icon + 4;
	for(i=0; i<2; i++)	OsdShowStr(x+5, y+1+i, buf, 1);	//RIGHT MID ICON * 2

	buf[0] = Icon + 5;
	OsdShowStr(x, y+3, buf, 1);						//LEFT BOTTOM ICON

	buf[0] = Icon + 6;
	for(i=0; i<4; i++)	OsdShowStr(x+1+i, y+3, buf, 1);	//MID BOTTOM ICON * 4

	buf[0] = Icon + 7;
	OsdShowStr(x+5, y+3, buf, 1);		//RIGHT BOTTOM ICON
}
#endif

void OsdShowIcon(uint8 x, uint8 y, uint8 Icon)
{
#if EN_ACEROSD
	uint8 buf[4];

	buf[0] = Icon;			buf[1] = Icon + 1; 		buf[2] = Icon + 2;
	buf[3] = Icon + 3;		//buf[4] = Icon + 4;		buf[5] = Icon + 5;
	OsdShowStr(x, y, buf, 3);

	buf[0] = Icon + 3;		//buf[4] = Icon + 4;		buf[5] = Icon + 5;
	OsdShowStr(x+3, y, buf, 1);
	buf[0] = Icon + 4;		buf[1] = Icon + 5; 		buf[2] = Icon + 6;
	buf[3] = Icon + 7;		//buf[4] = Icon + 10;		buf[5] = Icon + 11;
	OsdShowStr(x, y + 1, buf, 4);
#else
	uint8 buf[3];
	Icon = Icon * 6;
	buf[0] = Icon;		buf[1] = Icon + 1; 	buf[2] = Icon + 2;
	OsdShowStr(x, y, buf, 3);
	buf[0] = Icon + 3;	buf[1] = Icon + 4;	buf[2] = Icon + 5;
	OsdShowStr(x, y + 1, buf, 3);
#endif
}


#if EN_ACEROSD
void OsdShowSubFrame(uint8 x, uint8 y, uint8 Icon)
{
	uint8 i,buf[1];

	for(i=0; i<3; i++)
	{
		buf[0] = Icon++;
		OsdShowStr(x, y-1+i, buf, 1);
	}

	for(i=0; i<3; i++)
	{
		buf[0] = Icon++;
		OsdShowStr(SubMenuWin.He, y-1+i, buf, 1);
	}

	buf[0] = Icon++;
	for(i=x+1; i<VALROLL_POSX+1; i++)				OsdShowStr(i, y-1, buf, 1);
	for(i=VALROLL_POSX+11; i<SubMenuWin.He; i++)	OsdShowStr(i, y-1, buf, 1);
//	for(i=x+1; i<SubMenuWin.He; i++)	OsdShowStr(i, y-1, buf, 1);

	buf[0] = Icon++;
	for(i=x+1; i<VALROLL_POSX+1; i++)				OsdShowStr(i, y+1, buf, 1);
	for(i=VALROLL_POSX+11; i<SubMenuWin.He; i++)	OsdShowStr(i, y+1, buf, 1);
}

void OsdCancelSubFrame(void)
{
	OsdAttrib(OSD_2BITFONT, PALETTE_SUBSCROLL_NONE);
	OsdShowSubFrame(SubMenuWin.Hs, SubMenuCursor * 2 + SubMenuWin.Vs + 3, ICON_SUBFRAME);
	OsdShowRollFrame(VALROLL_POSX, SubMenuCursor * 2 + SubMenuWin.Vs + 3);
}
#endif


/*
*********************************************************************************
* 	函 数 名: OsdCursor
* 	功能描述: 在指定位置,以指定的颜色显示光标
* 	输    入: Pos		: 光标位置
*			  color		: 光标颜色
* 	返    回: 无
********************************************************************************
*/
void OsdCursor(uint8 Pos, uint8 color)
{
#if EN_ACEROSD
	OSDWIN xdata curwin;

	// 禁止光标显示

	OsdDisWindow(WIN3);
	curwin.No = WIN3;
#if 0
	curwin.Hs = 6;
	curwin.He = OSD_FRAME_WIDTH - 1;
	curwin.Vs = Pos - 1;
	curwin.Ve = Pos + 1;
#else
	curwin.Hs = 7;
	curwin.He = OSD_FRAME_WIDTH - 2;
	curwin.Vs = Pos;
	curwin.Ve = Pos;
#endif
	curwin.Attr = 0;//WIN_EN_BEVEL + WIN_BL_TYPE2;
	curwin.BL_LCL = color;
	curwin.BL_RCL = color;
	curwin.BL_Width = 0x00;
	curwin.Color = color;

	if(Flg_ParAdj)
	{
		OsdSetWin(&curwin);
		OsdAttrib(OSD_2BITFONT, PALETTE_SUBFRAME_SEL);
		OsdShowSubFrame(curwin.Hs-1, curwin.Vs, ICON_SUBFRAME);
		OsdAttrib(OSD_2BITFONT, PALETTE_VALSCL_BLANK_SEL);
		OsdShowRollFrame(VALROLL_POSX, curwin.Vs);
	}
	else
	{
		OsdAttrib(OSD_2BITFONT, PALETTE_SUBFRAME);
		OsdShowSubFrame(curwin.Hs-1, curwin.Vs, ICON_SUBFRAME);
		OsdAttrib(OSD_2BITFONT, PALETTE_VALSCL_BLANK);
		OsdShowRollFrame(VALROLL_POSX, curwin.Vs);
	}
	
#else
	OSDWIN xdata curwin;

	// 禁止光标显示
	OsdDisWindow(WIN1);

	curwin.No = WIN1;
	curwin.Hs = 2;
	curwin.He = OSD_FRAME_WIDTH - 3;
	curwin.Vs = Pos;
	curwin.Ve = Pos;
	curwin.Attr = WIN_EN_BEVEL + WIN_BL_TYPE2;
	curwin.BL_LCL = WHITE;
	curwin.BL_RCL = DARKGRAY;
	curwin.BL_Width = 0x00;
	curwin.Color = color;

	OsdSetWin(&curwin);
#endif
}


/*
*********************************************************************************
* 	函 数 名: OsdDisCursor
* 	功能描述: 禁止光标显示
* 	输    入: 无
* 	返    回: 无
********************************************************************************
*/
void OsdDisCursor(void)
{
	OsdDisWindow(WIN3);
}


/*
*********************************************************************************
* 	函 数 名: OsdKeyCancelCursor
* 	功能描述: 取消主光标显示
* 	输    入: 无
* 	返    回: 无		//chen 08-04-16
********************************************************************************
*/
#if EN_ACEROSD
void OsdKeyCancelCursor(void)
{
#if USE_AUDIO
	OsdAttrib(OSD_2BITFONT, VgaKeyItem[KeyMenuCursor][0][0]);
	OsdShowIcon(1, SubMenuWin.Vs + 1 + KeyMenuCursor * 4, VgaKeyItem[KeyMenuCursor][0][1]);
	
	OsdAttrib(OSD_2BITFONT, VgaKeyItem[5][0][0]);
	OsdShowIconFrame(0, SubMenuWin.Vs + KeyMenuCursor * 4, VgaKeyItem[5][0][1]);
#else
	OsdAttrib(OSD_2BITFONT, VgaKeyItem[KeyMenuCursor][0][0]);
	OsdShowIcon(1, SubMenuWin.Vs + 1 + KeyMenuCursor * 4, VgaKeyItem[KeyMenuCursor][0][1]);

	OsdAttrib(OSD_2BITFONT, VgaKeyItem[4][0][0]);
	OsdShowIconFrame(0, SubMenuWin.Vs + KeyMenuCursor * 4, VgaKeyItem[4][0][1]);
#endif
	OsdDisWindow(WIN2);	//chen 08-05-19
}
#endif


/*
*********************************************************************************
* 	函 数 名: OsdKeyCursor
* 	功能描述: 显示主光标,这个光标在OSD的顶部,总是会显示
* 	输    入: 无
* 	返    回: 无
********************************************************************************
*/
void OsdKeyCursor(void)
{
#if EN_ACEROSD
	OSDWIN xdata KeyCursorWin;

	OsdDisWindow(WIN2);

	KeyCursorWin.No = WIN2;
	KeyCursorWin.Hs = 0;
	KeyCursorWin.He = 5;
	KeyCursorWin.Vs = KeyMenuCursor * 4 + SubMenuWin.Vs;
	KeyCursorWin.Ve = KeyCursorWin.Vs + 3;
	KeyCursorWin.Attr = 0;	//WIN_EN_BEVEL + WIN_BL_TYPE2;
	KeyCursorWin.BL_LCL = BACKWINPALETTE;
	KeyCursorWin.BL_RCL = BACKWINPALETTE;
	KeyCursorWin.BL_Width = 0x00;
	KeyCursorWin.Color = SUBWINPALETTE;

	OsdAttrib(OSD_2BITFONT, VgaKeyItem[KeyMenuCursor][1][0]);
	OsdShowIcon(KeyCursorWin.Hs + 1, KeyCursorWin.Vs + 1, VgaKeyItem[KeyMenuCursor][1][1]);
#if USE_AUDIO
	OsdAttrib(OSD_2BITFONT, VgaKeyItem[5][1][0]);
	OsdShowIconFrame(KeyCursorWin.Hs, KeyCursorWin.Vs, VgaKeyItem[5][1][1]);
#else
	OsdAttrib(OSD_2BITFONT, VgaKeyItem[4][1][0]);
	OsdShowIconFrame(KeyCursorWin.Hs, KeyCursorWin.Vs, VgaKeyItem[4][1][1]);
#endif
	OsdSetWin(&KeyCursorWin);

#else
	uint8 xdata buf[7];

	// 禁止光标显示
	OsdDisWindow(WIN2);

	// 更新光标的位置
#if USE_AUDIO
		buf[0] = (KeyMenuCursor << 2) + 2;
#else
	buf[0] = KeyMenuCursor * 5 + 2;
#endif
	buf[1] = buf[0] + 2;
	buf[2] = 1;
	buf[3] = 2;
	buf[4] = WIN_EN_SHADOW + WIN_SDSZ_4;
	buf[5] = BLUE;
	buf[6] = BLACK;
	WrScalarRegBit(rP0A5, WIN2, 0x07);
	WrScalarBytes(rP0A6, 0x07, buf);

	// 允许光标显示
	OsdEnWindow(WIN2);
#endif
}


/*
*********************************************************************************
* 	函 数 名: OsdClearLine
* 	功能描述: 清除一行的显示, 方法是用空白字符去填,
* 	输    入: line   : 指定要清除的行
* 	返    回: 无
********************************************************************************
*/
void OsdClearLine(uint8 line)
{
#if EN_ACEROSD
	OsdShowStr(SubMenuWin.Hs, line, Osd1bitFont_Common, OSD_FRAME_WIDTH - 6);
#else
	OsdShowStr(1, line, Osd1bitFont_Common, OSD_FRAME_WIDTH - 2);
#endif
}



/*
********************************************************************************
* 	函 数 名: OsdShowPercent
* 	功能描述: 在指定的位置显示百分比
* 	输    入: x			: 水平起始位置,单位字符
*             y			: 垂直起始位置,单位字符
*             val		: 要显示的百分数
* 	返    回: 无
*   注    意: 显示的颜色和属性需要预先通过OsdAttrib进行定义
********************************************************************************
*/
void OsdShowPercent(uint8 x, uint8 y, uint8 val)
{
	uint8 xdata buf[5];
	uint8 i;

	buf[0] = 0x00;
	buf[1] = 0x00;
	i = HexToDisp(0, val, buf + 2);
	OsdShowStr(x, y, buf + i - 1, 3);
}


#if 0
/*
********************************************************************************
* 	函 数 名: OsdShowInfo
* 	功能描述: 在指定的位置显示百分比
* 	输    入: x			: 水平起始位置,单位字符
*             y			: 垂直起始位置,单位字符
*             val		: 要显示的百分数
* 	返    回: 无
*   注    意: 显示的颜色和属性需要预先通过OsdAttrib进行定义
********************************************************************************
*/
void OsdShowInfo(uint8 x, uint8 y, uint16 val)
{
	uint8 xdata buf[5];
	uint8 i;

	for (i = 0; i < 5; i++) buf[i] = __;
	HexToDisp(val, buf);
	OsdShowStr(x, y, buf, 5);
}
#endif


#if EN_ACEROSD
/*
********************************************************************************
* 	函 数 名: OsdShowSubFrame
* 	功能描述: 在指定的位置显示辅助滚动条
* 	输    入: x			: 水平起始位置,单位字符
*             y			: 垂直起始位置,单位字符
*             val		: 要显示的百分数
*             len       : 滚动条的有效长度,不含其它的修饰符,最长不能大于16
* 	返    回: 无
*   注    意: 显示的颜色和属性需要预先通过OsdAttrib进行定义
********************************************************************************
*/
#define ICON_ROLL_L		ICON_ROLL
#define ICON_ROLL_R		ICON_ROLL_L+1
#define ICON_ROLL_EMPTY	ICON_ROLL_L+2
#define ICON_ROLL_1		ICON_ROLL_L+3
#define ICON_ROLL_2		ICON_ROLL_L+4
#define ICON_ROLL_3		ICON_ROLL_L+5
#define ICON_ROLL_4		ICON_ROLL_L+6
#define ICON_ROLL_FULL	ICON_ROLL_L+7

void OsdShowRollFrame(uint8 x, uint8 y)
{
	uint8 i;
	uint8 xdata buf[10];
	
	if(MenuState == MENU_SUB)
	{
		for(i=0; i<10; i++)		buf[i] = ICON_ROLL_BLANK;
		OsdShowStr(x+1, y-1, buf, 10);

		for(i=0; i<10; i++)		buf[i] = ICON_ROLL_BLANK + 1;
		OsdShowStr(x+1, y+1, buf, 10);	
	}

}

void OsdShowValScroll(uint8 x, uint8 y, uint8 val)
{
	uint8 i,tmpData,index;
	uint8 tmpColor;
	uint8 xdata buf[12];

	if(Flg_ParAdj)	tmpColor = PALETTE_VALSCROLL_LR + 2;
	else			tmpColor = PALETTE_VALSCROLL_LR;
	
	buf[0] = ICON_ROLL_L;

	if(val>100)	val = 100;	//可以不加此句	08-04-18
	index = val / 10;
	for(i=1; i<index+1; i++)		buf[i] = ICON_ROLL_FULL;

	if(val % 10)	

⌨️ 快捷键说明

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