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

📄 osd.c

📁 NT68617源程序代码集合
💻 C
📖 第 1 页 / 共 3 页
字号:
/*
********************************************************************************
*
*	                                LCD控制程序
*
*	                        这是SCALAR当中与OSD相关的部分
*
*	文件名	: OSD.C
*	设计者	: Terry
********************************************************************************
*                                   功 能 描 述
*
*		1. 这一模块存放了OSD操作的接口函数,至于和SCALAR打交道的底层则在I2CIO.C中
*       2. OSD.H是必须被包含进来的,这个文件定义了OSD接口的常数以及函数
********************************************************************************
*/
#include "osd.h"
#include "scalar.h"

uint8 xdata OsdFrameWidth;

#if PanelWidth > 640
#define EN_DOUBLE_FONT			1	// (0)表示禁止,(1)表示允许,提示信息采用放大处理
#else
#define EN_DOUBLE_FONT			0	// (0)表示禁止,(1)表示允许,提示信息采用放大处理
#endif

uint8 code Icon_MuteOn[2] 			= {0x1B, 0x1C};
uint8 code Icon_MuteOff[2] 		= {0x19, 0x1A};
uint8 code Icon_Exit[2] 			= {0x17, 0x18};
uint8 code Icon_Return[2] 			= {0x25, 0x00};
uint8 code Icon_6500[2]			= {0x11, 0x14};
uint8 code Icon_9300[2]			= {0x13, 0x14};
uint8 code Icon_User[2]			= {0x15, 0x16};
uint8 code Icon_State_9300[2]		= {0x21, 0x24};
uint8 code Icon_State_6500[2]		= {0x23, 0x24};
uint8 code Icon_State_User[2]		= {0x1F, 0x20};
uint8 code Icon_State_Analog[2]	= {0x1D, 0x1D};
uint8 code Icon_State_Digital[2]	= {0x1E, 0x1E};

uint8 code Icon_Move[2]	=	{0x28, 0x29};
uint8 code Icon_MoveR[2]	=	{0x29, 0x00};
uint8 code Icon_Auto[3]	=	{0x2A, 0x2B, 0x2C};	//,0x32};
uint8 code Icon_Menu[3]	=	{0x2D, 0x2E, 0x2F};//,0x35}; 

/*
********************************************************************************
*	关于NT68521调色板的说明
*	1. NT68521中的调色板共有256项,根据其显示属性的描述可以在同一时间里选择256种
*	   前景颜色和16种背景颜色
*	2. 调色板的每一项由16位构成,R,G,B各占5/6/6位,
*       15         15:11   10:5   4:0
*		Reserved     R      G     B
*   3. 调色板每一项16位的存放格式是,低8位在前,高8位在后
*   4. 我们在使用时要视情况而定,不一定要使用到全部的调色板
********************************************************************************
*/
uint8 code Palette1BitTable[] = {				//	系统默认的调色板数据
   LOWBYTE(R00+G00+B00), HIGHBYTE(R00+G00+B00), 	// 0 BLACK
   LOWBYTE(R00+G00+B18), HIGHBYTE(R00+G00+B18),	// 1 BLUE
   LOWBYTE(R00+G36+B00), HIGHBYTE(R00+G36+B00),	// 2 GREEN
   LOWBYTE(R00+G50+B25), HIGHBYTE(R00+G50+B25), 	// 3 CYAN	
   LOWBYTE(R18+G00+B00), HIGHBYTE(R18+G00+B00),	// 4 RED	
   LOWBYTE(R18+G00+B18), HIGHBYTE(R18+G00+B18), 	// 5 MAGENTA
   LOWBYTE(R22+G44+B10), HIGHBYTE(R22+G44+B10), 	// 6 BROWN
   LOWBYTE(R20+G40+B20), HIGHBYTE(R20+G40+B20), 	// 7 LIGHTGRAY
   LOWBYTE(R10+G20+B10), HIGHBYTE(R10+G20+B10),	// 8 DARKGRAY
   LOWBYTE(R00+G00+B26), HIGHBYTE(R00+G00+B26), 	// 9 LIGHTBLUE 
   LOWBYTE(R00+G56+B00), HIGHBYTE(R00+G56+B00), 	// A LIGHTGREEN
   LOWBYTE(R00+G63+B31), HIGHBYTE(R00+G63+B31), 	// B LIGHTCYAN 
   LOWBYTE(R31+G00+B00), HIGHBYTE(R31+G00+B00), 	// C LIGHTRED
   LOWBYTE(R31+G00+B31), HIGHBYTE(R31+G00+B31), 	// D LIGHTMAGENTA
   LOWBYTE(R27+G55+B00), HIGHBYTE(R27+G55+B00), 	// E YELLOW	
   LOWBYTE(R31+G63+B31), HIGHBYTE(R31+G63+B31),	// F WHITE
};

