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

📄 ctrl..c

📁 NT68617源程序代码集合
💻 C
📖 第 1 页 / 共 4 页
字号:
/*
********************************************************************************
*
*	                                LCD控制程序
*
*	                       这是一个人机接口交互处理的模块
*
*	文件名	: CONTROL.C
*	设计者	: Terry
********************************************************************************
*                                   功 能 描 述
*
********************************************************************************
*/
#include "global.h"
#include "osd.h"
#include "key.h"
#include "scalar.h"


static void CtrlKeySelect(void);
static void CtrlMenuReturn(void);
static void CtrlAutoImage(void);
static void CtrlAutoColor(void);
static void CtrlCursorLeft(void);
static void CtrlCursorRight(void);
static void CtrlCursorUp(void);
static void CtrlCursorDown(void);
static void CtrlParInc(void);
static void CtrlParDec(void);
static void CtrlReset(void);

static void CtrlSelMainItem_Image(void);
static void CtrlSelMainItem_OSD(void);
#if EN_ACEROSD
#else
static void CtrlSelGMItem_BriCon(void);
static void CtrlSelMainItem_Color(void);
#endif
static void CtrlSelMainItem_Audio(void);
static void CtrlSelMainItem_Tools(void);
static void CtrlPowerOnOff(void);
void CtrlActiveParSave(void);


#if !EN_MEMORY_POWER
bit Flg_Power = 1;
#endif

/*
********************************************************************************
* 	函 数 名: CtrlPowerOnOff
* 	功能描述: 进行电源开或者是关的操作,电源的开关状态被记忆
* 	输    入: 无
* 	返    回: 无
********************************************************************************
*/
void CtrlPowerOnOff(void)
{
#if EN_MEMORY_POWER
	SysPar.Flag ^= FLAG_POWER;
	ActiveSave_SYSPAR();
	SaveSysPar();
	if (SysPar.Flag & FLAG_POWER) PowerOn();
	else  PowerOff();

#else
	Flg_Power = ~Flg_Power;
	if (Flg_Power)  PowerOn();
	else  PowerOff();
#endif
	SetTimerEvent(EVENT_WRITEFLASH, 0x02);
}


/*
********************************************************************************
* 	函 数 名: CtrlIsPowerOn
* 	功能描述: 判断电源是开还是关
* 	输    入: 无
* 	返    回: 如果电源是开,返回1;否则返回0
********************************************************************************
*/
bit CtrlIsPowerOn(void)
{
#if EN_MEMORY_POWER
	if (SysPar.Flag & FLAG_POWER) return 1;
	else return 0;
#else
	if (Flg_Power)  return 1;
	else return 0;
#endif
}


#if USE_AUDIO
/*
********************************************************************************
* 	函 数 名: CtrlShortVol
* 	功能描述: 显示音量调节的快捷方式
* 	输    入: 无
* 	返    回: 无
********************************************************************************
*/
static void CtrlShortVol(void)
{
	Alignment = LEFT;
	StringWidth = 7;
	MenuShowShortWin();
	MenuShowShortVol();
}
#endif

