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

📄 key.c

📁 T112 MCU源程码,用于T112外接MCU篇程,用来驱动模拟屏
💻 C
📖 第 1 页 / 共 2 页
字号:
/**************************************************************************************************************************************
														key_scan
***************************************************************************************************************************************/

#include "reg51.h"
#include "math.h"
#include "common.h"
#include "struct.h"
#include "system.h"
#include "twowire.h"
#include "T101_Util.h"
#include "TW10xReg.h"
#include "turn.h"
#include "key.h"
#define uchar uCHAR

#define key_data P2

#define adjust_max1	63
#define adjust_max2	31

#define vol_max		63


extern bit power_key_unlock;						////power/menu/atv键锁态标志
extern bit meum_key_unlock;
extern bit atv_key_unlock;
extern bit OSD_open;							////菜单栏打开标志
extern bit TV_found;							////找到台标志
extern bit again_go;							////继续找到台标志
extern bit again_go1;							////继续找到台标志
extern bit power_control;						////待机控制
extern bit hand_turn;							////手动搜查TV标志
extern bit hand_turn1;							////手动搜查TV标志	
extern bit auto_turn;							////自动搜查TV标志
extern bit left_right;							////镜象标志1
extern bit top_down;							////镜象标志2
extern bit auto_power;							////自动关机标志

extern uchar Dis_Mode;

extern uchar TV_num;
extern uchar m_cStandard;

uchar oldkey;								
uchar newkey;
uchar source_gate;							////信号通道变量
uchar Menu_OSD;								////菜单选择变量
uchar Menu_row;								////对应菜单调节项变量

uchar vol_num;								////音量变量

uchar TV_total;								////总有效节目数
uchar TV_total_turn;							////搜查节目总数

uchar bright;
uchar comp;
uchar color;
uchar hue;

uchar CB_Fre;								////频段变量
uWORD DB_Fre;								////频点变量
uchar Fre_tab;								////搜查频率表变量
uchar CB_tvnum;								////搜查频点起始值

uchar Standard;								/////信号切换 


/********************************************************************************************************************************************************
*********************************************************************************************************************************************************
								键盘处理程序
*********************************************************************************************************************************************************
********************************************************************************************************************************************************/


/**********************************************************************

***********************************************************************/
void Ch_deEvent(void)
{
	if((source_gate==0)&&(OSD_open==0))
	{
		if(TV_num==0)
		{
			TV_num=TV_total;
		}
		else
		{
			TV_num--;
		}
		////OSD_show
		////读出节目
		////写高频头
	}
	else if(OSD_open==1)
	{
		if(Menu_row==0)
		{
			switch(Menu_OSD)
			{
				case 0:
					Menu_row=4;
					///osd_show
					break;
				case 1:
					Menu_row=5;
					///osd_show
					break;
				case 2:
					Menu_row=3;
					///osd_row
					break;
			}
		}
		else
		{
			Menu_row--;
		}
	}
}
/**********************************************************************

***********************************************************************/
void Ch_inEvent(void)
{
	if((source_gate==0)&&(OSD_open==0))
	{
		TV_num++;
		if(TV_num>TV_total)
		TV_num=0;
		////OSD_show
		////读出节目
		////写高频头
	}
	else if(OSD_open==1)
	{
		Menu_row++;
		switch(Menu_OSD)
		{
			case 0:
				if(Menu_row>4)
					Menu_row=0;
				///osd_show
				break;
			case 1:
				if(Menu_row>5)
					Menu_row=0;
				///osd_show
				break;
			case 2:
				if(Menu_row>3)
					Menu_row=0;
				///osd_row
				break;
		}
	}
}

