📄 handlekey.c
字号:
//*********************************************************************
// handleKey.c 对按健进行处理
// by hibernate 2006.01.19
// ShenZhen Challenge Technology Co.,Ltd
//remarks:这里不包含DVDPLAY的开关机操作按键处理
//*********************************************************************
#include <intrins.h>
#include <stdio.h>
#include <reg51.h>
#include "vxis1828.h"
#include "config.h" //这个文件中包含有一些约定
//包含使用的外部函数定义
#include "inital.h"
#include "IIC_RW.h"
#include "osd.h"
#include "status.h"
#include "setDVDplay.h"
#include "timer.h"
//本文件中的函数定义
void initsubmenu1(void); //Initial Brightness menu Function
void adjValue(unsigned char * value,bit add_flag,unsigned char MAX_value);
void adjMsgBox(unsigned char value,unsigned char max_value);
void printModeInfo();
void printMenuInfo();
void printSwitchInfo(unsigned char kind,unsigned char choose);
void displayCap(unsigned char ch_index,unsigned char format);
void clearMenuFlag();
void clearMenuSel();
void clearIrFlag();
void getIrKey();
void handleKey();
void handleMenu();
void handleMenuValue();
void handleSCMode();
void handleCh();
void loadAppInitValue();
void setICAppValue();
//按健定义
sbit key_valueDown = DOWN_PORT;
sbit key_valueUp = UP_PORT;
sbit key_menu = MENU_PORT;
sbit key_ch = AV_PORT;
sbit key_mode = SEL_PORT;
// 可调节菜单值的变量定义
unsigned char britc_value = 0x80; // Combine Brightness selection
unsigned char contc_value = 0x80; // Combine Contrast selection
unsigned char hue_value = 0x20; // Hue menu selection
unsigned char satr_value = 0x80; // Saturation menu selection
unsigned char scMode_value = 0x00; // 默认是16:9
//主板菜单活动标志
bit topMenu_flag = 0; // topmenu flag
bit modeMenu_flag = 0; // 屏幕比例切换的标志
unsigned char idata top_sel = 0x01; // Top menu selection
// 菜单选择标志
bit sel_brit = 0; // Brightness menu flag
bit sel_cont = 0; // Contrast menu flag
bit sel_satr = 0; // Saturation menu flag
bit sel_hue = 0; // Hue menu flag
bit sel_scMode = 0; // aspect ratio menu flag
bit sel_reset = 0; // Reset register flag
bit sel_save = 0; // Save register flag
// top menu 中的英文字体定义
char code code_Volume[0x06] = {0x15,0x0E,0x0B,0x14,0x0C,0x04}; // Volume
char code code_Brit[0x06] = {0x01,0x11,0x08,0x06,0x07,0x13}; // Brightness
char code code_Cont[0x08] = {0x02,0x0e,0x0d,0x13,0x11,0x00,0x12,0x13}; // Contrast
char code code_Satr[0x05] = {0x02,0x0e,0x0b,0x0e,0x11}; // Saturation
char code code_Hue[0x04] = {0x07,0x14,0x04,0x6D}; // Hue(tint)'色彩'
//char code code_Sharp[0x09] = {0x12,0x07,0x00,0x11,0x0f,0x0d,0x04,0x12,0x12}; // Sharpness logo Line2
char code code_Reset[0x05] = {0x11,0x04,0x12,0x04,0x13}; // Reset
//char code code_Setup[0x05] = {0x12,0x04,0x0B,0x14,0x0F}; // 出厂值设置
//char code code_Save[0x04] = {0x12,0x00,0x15,0x04}; // Save
char code code_ScMode[0x04] = {0x0C,0x0E,0x03,0x04};
// 开关信息变量定义() (屏幕比)
// 为了统一.这里使用的都是5个字符
char code code_4to3[0x05] = {0x6D,0x66,0x47,0x65,0x6D}; // 4:3模式
char code code_16to9[0x05] = {0x63,0x68,0x47,0x6b,0x6D}; // 16:9模式
char code code_Yes[0x05] = {0x6D,0x18,0x04,0x12,0x6D}; // yes
char code code_No[0x05] = {0x6D,0x0D,0x0E,0x6D,0x6D};
char code code_Open[0x05] = {0x0e,0x0f,0x04,0x0d,0x6D}; // 开
char code code_Close[0x05] = {0x02,0x0b,0x0e,0x12,0x04}; // 关
//屏幕提示信息字体定义
char code code_OK[0x03] = {0x0e,0x0a,0x43}; // 'ok!'
char code NESS[0x04] = {0x0d,0x04,0x12,0x12}; // NESS
//屏幕提示信息字体定义
char code code_Video[0x05] = {0x15,0x08,0x03,0x04,0x0e}; // Video
char code code_Svideo[0x07] = {0x12,0x54,0x15,0x08,0x03,0x04,0x0e}; // S-Video
char code code_AV1[0x03] = {0x00,0x15,0x63}; // AV1
char code code_AV2[0x03] = {0x00,0x15,0x64}; // AV2
char code code_AV3[0x03] = {0x00,0x15,0x65}; // AV3
char code code_PAL[0x05] = {0x6D,0x0f,0x00,0x0b,0x6D}; // PAL
char code code_NTSC[0x05] = {0x0d,0x13,0x12,0x02,0xc0}; // NTSC
//********************************************************************
// 函数:void handleKey()
// 作用:按健处理流程设置
// 参数:
// remarks:
//*********************************************************************
void handleKey()
{
if(!key_menu && modeMenu_flag == 0x00)
handleMenu();
if((topMenu_flag != 0x00 )
&& (!key_valueDown || !key_valueUp)) //此时"up"、"down"就是作为选项的调节按钮
handleMenuValue();
//signal mode select
if (!key_ch)
handleCh();
if( !key_mode&&(topMenu_flag == 0x00))
handleSCMode();
}
//********************************************************************
// 函数:void handleMenu()
// 作用:菜单健按下时的处理,
// 参数:
// remarks: 这里的菜单健同时也是选择健
//*********************************************************************
void handleMenu()
{
top_sel++;
if (top_sel == 0x06) // 这里的菜单选择键有循环功能
top_sel = 0x01;
if(topMenu_flag == 0)
{
clrScreen(); // Clear osd Memory
osdSwitch(0x00); // Turn the OSD T/C/B block off
DelayXms(0xC8); // DELAY 0.2
printMenuInfo(); // Initial Top menu
initsubmenu1(); // Initial Brightness menu
topMenu_flag = 1;
}
clearTimer(); // 计时器osd_timer = 0
clearMenuSel();
switch(top_sel )
{
case 1: // Hue menu
sel_hue = 1;
initsubmenu1();
adjMsgBox(hue_value,0x3F);
//osdSwitch(0x03);
osd_pos_Highlight(content,0x01,0x0A,0x01,0x01);
osd_BackColor_H(content,Blue);
break;
case 2: // Saturation menu
sel_satr = 1;
initsubmenu1();
adjMsgBox(satr_value,0xFF);
//osdSwitch(0x03);
osd_pos_Highlight(content,0x01,0x0A,0x02,0x02);
osd_BackColor_H(content,Blue);
break;
case 3: // Contrast menu
sel_cont = 1;
initsubmenu1();
adjMsgBox(contc_value,0xFF);
//osdSwitch(0x03);
osd_pos_Highlight(content,0x01,0x0A,0x03,0x03);
osd_BackColor_H(content,Blue);
break;
case 4: // Brightness menu
sel_brit = 1;
initsubmenu1();
adjMsgBox(britc_value,0xFF);
//osdSwitch(0x03);
osd_pos_Highlight(content,0x01,0x0A,0x04,0x04);
osd_BackColor_H(content,Blue);
break;
case 5: // Save menu
sel_reset = 1;
initsubmenu1();
osd_madr(bottom,0xB0);
osd_size(bottom,0x05,0x01); // Set Content block size
osd_pos(bottom,0x66,0x35); // Set bottom block position
printSwitchInfo(0x01,0x00);
osdSwitch(0x03);
osd_pos_Highlight(content,0x01,0x0A,0x05,0x05);
osd_BackColor_H(content,Blue);
break;
default:break;
}
osdSwitch(0x03);
DelayXms(0xFF); // Avoid error repress
}
//********************************************************************
// 函数:void handleMenuValue()
// 作用:DOWN.UP按下时的处理,
// 参数:
// remarks: DOWN.UP同时也可以做声音的调节健
//*********************************************************************
void handleMenuValue()
{
bit add_flag;
clearTimer(); // 计时器osd_timer = 0
if(!key_valueUp)
add_flag = 1;
else
add_flag = 0;
if (sel_hue) // Increase Brightness
{
adjValue(&hue_value,add_flag,0x3F);
adj_britclr(hue,hue_value);
adjMsgBox(hue_value ,0x3F);
osdSwitch(0x03);
DelayXms(0x20); // avoid error repress
}
if (sel_satr) // Increase Brightness
{
adjValue(&satr_value,add_flag,0xFF);
adj_britclr(satr,satr_value);
adjMsgBox(satr_value ,0xFF);
osdSwitch(0x03);
DelayXms(0x20); // avoid error repress
}
if (sel_cont) // Increase Brightness
{
adjValue(&contc_value,add_flag,0xFF);
adj_britclr(contc,contc_value);
adjMsgBox(contc_value ,0xFF);
osdSwitch(0x03);
DelayXms(0x20); // avoid error repress
}
if (sel_brit) // Increase Brightness
{
adjValue(&britc_value,add_flag,0xFF);
adj_britclr(britc,britc_value);
adjMsgBox(britc_value,0xFF);
osdSwitch(0x03);
DelayXms(0x20); // avoid error repress
}
if (sel_reset) // Reset Register
{
//osd_timer = 0;
clearMenuFlag();
loadAppInitValue();
setICAppValue();
osd_madr(bottom,0xB0);
osd_size(bottom,0x05,0x01); // Set Content block size
osd_pos(bottom,0x66,0x35); // Set bottom block position
printSwitchInfo(0x03,0x00);
osdSwitch(0x03);
DelayXms(0xff);
osdSwitch(0x00); // Turn the OSD T/C/B block off
}
DelayXms(0xff); // Avoid error repress
}
//********************************************************************
//函数:void handleSCMode()
//作用:屏幕比例的切换
//参数:
//remarks:
//*********************************************************************
void handleSCMode()
{
unsigned char current_format;
if(scMode_value != 0x00)
scMode_value = 0x00;
else
scMode_value = 0x01;
DelayXms(0x05);
current_format = getCurrentFormat();
//osd_madr(bottom,0xB0);
//osd_size(bottom,0x05,0x01); // Set Content block size
//osd_pos(bottom,0x66,0x35); // Set bottom block position
setScreenMode(current_format,scMode_value);
printModeInfo();
printSwitchInfo(0x02,scMode_value);
osdSwitch(0x05);
DelayXms(0x20); // avoid error repress
DelayXms(0xFF);
}
//********************************************************************
//函数:void handleCh()
//作用:通道的切换
//参数:
//remarks:
//*********************************************************************
void handleCh()
{
unsigned char ch_index;
unsigned char current_format;
clearMenuFlag(); // Clear all menu flag
clearTimer(); // 计时器osd_timer = 0
ch_index = getCurrentCh();
current_format = getCurrentFormat();
ch_index++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -