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

📄 handlekey.c

📁 一个用于驱动TFT屏的驱动程序,使用IC:1828,program (无EEPROM 无IR,完整说明)IIC只写一个
💻 C
📖 第 1 页 / 共 2 页
字号:
//*********************************************************************
//               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 + -