#if EN_ACEROSD		//chen 08-04-14
uint8 code Palette2BitTable[]=
{
	//调色板备份
	//	图象图标的调色板	0x09CE,0x4455,0x2455,0xFFFF	
	//0x10-0x13
	0xCE,0x09,	0x55,0x44,	0x55,0x24,	0xFF,0xFF,

	//	图象选中、OSD选中的调色板	0x4455,0xFFFF,0xD708,0xFFFF	
	//0x14-0x17		
	0x55,0x44,	0xFF,0xFF,	0x08,0xD7,	0xFF,0xFF,

	//	OSD图标、音频图标的调色板	0x120F,0x4455,0x2455,0xFFFF
	//0x18-0x1B
	0xCE,0x09,	0x55,0x44,	0xFF,0xFF,	0x55,0x24,

	//	音频图标的调色板	0x5544,0xD708,0xFFFF,0xFFFF		//选择
	//0x1C-0x1F
	0x55,0x44,	0xFF,0xFF,	0xFF,0xFF,	0x08,0xD7,

	//	设置图标的调色板	0x120F,0x4455,0x2455,0xFFFF
	//0x20-0x23
	0xCE,0x09,	0x0F,0x12,	0xFF,0xFF,	0x55,0x24,

	//	设置图标的调色板	0x5544,0xD708,0xFFFF,0xFFFF		//选择
	//0x24-0x27
	0x55,0x44,	0x55,0x44,	0xFF,0xFF,	0x08,0xD7,

	//	退出图标的调色板	0x120F,0x4455,0x2455,0xFFFF
	//0x28-0x2B
	0xCE,0x09,	0x0F,0x12,	0x55,0x24,	0xFF,0xFF,

	//	退出图标的调色板	0x5544,0xD708,0xFFFF,0xFFFF		//选择
	//0x2C-0x2F
	0x55,0x44,	0x55,0x44,	0x08,0xD7,	0xFF,0xFF,

	//	边框图标的调色板	0xFFFF,0x09CE,0x4455,0x120F		
	//	0xFF,0xFF,	0xCE,0x09,	0x55,0x44,	0x0F,0x12,
	//0x30-0x33
	0xFF,0xFF,	0xCE,0x09,	0xCE,0x09,	0x0F,0x12,

	//	边框图标的调色板	0xFFFF,0x09CE, 0xD708,0x4455, 	//选择
	//0x34-0x37
	0xFF,0xFF,	0xCE,0x09,	0x08,0xD7,	0x55,0x44,	

	//  主窗口圆倒角图标的调色板0x09CE,0xB5B6,0xB5D6,0xFFFF
	//0x38-0x3B
	0xCE,0x09,	0xB6,0xB5,	0xB6,0xB5,	0xFF,0xFF,

	//  辅助窗口滚动条图标的调色板0x09CE,0xB5B6,0xB5D6,0xFFFF
	//0x3C-0x3F
	0x55,0x44,	0x08,0xD7,	0x55,0x44,	0xFF,0xFF,

	//  辅助窗口滚动条图标的调色板0x09CE,0xB5B6,0xB5D6,0xFFFF	//选择
	//0x40-0x43
	0x55,0x44,	0x08,0xD7,	0x08,0xD7,	0xFF,0xFF,

	//辅助窗口不显示
	//0x44-0x47
	0x55,0x44,	0x55,0x44,	0x55,0x44,	0x55,0x44,	

	//变量滚动条的调色板	0x5AEB, 0x020C, 0xBEFF, 0x75DF
	//0x48-0x4B
	0xEB,0x5A,	0x0C,0x02,	0xFF,0xBE,	0xDF,0x75,

	//变量滚动条左右图标的调色板	0x5C55, 0x020C, 0xD708, 0x020C, 
	//0x4C-0x4F
	0x55,0x5C,	0x0C,0x02,	0x08,0xD7,	0x0C,0x02,

	//变量滚动条填充图标的调色板0x09CE, 0x001F, 0xD708, 0x07E0,
	//0x50-0x53
	0xCE,0x09,	0x55,0x44,	0x08,0xD7,	0x55,0x44,

	//变量滚动条填充图标的调色板0x09CE, 0x001F, 0xD708, 0x07E0,
	//0x54-0x57
	0xCE,0x09,	0x55,0x44,	0x08,0xD7,	0x08,0xD7,
};