uint8 xdata BfPos = 0;
/*
********************************************************************************
* 	函 数 名: CtrlKeyProc
* 	功能描述: 完成按键的解码处理
* 	输    入: 无
* 	返    回: 无
********************************************************************************
*/
void CtrlKeyProc(void)
{
	uint8 keycode;
	
	if (!KeyHit())  return;
	keycode = KeyGetKey();
	switch (keycode)  {
////////////////////////////////////////////////////////////////////////////////
//		电源开关按键,完成电源的开关功能
///////////////////////////////////////////////////////////////////////////////
		case  KEYCODE_POWER:
			if (!Flg_KeyOnePress)  {
				Flg_KeyOnePress = 1;
				CtrlPowerOnOff();
				return;
				}
			break;

////////////////////////////////////////////////////////////////////////////////
//		同时按下POWER键和MENU键:
//			将使系统进入工厂设置状态
////////////////////////////////////////////////////////////////////////////////
		case  KEYCODE_POWERMENU:
			if ((!CtrlIsPowerOn()) && (!Flg_KeyOnePress))  {
				Flg_KeyOnePress = 1;
				Flg_Factory = 1;
				CtrlPowerOnOff();
				return;
				}
			break;
		}
	
	if (!CtrlIsPowerOn())	return;
	
	switch (keycode)  {
////////////////////////////////////////////////////////////////////////////////
//		同时按下INC键和DEC键:
//			如果显示主菜单并且光标处于最后一项,按下的时间操作3秒,显示版本
//			其他状态,按下的时间操作3秒,允许或者禁止老化测试状态
////////////////////////////////////////////////////////////////////////////////
		case  KEYCODE_INCDEC:
			if (KeyGetKeyDownTime() > 40 && !Flg_KeyOnePress)  {
				Flg_KeyOnePress = 1;
				if ((MenuState != MENU_OFF) && (KeyMenuCursor == MAX_KEYMENUITEM - 1) &&
					(SysState == SYS_NORMAL))  {
					MenuShowSysInfo();
					CtrlActiveOsdReset();
					}
				else  {
					SysPar.Flag ^= FLAG_BURNIN;
					ActiveSave_SYSPAR();
					SaveSysPar();
					if (SysState == SYS_NORMAL && (MenuState == MENU_KEY || 
						MenuState == MENU_SUB)) {
#if EN_ACEROSD
						if(KeyMenuCursor != 0)
#endif
							MenuShowSysState();
						}
					PowerLED(POWER_NORMAL);
					CtrlActiveOsdReset();
					}
				}
			break;

////////////////////////////////////////////////////////////////////////////////
//		MENU键,显示OSD菜单或者是返回上一级菜单
//			长按MENU键将执行颜色的自动调整
////////////////////////////////////////////////////////////////////////////////
	#if !KEYNUM_6			// 不是6按键操作条件下的MENU按键功能
		case  KEYCODE_MENU:
			//	在VGA输入的条件下,如果长按MENU键将进行颜色的自动调整
			if (KeyGetKeyDownTime() > 60 && Flg_KeyOnePress) { // 长按MENU键
				if(SysState != SYS_NORMAL)	break;		//chen 08-05-26
				CtrlAutoColor();
				Flg_KeyOnePress = 0;
				}

			//	正常条件下的操作
			else  {
				if (Flg_KeyOnePress)  break;			// 不允许连击
				
				Flg_KeyOnePress = 1;
				
				if(SysState != SYS_NORMAL)	break;		//chen 08-05-26

				switch (MenuState)  {
					case  MENU_OFF:
					case  MENU_SOURCEINFO:
					case  MENU_INFO:
					case  MENU_MUTEINFO:
					case  MENU_BURNIN:
						MenuShowMain();
						CtrlActiveOsdReset();
						break;

					case  MENU_KEY:
#if USE_AUDIO
						if(KeyMenuCursor == 4)	return;
#else
						if(KeyMenuCursor == 3)	return;
#endif
						MenuState = MENU_SUB;
						SubMenuCursor = 0;
						CtrlDispCursor();
						CtrlActiveOsdReset();
						break;

					case  MENU_SUB:
						CtrlKeySelect();
#if EN_ACEROSD
						CtrlDispCursor();
#endif
						break;

					case  MENU_SHORT_BRI:
					case  MENU_SHORT_CON:
					case  MENU_SHORT_VOL:
						MenuShowShortAdj();
						CtrlActiveOsdReset();
						break;
						
					default:
						CtrlOsdReset();
						break;
					}
				}
			break;

/*
================================================================================
=	下面是6按键时MENU的操作方式
================================================================================
*/
	#else
		case  KEYCODE_MENU:
			//	在VGA输入的条件下,如果长按MENU键将进行颜色的自动调整
			if (KeyGetKeyDownTime() > 60 && Flg_KeyOnePress) { // 对长按MENU键的处理
				CtrlAutoColor();
				Flg_KeyOnePress = 0;
				}

			//	正常条件下的操作
			else  {
				if (Flg_KeyOnePress)  break;			// 不允许连击

				Flg_KeyOnePress = 1;
				switch (MenuState)  {
					case  MENU_OFF:
					case  MENU_SOURCEINFO:
					case  MENU_INFO:
					case  MENU_MUTEINFO:
					case  MENU_BURNIN:
						MenuShowMain();
						CtrlActiveOsdReset();
						break;

					case  MENU_KEY:
						CtrlOsdReset();
						break;

					case  MENU_SUB:
						if (Flg_ParAdj)  CtrlKeySelect();
						CtrlMenuReturn();
						CtrlActiveOsdReset();
						break;

					case  MENU_SHORT_BRI:
					case  MENU_SHORT_CON:
					case  MENU_SHORT_VOL:
						MenuShowShortAdj();
						CtrlActiveOsdReset();
						break;
						
					default:
						CtrlOsdReset();
						break;
					}
				}
			break;
	#endif
	
////////////////////////////////////////////////////////////////////////////////
//		SELECT键,确认和选择被选择项目
//			没有菜单显示时,显示当前的信号输入源
//			在没有同步信号输入或者在显示输入源的情况下,切换输入的信号源
////////////////////////////////////////////////////////////////////////////////
	#if KEYNUM_6
		case  KEYCODE_SELECT:
			if (Flg_KeyOnePress) break;
			Flg_KeyOnePress = 1;
			switch (MenuState)  {
				case  MENU_KEY:
					MenuState = MENU_SUB;
					SubMenuCursor = 0;
					CtrlDispCursor();
					CtrlActiveOsdReset();
					break;

				case  MENU_SUB:
					CtrlKeySelect();
					break;

				case  MENU_SHORT_BRI:
				case  MENU_SHORT_CON:
				case  MENU_SHORT_VOL:
					MenuShowShortAdj();
					CtrlActiveOsdReset();
					break;
					
				default:
					CtrlOsdReset();
					break;
				}
			break;
	#endif
	
////////////////////////////////////////////////////////////////////////////////
//		AUTO键,执行几何的AUTO操作
////////////////////////////////////////////////////////////////////////////////
		case  KEYCODE_AUTO:
			if (SysState != SYS_NORMAL || Flg_KeyOnePress) break;
			Flg_KeyOnePress = 1;
			if (MenuState == MENU_OFF) CtrlAutoImage();
#if EN_ACEROSD
			else if(MenuState == MENU_KEY || MenuState == MENU_INFO)
			{
				CtrlOsdReset();
			}
			else if((MenuState == MENU_SHORT_BRI) || (MenuState == MENU_SHORT_CON) || (MenuState == MENU_SHORT_VOL))
			{
				CtrlOsdReset();
			}
			else
			{
				if(Flg_ParAdj)
				{
					CtrlKeySelect();
					OsdCursor(SubMenuCursor * 2 + SubMenuWin.Vs + 3, PALETTE_SUBFRAME+1);
					MenuState = MENU_SUB;
					return;
				}
				else
				{
					CtrlMenuReturn();
					CtrlActiveOsdReset();
					return;
				}
			}
#else
			else CtrlOsdReset();
#endif
			break;

////////////////////////////////////////////////////////////////////////////////
//		INC键,向上移动光标
//			增加被调整参数
////////////////////////////////////////////////////////////////////////////////
		case  KEYCODE_INCREASE:
			//	在弹出输入源选择菜单时的操作
			if (SysState == SYS_OUTOFHIGH || SysState == SYS_OUTOFLOW || SysState == SYS_OUTOFHLOW || SysState == SYS_OUTOFVLOW) 
			{
				if (MenuState == MENU_SELSOURCE) CtrlCursorUp();
				break;
			}

			if(SysState != SYS_NORMAL)	break;		//chen 08-05-26
			
			//	正常条件下的操作
			switch (MenuState) {
				case  MENU_KEY:
					CtrlCursorRight();
					CtrlActiveOsdReset();
					break;

				case  MENU_SUB:
					if (Flg_ParAdj)  CtrlParInc();
					else  CtrlCursorUp();
					CtrlActiveOsdReset();
					break;
					
				case  MENU_SHORT_BRI:
				case  MENU_SHORT_CON:
				case  MENU_SHORT_VOL:
					CtrlParInc();
					CtrlActiveOsdReset();
					break;
		#if USE_AUDIO
				default:
					CtrlShortVol();
					CtrlActiveOsdReset();
					break;
		#endif
			}
			break;

////////////////////////////////////////////////////////////////////////////////
//		DEC键,向下移动光标
//			减少被调整的参数
////////////////////////////////////////////////////////////////////////////////
		case  KEYCODE_DECREASE:
			//	在弹出输入源选择菜单时的操作
			if (SysState == SYS_OUTOFHIGH || SysState == SYS_OUTOFLOW || SysState == SYS_OUTOFHLOW || SysState == SYS_OUTOFVLOW)
			{
				if (MenuState == MENU_SELSOURCE) CtrlCursorDown();
				break;
			}

			if(SysState != SYS_NORMAL)	break;		//chen 08-05-26

			//	正常条件下的操作
			switch (MenuState) {
				case  MENU_KEY:
					CtrlCursorLeft();
					break;

				case  MENU_SUB:
					if (Flg_ParAdj)  CtrlParDec();
					else  CtrlCursorDown();
					break;

				case  MENU_SHORT_BRI:
				case  MENU_SHORT_CON:
				case  MENU_SHORT_VOL:
					CtrlParDec();
					break;

			#if USE_AUDIO
				default:
					CtrlShortVol();
					CtrlActiveOsdReset();
					break;
			#endif
				}
			CtrlActiveOsdReset();
			break;
		}
}