/**********************************************************************
			手动搜查TV台
**********************************************************************/
void hand_turn_down_go(void)
{									
	CB_tvnum--;
	if(CB_tvnum==0)
	{
		hand_turn1	=	0;
		CB_tvnum	=	0;
		return;
	}
	if(!TV_found)				////		搜查到有台,不动,没台时或继续搜查时才执行下面
	{
		TV_found=1;				////tiaoshi 
		////初始化Tmier0		////		搜查TV时时间较长,不可关OSD
		////写高频头
		////读状态
	}
	if(TV_found)				////		应在主程序处理处清0	
	{
		TV_found=0;				///tiaoshi
	}
	////OSD_show
}
/******************************************************************************************************
					手动搜查参数处理(down)	
******************************************************************************************************/
void hand_turn_down_set(void)					
{
	if(!hand_turn1)									////		判断是否已经在手动搜查
	{
		hand_turn1	=	1;						////		不是,置手动搜查已执行标志,在Tmier0和meun中清0
		auto_turn	=	0;						////		清自动搜查标志
		switch(CB_Fre)								////		选择锁设定的频率段值		////CB_Fre保存值
		{
			case 0:	
				switch(m_cStandard)					////		判断所选择的信号制式
				{
					case S_PAL:					////		不同的制式,搜查的起点不同
							CB_tvnum=turn_pal_vhfl2;		
							break;
					case S_PAL_N:
							CB_tvnum=turn_pal_n_vhfl2;
							break;
					case S_PAL_M:
							CB_tvnum=turn_pal_m_vhfl2;
							break;
					case S_NTSC:
							CB_tvnum=turn_ntsc_vhfl2;
							break;
				}
				break;							////		高频段
			case 1:								////		甚高频段
				switch(m_cStandard)					////		判断所选择的信号制式
				{
					case S_PAL:					////		不同的制式,搜查的起点不同
							CB_tvnum=turn_pal_vhfh2;		
							break;
					case S_PAL_N:
							CB_tvnum=turn_pal_n_vhfh2;
							break;
					case S_PAL_M:
							CB_tvnum=turn_pal_m_vhfh2;
							break;
					case S_NTSC:
							CB_tvnum=turn_ntsc_vhfh2;
							break;
				}
				break;	
			case 2:								////		超高频
				switch(m_cStandard)					////		判断所选择的信号制式
				{
					case S_PAL:					////		不同的制式,搜查的起点不同
							CB_tvnum=turn_pal_uhf2;		
							break;
					case S_PAL_N:
							CB_tvnum=turn_pal_n_uhf2;
							break;
					case S_PAL_M:
							CB_tvnum=turn_pal_m_uhf2;
							break;
					case S_NTSC:
							CB_tvnum=turn_ntsc_uhf2;
							break;
				}
				break;	
		}
	}	
	else
	{	
		again_go1	=	1;
	}
}
/******************************************************************************************************
						减键处理程序
******************************************************************************************************/
void Key_downEvent(void)
{
	if(power_control&&(hand_turn|auto_turn))				////		待机状态下及审查TV时无效
		return;
	//初始化Tmier0	
	if(OSD_open)								////		如果菜单打开,则调节相应参数和设置
	{
		switch(Menu_OSD)						////		不同的菜单设置不同
		{
			case 0:							////		菜单1
				switch(Menu_row)				////		不同的调节项,调节不同
				{
					case 0:					////		调节项1:亮度		
						if(bright<1)
						{
							bright=0;
						}
						else
						{
							bright--;
						}
						////写T112
						////OSD_show
						break;
					case 1:					////		调节项2:对比度						
						if(comp<1)
						{
							comp=0;
						}
						else
						{
							comp--;
						}
						////写T112
						////OSD_show
						break;	
					case 2:					////		调节项3:色度
						if(color<1)
						{
							color=0;
						}
						else
						{							
							color--;
						}
						////写T112
						////OSD_show
						break;
					case 3: 				////		调节项4:色调		
						if(hue<1)
						{
							hue=0;
						}
						else
						{
							hue--;
						}
						////写T112
						////OSD_show
						break;
					default:
						break;
				}
					
				break;
			case 1:							////		菜单2
				switch(Menu_row)
				{
					case 0:					////		选台/用于排台、微调
						if(TV_num==0)			////		注意,没定义
						{
							TV_num	=TV_total;
						}
						else
						{
							TV_num--;
						}						
						////写高频头
						////OSD_show			////		主要显示该调节参数
						break;
					case 1:					////		频段设置,用于搜查TV
						if(CB_Fre==0)
						{
							CB_Fre=2;
						}
						else
						{
							CB_Fre--;
						}			
						////OSD_show
						break;
					case 2:					////		微调
						////读出当前台的台频DB_Fre=readEProm(TV_num)
						DB_Fre-=small_turn_step;
						////写高频头			////		注意,当调节好时如等待菜单退出时,则保存该值	
						////OSD_show				
						break;
					case 3:
						hand_turn_down_set();		////		设定手动搜查参数及开其搜查标志位				
						break;
					case 4:					
						auto_turn_set();		////		设定自动搜查参数及开其搜查标志位
						break;
					case 5:
						felt_set();			////		制式选择处理
						break;						
					default:
						break;
				}
				break;
			case 2:
				switch(Menu_row)
				{
					switch(Menu_row)
					{
						case 0:
							left_right=~left_right;
							if(left_right)
							{
								Dis_Mode=TOP_LEFT;
							}
							else
							{
								Dis_Mode=TOP_RIGHT;
							}							
							///OSD_show
							SET_Dismod();
							break;
						case 1:
							top_down=~top_down;
							if(top_down)
							{
								Dis_Mode=BOTTOM_LEFT;
							}
							else
							{
								Dis_Mode=BOTTOM_RIGHT;
							}
							///OSD_show
							SET_Dismod();
							break;
						case 2:
							auto_power=~auto_power;
							break;
						default:
							break;
					}
				}
				break;
			case 3:
				///退出OSD
				break;
			default:
				break;
		}
	}
	else
	{
		if(vol_num==0)
		{
			vol_num=0;
		}
		else
		{
			vol_num--;
		
		}
	////OSD_show
	////控制音量
	}
}
/**********************************************************************
				制式设定
**********************************************************************/
void felt_set(void)
{
	Standard++;
	if(Standard>6)
	{
		Standard=6;

⌨️ 快捷键说明

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