📄 ctrl..c
字号:
/*
********************************************************************************
*
* 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 + -