/*
********************************************************************************
* 	函 数 名: CtrlKeySelect
* 	功能描述: 对执行选择功能进行处理
* 	输    入: 无
* 	返    回: 无
********************************************************************************
*/
static void CtrlKeySelect(void)
{	
#if EN_ACEROSD
	ParAdjState = ADJPAR_NONE;

//	if (!SubMenuCursor)  {			//	判断是否为子菜单的第一项
	#if USE_AUDIO
		if (KeyMenuCursor == 4)
		{	//	主项的最后一项,子项的第一项表示消除菜单显示
//			CtrlOsdReset();
			return;
		}
	#else
		if(KeyMenuCursor == 3)
			{	//	主项的最后一项,子项的第一项表示消除菜单显示
//				CtrlOsdReset();
				return;
			}
	#endif
//		}

//	当不断对某一菜单项进行选中与反选时,字体的指针会溢出
//	下面是实现溢出前的字体复位,0xE0是可调值	08-04-17
	if(FontIndex > 0xE0)		MenuShowSubItem();

	FontIndexBackup[9] = FontIndex;
	FontIndex = FontIndexBackup[SubMenuCursor];
/*
================================================================================
=	根据不同的信号输入来确定选择的操作
================================================================================
*/
/*
================================================================================
=		第一主项: 亮度、对比度、图象调节
================================================================================
*/

⌨️ 快捷键说明

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