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

📄 key.c

📁 MCU为:ATMGEA128
💻 C
字号:
#include "include.h"

#ifndef __key_c__
#define __key_c__


#define	T6				2
#define	T2I				2
#define	KEY_VERSION		T2I
extern unsigned char colourmode;
extern unsigned char user_config[CONFIGDATA_MAX];
//***************************************************************** 
//函   数   名  	:   KEYSCAN   
//建 立 时  间   	:   2006-9-23 
//功 能 描  述   	:   KEYCODE,定义值为0X00的键值为无按键按下。
//说明			:本函数为键盘扫描,返回KEYCODE
//						0x00:无键按键
//备        注   		:   没有返回值 
//最后修改时间		:   2006-9-23
//***************************************************************** 
//**************************键盘扫描****************
unsigned char keyscan(void){
static unsigned char 	keydelay=0;
static unsigned char 	keybuf=0x00;
unsigned char 		keycode=0x00;
unsigned char 		temp,keystate;//
keystate=0;
if((KEY1_PIN&(1<<KEY1_BIT))==0)keystate|=0x4;
if((KEY2_PIN&(1<<KEY2_BIT))==0)keystate|=0x8;
//得到当前键的状态keystate
#define 	short_btm	5
#define	long_btm	200
if(keystate==0x00)
	{
	//无键按下的操作!
	if(keydelay>short_btm&&keydelay<long_btm)keycode=keybuf;
	if(keydelay>long_btm)
		{
		switch(keybuf)
			{
			case 0x8:
				keycode=0x1;
				break;
			case 0x4:
				keycode=0x2;	
				break;
			default:
				keycode=keybuf;
			}
		};
	if(keydelay<=short_btm)keycode=0;
	keybuf=0;
	keydelay=0;
	return keycode;
	}
else
	{
		  //有按键按下的操作。
	  if(keystate==keybuf)
	  	{
	    	keydelay++;
	   	if(keydelay>short_btm)//防抖动时间=5*20MS
			{
			
			}
		if(keydelay>long_btm)//连续按键处理**暂时无此功能
			{
			keydelay=long_btm+5;
			}
	  	}
	  else
	  	{
	  	keybuf=keystate;
	  	keydelay=0;
	  	}
return 0x00;
	}
}
//**************************************键处理********************* 
//函   数   名  	:   dokey  
//建 立 时  间   	:   2006-9-23 
//功 能 描  述   	:  
//说明			:
//备        注   		:   没有返回值 
//最后修改时间		:   2006-9-23
//********************************************************************
void dokey(unsigned char keycode)
{
static unsigned int osdoff_time=0;
static unsigned char cur_gm=gm0;



unsigned char key_tmp=keycode;
extern 	unsigned char led_status,activeline;
extern 	unsigned char osdstyle;
extern unsigned char 	user_config[CONFIGDATA_MAX];
static unsigned char tmp,tmp1=0;
static unsigned char mimastep=0;
static unsigned int step_rst=0;
int i,j;
//osdstyle=KEY_VERSION;
//osdstyle=4;

//进入模式选择
//******************osd菜单模式 0*****************   
if(osdstyle==0)
	{
	switch(key_tmp)
	    {
		case 0x00:
			if(activeline!=0xff){
				if(osdoff_time++==1000)
					{
					activeline=0xff;
					osdoff_time=0;			
					osddisable();
					cleanline(0,0);
					cleanline(0,1);
					cleanline(0,2);
					osdstyle=2;
					}
				}
			break;
		case 0x01://key dowm
			 break;
		case 0x02://key up
			 break;
		case 0x04://key +
			 break;
		case 0x08://key -
			 break;
		case 0x10://KEY FUNCTION
		case 0x40://KEY FUNCTION
			 break;
		default:
			 break;
		}
	return;
	}
//******************osd菜单模式 1*****************   
//标准
//鲜艳
//明亮
if(osdstyle==1)
	{
	switch(key_tmp)
	    {
		case 0x00:
			if(activeline!=0xff){
				if(osdoff_time++==1000)
					{
					activeline=0xff;
					osdoff_time=0;			
					osddisable();
					cleanline(0,0);
					cleanline(0,1);
					cleanline(0,2);				
					savecfg();
					osdstyle=4;
					}
				}
			break;
		case 0x01://key dowm
			 break;
		case 0x02://key up
			 break;
		case 0x04://key +
			 break;
		case 0x08://key -
			 break;
		case 0x10://KEY FUNCTION
		case 0x40://KEY FUNCTION
			osdstyle=1;
			osdoff_time=0;	
			colourmode++;
			if(colourmode==3)colourmode=0;
			switch(colourmode)
				{
				case 0://标准
				t103_write(0x50, 0x68, 0x80);
				t103_write(0x50, 0x69, 0x80);
				t103_write(0x50, 0x6c, 0x80);
				refreshmenu();
				break;
				case 1://明亮
				t103_write(0x50, 0x68, 0xb0);
				t103_write(0x50, 0x69, 0x70);
				t103_write(0x50, 0x6c, 0x80);
				refreshmenu();
				break;
				case 2://鲜艳
				t103_write(0x50, 0x68, 0x80);
				t103_write(0x50, 0x69, 0x80);
				t103_write(0x50, 0x6c, 0xb0);		
				refreshmenu();
				break;
				default:
			 	break;
				}
			 break;
		default:
			 break;
		}
	return;
	}
//******************osd菜单模式 2***************** T2I模式 
if(osdstyle==2)
	{
	if(key_tmp!=0&&activeline==0xff)
	{	
		//key+-updown,display the style 2
		if(key_tmp==0x01||key_tmp==0x02||key_tmp==0x04||key_tmp==0x08)
		{
		activeline=0;
		user_config[BRIGHTNESS]=t103_read(0x50, 0x69);
		user_config[CHROMA]=t103_read(0x50, 0x6c);
		user_config[CONSTRAST]=t103_read(0x50,0x68);
		refreshmenu();	
		refreshline(0, activeline);
		}
	osdenable();//active==0xff:osd开启
	return;
	}
	switch(key_tmp)
	    {
		case 0x00:
			if(activeline!=0xff){
				if(osdoff_time++==1000)
					{
					activeline=0xff;
					osdoff_time=0;			
					osddisable();
					cleanline(0,0);
					cleanline(0,1);
					cleanline(0,2);				
					savecfg();
					osdstyle=2;
					}
				}
			break;
		case 0x01://key dowm
			osdoff_time=0;	
			cleanline(0,activeline);
			activeline++;
			if(activeline>=MEUNLINE_MAX)activeline=MEUNLINE_MAX-1;
			refreshline(0, activeline);
			 break;
		case 0x02://key up
			osdoff_time=0;
			cleanline(0,activeline);
			/*
			switch(activeline)
					{
					case RESET_DEF:
						if(activeline==0xff)break;
						osdstyle=4;
						OSDInit();
						osdenable();
						break;
					default:
						if(activeline!=0)activeline--;
						refreshline(0, activeline);
						break;
				}
			*/
			if(activeline!=0)activeline--;
			refreshline(0, activeline);
			
			 break;
		case 0x04://key +
			osdoff_time=0;
			if(activeline>=MEUNLINE_MAX)
				{
				activeline=0;
				}
			else
				{
				if(user_config[activeline]<0xfc)user_config[activeline]+=4;
				switch(activeline)
					{
					case BRIGHTNESS:
						t103_write(0x50, 0x69,user_config[BRIGHTNESS]);
						//TD28_WRITE(0x0c, user_config[BRIGHTNESS]>>2);
						break;
					case CHROMA:
						t103_write(0x50, 0x6c, user_config[CHROMA]);
						break;
					case CONSTRAST:
						t103_write(0x50,0x68,user_config[CONSTRAST]);
						//TD28_WRITE(0x09, user_config[CONSTRAST]>>2);
						break;
					case RESET_DEF:
						t103_reset();
						t103_init();
						OSDInit();
						user_config[BRIGHTNESS]=DEFA_BRIGHTNESS;
						user_config[CHROMA]=DEFA_CHROMA;
						user_config[CONSTRAST]=DEFA_CONSTRAST;
						t103_write(0x50, 0x69,user_config[BRIGHTNESS]);
						t103_write(0x50, 0x6c, user_config[CHROMA]);
						t103_write(0x50,0x68,user_config[CONSTRAST]);
						/*
						user_config[BRIGHTNESS]=t103_read(0x50, 0x68);
						user_config[CHROMA]=t103_read(0x50, 0x6c);
						user_config[CONSTRAST]=t103_read(0x50,0x69);
						*/
						refreshline(0,0);
						cleanline(0,1);
						cleanline(0,2);
						activeline=0;
						osdoff_time=0;
						osdenable();
						break;
					default:
						break;
					}
				refreshline(0, activeline);
				}
			 break;
		case 0x08://key -
			osdoff_time=0;
			if(activeline>=MEUNLINE_MAX)
				{
				activeline=0;
				}
			else
				{
				if(user_config[activeline]>=4)user_config[activeline]-=4;
				switch(activeline)
					{
					case BRIGHTNESS:
						t103_write(0x50, 0x69,user_config[BRIGHTNESS]);
						//TD28_WRITE(0x0c, user_config[BRIGHTNESS]>>2);
						break;
					case CHROMA:
						t103_write(0x50, 0x6c, user_config[CHROMA]);
						
						break;
					case CONSTRAST:
						t103_write(0x50,0x68,user_config[CONSTRAST]);
						//TD28_WRITE(0x09, user_config[CONSTRAST]>>2);
						break;
					case RESET_DEF:
						t103_reset();
						t103_init();
						OSDInit();
						user_config[BRIGHTNESS]=DEFA_BRIGHTNESS;
						user_config[CHROMA]=DEFA_CHROMA;
						user_config[CONSTRAST]=DEFA_CONSTRAST;
						t103_write(0x50, 0x69,user_config[BRIGHTNESS]);
						t103_write(0x50, 0x6c, user_config[CHROMA]);
						t103_write(0x50,0x68,user_config[CONSTRAST]);
						/*
						user_config[BRIGHTNESS]=t103_read(0x50, 0x68);
						user_config[CHROMA]=t103_read(0x50, 0x6c);
						user_config[CONSTRAST]=t103_read(0x50,0x69);
						*/
						refreshline(0,0);
						cleanline(0,1);
						cleanline(0,2);
						activeline=0;
						osdoff_time=0;
						osdenable();
						break;
					default:
						break;
					}
				refreshline(0, activeline);
				}
			 break;
		case 0x10://KEY FUNCTION
		case 0x40://KEY FUNCTION
			 break;
		default:
			 break;
		}
	return;
	}
//*********************osd 菜单模式4*********************************
//td28 gamma test
if(osdstyle==4)
	{
	switch(key_tmp)
	    {
		case 0x00:
		{
				if(osdoff_time++==1000)
					{
					activeline=0xff;
					osdoff_time=0;			
					osddisable();
					cleanline(0,0);
					cleanline(0,1);
					cleanline(0,2);				
					savecfg();
					osdstyle=2;
					osddisable();
					}
				}
			break;
			break;
		case 0x01://key dowm
			osdoff_time=0;
			refreshmenu();
			if(cur_gm==gm8)
				cur_gm=gm0;
			else 
				cur_gm++;
			 break;
		case 0x02://key up
			osdoff_time=0;			
			if(cur_gm==gm0)
				cur_gm=gm8;
			else 
				cur_gm--;
			 break;
		case 0x04://key +
			
			osdoff_time=0;
			user_config[cur_gm]++;
			user_config[cur_gm]&=0xf;
			if(cur_gm==gm0||cur_gm==gm1)
				{
				tmp=((user_config[gm1]<<4)&0xf0)|user_config[gm0];
				TD28_WRITE(0x14, tmp);
				//TD28_WRITE(0x0c, tmp);
				refreshline_gm(0, 0);
				}
			if(cur_gm==gm2||cur_gm==gm3)
				{
				tmp=((user_config[gm3]<<4)&0xf0)|user_config[gm2];
				TD28_WRITE(0x15, tmp);
				//TD28_WRITE(0x09, tmp);
				refreshline_gm(0, 1);
				}
			if(cur_gm==gm4||cur_gm==gm5)
				{
				tmp=((user_config[gm5]<<4)&0xf0)|user_config[gm4];
				TD28_WRITE(0x16, tmp);
				refreshline_gm(0, 2);
				}
			if(cur_gm==gm6||cur_gm==gm7)
				{
				tmp=((user_config[gm7]<<4)&0xf0)|user_config[gm6];
				TD28_WRITE(0x17, tmp);
				refreshline_gm(0, 3);
				}
			if(cur_gm==gm8)
				{
				tmp=user_config[gm8];
				TD28_WRITE(0x18, tmp);	
				refreshline_gm(0, 4);
				}
			//refreshmenu();
			 break;
		case 0x08://key -
			osdoff_time=0;
			user_config[cur_gm]--;
			user_config[cur_gm]&=0xf;
			
			if(cur_gm==gm0||cur_gm==gm1)
				{
				tmp=((user_config[gm1]<<4)&0xf0)|user_config[gm0];
				TD28_WRITE(0x14, tmp);
				refreshline_gm(0, 0);
				}
			if(cur_gm==gm2||cur_gm==gm3)
				{
				tmp=((user_config[gm3]<<4)&0xf0)|user_config[gm2];
				TD28_WRITE(0x15, tmp);
				refreshline_gm(0, 1);
				}
			if(cur_gm==gm4||cur_gm==gm5)
				{
				tmp=((user_config[gm5]<<4)&0xf0)|user_config[gm4];
				TD28_WRITE(0x16, tmp);
				refreshline_gm(0, 2);
				}
			if(cur_gm==gm6||cur_gm==gm7)
				{
				tmp=((user_config[gm7]<<4)&0xf0)|user_config[gm6];
				TD28_WRITE(0x17, tmp);
				refreshline_gm(0, 3);
				}
			if(cur_gm==gm8)
				{
				tmp=user_config[gm8];
				TD28_WRITE(0x18, tmp);	
				refreshline_gm(0, 4);
				}
			//refreshmenu();
			 break;
		default:
			 break;
		}
	}
}
//*********************osd 菜单模式**********************************