uint8 code Palette2BitTable_Extra[] =
{
	//Logo E图标的调色板0x09CE, 0x0308, 0xFFFF, 0x5C55, 
	0xCE,0X09,	0x08,0x03,	0xFF,0xFF,	0x55,0x5C,

	//Text等图标的调色板0x5C55, 0xBEFF, 0x09CE, 0x0000, 
	0x55,0x5C,	0xFF,0xBE,	0xCE,0x09,	0x00,0x00,

	//Text等图标的调色板0x5C55, 0xD708, 0x09CE, 0x0000, 	//选择
	0x55,0x5C,	0x08,0xD7,	0xCE,0x09,	0x00,0x00,

};

#else
uint8 code Palette2BitTable[]=
{
	//	亮度图标的调色板
	LOWBYTE(R10+G20+B10), HIGHBYTE(R10+G20+B10),
	LOWBYTE(R31+G63+B00), HIGHBYTE(R31+G63+B00),
	LOWBYTE(R10+G20+B10), HIGHBYTE(R10+G20+B10),
	LOWBYTE(R00+G00+B00), HIGHBYTE(R00+G00+B00),

	//	图像图标的调色板
	LOWBYTE(R00+G00+B18), HIGHBYTE(R00+G00+B18),
	LOWBYTE(R31+G63+B31), HIGHBYTE(R31+G63+B31),
	LOWBYTE(R00+G40+B00), HIGHBYTE(R00+G40+B00),
	LOWBYTE(R31+G00+B00), HIGHBYTE(R31+G00+B00),

	//	颜色图标的调色板
	LOWBYTE(R20+G40+B20), HIGHBYTE(R20+G40+B20),
	LOWBYTE(R31+G00+B00), HIGHBYTE(R31+G00+B00),
	LOWBYTE(R00+G00+B18), HIGHBYTE(R00+G00+B18),
	LOWBYTE(R31+G63+B00), HIGHBYTE(R31+G63+B00),

	//	音频图标的调色板	0x0010,0xEFFF,0xEFE0,0xEC00,     //PALETTE0
	0x10,0x00, 0xFF,0xEF, 0xE0,0xEF, 0x00,0xEC,

	//	工具图标的调色板	x0014,0xEFFF,0xC618,0xE800,     //PALETTE0
	0x14,0x00, 0xFF,0xEF, 0x18,0xC6, 0x00,0xE8,

	//	退出图标的调色板	0xC618,0x07FF,0x001F,0x0000,     //PALETTE0
	0x18,0xC6, 0xFF,0x07, 0x1F,0x00, 0x00,0x00,
};
#endif

uint8 code OsdInitTbl[] = 
{
0x15, RegAddr(rP080),
	0x00,					// rP080 OSD and Window enable Control
	0x00,					// rP081 OSD Frame Horizontal Start - Low byte
	0x00,					// rP082 OSD Frame Horizontal Start - High byte
	OSD_FRAME_WIDTH - 1,	// rP083 OSD Frame Horizontal Width
	0x00,					// rP084 OSD Frame Vertical Start - Low byte
	0x00,					// rP085 OSD Frame Vertical Start - High byte
	OSD_FRAME_HEIGHT - 1,	// rP086 OSD Frame Vertical Height
	0x00,					// rP087 OSD Shift Row Offset 不是很清楚这个寄存器的作用
	(Osd1bitFontAddr&0xFF),	// rP088 OSD one bit font address - Low byte
	(Osd1bitFontAddr>>8),	// rP089 OSD one bit font address - Hight byte
	(Osd2bitFontAddr&0xFF),	// rP08A OSD two bit font address - Low byte
	(Osd2bitFontAddr>>8),	// rP08B OSD two bit font address - Hight byte
	(Osd4bitFontAddr&0xFF),	// rP08C OSD OSD four bit font address - Low byte
	(Osd4bitFontAddr>>8),	// rP08D OSD four bit font address - High byte
	0xFF,					// rP08E OSD Fade-in/Fade-out Step
	0x00,					// rP08F OSD Fade-in/Fade-out Frequency & Function Enable

	0x0F,					// rP090 OSD Zoom Control
	0xFF,					// rP091 OSD Font Horizontal Global Zoom Pattern - Low
	0x3F,					// OSD Font H/V Global Zoom Pattern - High
	0xFF,					// OSD Font Vertical Global Zoom Pattern - Low
	0xFF,					// OSD Font Vertical Global Zoom Pattern - Mid
	
0x03, RegAddr(rP0A0),
	0x11,					// rP0A0 OSD Blink Control
	0x33,					// rP0A1 OSD Character Translucent Level
	0x00,					// rP0A2 OSD Space & Font Size

0x08, RegAddr(rP0B0),
	0x00, 0x00, 0x00, 0x00,	// rP0B0-rP0B3 OSD Shadow Control
	0x00, 0x00, 0x00, 0x00,	// rP0B4-rP0B7 OSD Border Control
	
	0,		// 如果记录长度为0, 那么表示数据表结束
};


