📄 key.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 + -