//******************************************************************* 
//函   数   名  	:   leddisplay  
//建 立 时  间   	:   2006-9-23 
//功 能 描  述   	:  	0x00:全亮
//						0x01:
//						0x00:
//						0x00:
//						0x00:
//						0x00:

//说明			:
//备        注   		:   没有返回值 
//最后修改时间		:   2006-9-23
//********************************************************************
void leddisplay(void){
static	unsigned char led_delay=0;
extern 	unsigned char led_status;
switch(led_status){
	case 0x00:
		LED1_ON;
		LED2_ON;
		break;
	case 0x01:
		led_delay++;
		if(led_delay<=500/TIME_TICK)
			LED1_ON;
			LED2_ON;
		if(led_delay>=500/TIME_TICK&led_delay<=1000/TIME_TICK)
			LED1_OFF;
			LED2_ON;
		if(led_delay>1000/TIME_TICK)
			{
			led_delay=0;
			LED1_ON;
			LED2_ON;
			}
		break;
	case 0x02:
		led_delay++;
		if(led_delay<=250/TIME_TICK)
			LED1_ON;
		if(led_delay>=250/TIME_TICK&led_delay<=500/TIME_TICK)
			LED1_OFF;
		if(led_delay>500/TIME_TICK)
			{
			led_delay=0;
			LED1_ON;
			}
			LED2_OFF;
		break;
	case 0x03:
		led_delay++;
		if(led_delay<=500/TIME_TICK)
			LED2_ON;
		if(led_delay>=500/TIME_TICK&led_delay<=1000/TIME_TICK)
			LED2_OFF;
		if(led_delay>1000/TIME_TICK)
			{
			led_delay=0;
			LED2_ON;
			}
		break;
	case 0x04:
		led_delay++;
		if(led_delay<=250/TIME_TICK)
			LED2_ON;
		if(led_delay>=250/TIME_TICK&led_delay<=500/TIME_TICK)
			LED2_OFF;
		if(led_delay>500/TIME_TICK)
			{
			led_delay=0;
			LED2_ON;
			}
		break;
	case 0x05:
		LED2_ON;
		LED2_ON;
		break;
		case 0x06:		
	default:
		break;
	}
}
void statusscan(void)
{
static	unsigned char udstatus=0XFF;
extern  unsigned char cur_mode;
unsigned char tmp;
int i,j;
//unsigned char 	
//初始化状态
//0 :TD28-0x05-0x2b;	T103-0XCE-0XB9  (1:TD28-0x04-0x28;T103-0XCE-0X82)
tmp=UD_PIN&(1<<UD_BIT);

//up	to 	down
if((tmp==(1<<UD_BIT))&&(udstatus!=(1<<UD_BIT)))
{
for(i=0;i<10000;i++)
	{
	if((tmp=UD_PIN&(1<<UD_BIT))!=(1<<UD_BIT))return;;
	for(j=0;j<10;j++);
	}
udstatus=(1<<UD_BIT);
TD28_WRITE(0x05, 0x2b);
if(cur_mode==0)t103_write(0X50, 0XCE, 0Xb9);
if(cur_mode==1)t103_write(0X50, 0XCE, 0Xa6);
return;
}

//down	to	up
if((tmp==0)&&(udstatus!=0))
{
for(i=0;i<10000;i++)
	{
	if((tmp=UD_PIN&(1<<UD_BIT))!=0)return;
	for(j=0;j<10;j++);
	}
udstatus=0;
TD28_WRITE(0x05, 0x28);
if(cur_mode==0)t103_write(0X50, 0XCE, 0X82);
if(cur_mode==1)t103_write(0X50, 0XCE, 0Xdb);
return;
}
}
#endif

⌨️ 快捷键说明

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