#if EN_LOGO
void OsdInitFontIndex(void)
{
	WrScalarWord(rP088, Osd1bitFontAddr);
	WrScalarWord(rP08A, Osd2bitFontAddr);
	WrScalarWord(rP08C, Osd4bitFontAddr);
}
#endif


/*
********************************************************************************
* 	函 数 名: OsdInit
* 	功能描述: SCALAR中和OSD相关部分的初始化
* 	输    入: 无
* 	返    回: 无
*   注    意: OSD的初始化要放在SCALAR电源开启来之后,如果在这之前,那么调色板会
*             不正常
********************************************************************************
*/
void OsdInit(void)
{
	RegDataTableOut(OsdInitTbl);
	OsdSetFrame(OSD_FRAME_WIDTH, OSD_FRAME_HEIGHT);
	AdjOsdHpos(HIDE, 0);
	AdjOsdVpos(HIDE, 0);
	OsdLoadPallete();
	OsdLoadBlankFont();
	WrScalarPort(PORT_OSD_1BF, 0x00, Osd1bitFont_Common, Osd1bFC_Common * 27);

#if EN_ACEROSD	//chen 08-04-14
	WrScalarPort(PORT_OSD_2BF, 0x00, Osd2bitFont, (ICON_END+1)* 54);	
//	WrScalarPort(PORT_OSD_2BF, ICON_LOGOTEST, Osd2bitFont_Extra, 7 * 54);	
#else
	WrScalarPort(PORT_OSD_2BF, 0x00, Osd2bitFont, 6 * 6 * 54);
#endif

	OsdClear();
	OsdFontIndexReset();
	//FontArrayPtr = Osd1bitFont_Chs;
}


/*
********************************************************************************
* 	函 数 名: OsdLoadPallete
* 	功能描述: 初始化调色板
* 	输    入: 无
* 	返    回: 无
*   注    意: 对索引表的操作,地址一项是指索引值,而不是地址偏移量,每一个调色板
*             项目由两个字节构成
********************************************************************************
*/
void OsdLoadPallete(void)
{
	//	初始化单色字符的调色板
	WrScalarPort(PORT_OSD_PALLETE, 0x00, Palette1BitTable, sizeof(Palette1BitTable));

	//	初始化四色字符的调色板
	WrScalarPort(PORT_OSD_PALLETE, sizeof(Palette1BitTable)/2, Palette2BitTable, sizeof(Palette2BitTable));
}


/*
********************************************************************************
* 	函 数 名: OsdSetFrame
* 	功能描述: 设置OSD帧
* 	输    入: Width     : OSD帧的宽度
*             Height    : OSD帧的高度
* 	返    回: 无
********************************************************************************
*/
void OsdSetFrame(uint8 Width, uint8 Height)
{
	WrScalarReg(rP083, Width - 1);
	WrScalarReg(rP086, Height);
	OsdFrameWidth = Width;
}


/*
********************************************************************************
* 	函 数 名: OsdClear
* 	功能描述: 清除OSD RAM的内容, 仅仅是清除OSD窗口的显示部分.其作用的原理是应用
*             寄存器CC,CD和CE中定义的显示属性,字符代码去填OSD窗口
* 	输    入: 无
* 	返    回: 无
********************************************************************************
*/
void OsdClear(void)
{
	//	清除OSD显示RAM的内容
	OsdDisable();
	Delay(20);
	WrScalarWord(rP0CC, 0x0000);			// 用于清除的颜色和属性
	WrScalarReg(rP0CE, 0x00);				// 用于清除的字符
	WrScalarReg(rP0CF, 0x01);				// 启动快速清除的操作
	SysTmr = 500/SYSTMR_PRIO;				// 500ms
	while ((RdScalarReg(rP0CF) & BIT_0) && SysTmr)  {};
	WrScalarReg(rP080, 0x00);				//	清除窗口的允许标志
	WrScalarReg(rP0A5, 0x00);
	OsdZoom(0, 0);
	OsdRowZoom(0xFF, 0);
	OsdBorder(0xFF, 0x00);
	OsdShadow(0xFF, 0x00);
}



/*
********************************************************************************
* 	函 数 名: OsdEnable
* 	功能描述: 允许OSD显示,四个OSD窗口是否被显示,则不由这个程序来执行
* 	输    入: 无
* 	返    回: 无
********************************************************************************
*/
void OsdEnable(void)
{
	WrScalarRegBit(rP080, 0x01, 0x01);
}


/*
********************************************************************************
* 	函 数 名: OsdDisable
* 	功能描述: 禁止OSD显示,包括四个OSD窗口也被清除显示
* 	输    入: 无
* 	返    回: 无
********************************************************************************
*/
void OsdDisable(void)
{
	WrScalarRegBit(rP080, 0x00, 0x01);
}


/*
********************************************************************************
* 	函 数 名: OsdHpos
* 	功能描述: 设置OSD的水平位置
* 	输    入: hpos   : OSD水平位置的值,单位为像素
* 	返    回: 无
********************************************************************************
*/
void OsdHpos(uint16 hpos)
{
	WrScalarWord(rP081, hpos);
}


/*
********************************************************************************
* 	函 数 名: OsdVpos
* 	功能描述: 设置OSD的垂直位置
* 	输    入: hpos   : OSD垂直位置的值,单位为像素
* 	返    回: 无
********************************************************************************
*/
void OsdVpos(uint16 vpos)
{
	WrScalarWord(rP084, vpos);
}


/*
********************************************************************************
* 	函 数 名: OsdSetWin
* 	功能描述: 设置和显示OSD窗口,窗口的特征数据保存在一个结构当中,当然该设置的窗
*             口能否被显示还要看寄存器rP080的第0位
* 	输    入: Win    : 保存窗口特征参数的指针
* 	返    回: 无
********************************************************************************
*/
void OsdSetWin(OSDWIN * Win)
{
	WrScalarRegBit(rP0A5, Win->No, 0x07);
	WrScalarBytes(rP0A6, 0x0A, &(Win->Hs));
	OsdEnWindow(Win->No);
}


/*
********************************************************************************
* 	函 数 名: OsdEnWindow
* 	功能描述: 让指定的窗口显示,如果指定的窗口为WINALL那么将显示所有的窗口
* 	输    入: win    : 窗口号,最多为8个窗口
* 	返    回: 无
********************************************************************************
*/
void OsdEnWindow(uint8 win)
{
	if (win > WIN8) {			// WINALL
		WrScalarRegBit(rP080, B0001_1110, B0001_1110);
		WrScalarRegBit(rP0A5, B1111_0000, B1111_0000);
		}
	else if (win > WIN4)  {	// WIN5-WIN8
		win = 1<<(win);
		WrScalarRegBit(rP0A5, win, win);
		}
	else  {						// WIN1-WIN4
		win = 1<<(win + 1);
		WrScalarRegBit(rP080, win, win);
		}
}


/*
********************************************************************************
* 	函 数 名: OsdDisWindow
* 	功能描述: 禁止指定的窗口显示,如果指定的窗口为WINALL那么将禁止所有的窗口显示
* 	输    入: win    : 窗口号,最多为8个窗口
* 	返    回: 无
********************************************************************************
*/
void OsdDisWindow(uint8 win)
{
	if (win > WIN8) {			// WINALL
		WrScalarRegBit(rP080, B0000_0000, B0001_1110);
		WrScalarRegBit(rP0A5, B0000_0000, B1111_0000);
		}
	else if (win > WIN4)  {	// WIN5-WIN8
		win = 1<<(win);
		WrScalarRegBit(rP0A5, 0x00, win);
		}
	else  {						// WIN1-WIN4
		win = 1<<(win + 1);
		WrScalarRegBit(rP080, 0x00, win);
		}
}


#if EN_ACEROSD
#else
/*
********************************************************************************
* 	函 数 名: OsdWinGradient
* 	功能描述: 设置窗口背景过渡色的效果
* 	输    入: win    : 窗口号,最多为8个窗口
*					 : Ctrl1, 设定变化的颜色和方向
*					 : Ctrl2, 设定颜色变化的密度
* 	返    回: 无

⌨️ 快捷键说明

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