📄 ic165.c
字号:
#if 1
#include "ic165.h"
#include "debug.h"
#include "comm.h"
#include "Key_process.h"
#define KEY_NONE 0
#define KEY_PRESS 1
#define KEY_HOLD 2
#define KEY_UP 3
#define _NEW_KEY_PRESS_TIME 1
#define _KEY_HOLD_TIME 12
//#define _SHORT_KEY_HOLD_TIME 10
#define _LONG_KEY_HOLD_TIME 10
extern uchar user_key;
static void proc_key_press(unsigned char key_value);
static void proc_key_hold(unsigned char key_value,unsigned int hold_time);
static void proc_key_up(unsigned char key_value,unsigned int hold_time);
typedef struct {
unsigned char key_value;
unsigned char key_mode;
}_PANEL_KEY,*_pPANEL_KEY;
enum
{
DECT_EXIT_KEY = 1,// ENTER_KEY, /*1*/ /*p 0.4 * p0.1*/
DECT_VOLUME_UP_KEY,
DECT_LEFT_KEY,///* VOLUME_DN_KEY,*/ /*3*/ /*p 0.4 * p0.3*/DOWN_KEY,
DECT_UP_KEY,///* VOLUME_UP_KEY,*/ /*4*/ /*p 0.5 * p0.1 */EXIT_KEY,
DECT_DOWN_KEY,//_POWER_KEY, /*5*/ /*p 0.5 * p0.2 */
DECT_RIGHT_KEY,///* UP_KEY,*/ /*6*/ /*p 0.5 * p0.3 */LEFT_KEY,
DECT_VOLUME_DN_KEY,
DECT__POWER_KEY,///* LEFT_KEY,*/ /*8*/ /*p 1.0 * p0.2*/UP_KEY,
DECT_ENTER_KEY,//RIGHT_KEY, /*9*/ /*p 1.0 * p0.2*/
DECT_EXTERN_KEY, /*JIAN ADD IN 08-03-06*/
};
#ifdef PANEL_KEY_4_2
#define key_init_state 0x3c
#define key1_effect (key_init_state&(~0x04))
#define key2_effect (key_init_state&(~0x08))
#define key3_effect (key_init_state&(~0x10))
#define key4_effect (key_init_state&(~0x20))
/******************************************************************
8个前控按键扫描
2×4
******************************************************************/
unsigned char Scan_Panel_Key()
{
unsigned char port_vaule;
unsigned char key_vaule;
unsigned char scan_cnt;
for(scan_cnt = 0;scan_cnt<2;scan_cnt++)
{
if(scan_cnt == 0)
{
PORT_ROM1 = 0;
PORT_ROM2 = 1;
}
else
{
PORT_ROM1 = 1;
PORT_ROM2 = 0;
}
port_vaule = (P0&key_init_state); /*读p0口的四个IO口*/
if(port_vaule != key_init_state) /*当IO口有变化的时候*/
{
/*发现有两个键以上同时按下时,不做处理*/
if(key_vaule > 0)
{
key_vaule = 0;
break;
}
}
else
{
if(scan_cnt == 1)
key_vaule = 4;
}
switch(port_vaule&0xff)
{
case key1_effect:
key_vaule += 1;
break;
case key2_effect:
key_vaule += 2;
break;
case key3_effect:
key_vaule += 3;
break;
case key4_effect:
key_vaule += 4;
break;
default: /**/
key_vaule = 0;
break;
}
}
// Scan_Key_init();
return key_vaule;
}
#else
/*
p 0.1
p 0.2
p 0.3
*/
#define key_init_state 0x1c
#define key1_effect (key_init_state&(~0x04)) /*p0.2*/
#define key2_effect (key_init_state&(~0x08)) /*p0.3*/
#define key3_effect (key_init_state&(~0x10)) /*p0.4*/
//#define key4_effect (key_init_state&(~0x20))
/******************************************************************
8个前控按键扫描
3 * 3
******************************************************************/
unsigned char Scan_Panel_Key()
{
unsigned char port_vaule;
unsigned char key_vaule;
unsigned char scan_cnt;
//static int cnt;
// PORT_LINE1 = 0;
#if 0
if(cnt != 500)
{
cnt ++;
}
else
{
cnt = 0;
return 0;
}
#endif
PORT_LINE1 = 1;
PORT_LINE2 = 1;
PORT_LINE3 = 1;
for(scan_cnt = 0;scan_cnt < 3; scan_cnt++)
{
//PORT_LINE2 = 1;
// tvbox_printf(" scan_cnt:", scan_cnt, 1);
if(scan_cnt == 0)
{
//PORT_LINE2 = 1;
PORT_ROM1 = 0;
PORT_ROM2 = 1;
PORT_ROM3 = 1;
}
else if(scan_cnt == 1)
{
PORT_ROM1 = 1;
PORT_ROM2 = 0;
PORT_ROM3 = 1;
// PORT_LINE2 = 0;
}
else if(scan_cnt == 2)
{
PORT_ROM2 = 1;
PORT_ROM3 = 0;
PORT_ROM1 = 1;
}
// if(PORT_LINE2 == 0)
// {
// STANDBY_LED = ~STANDBY_LED;
// }
port_vaule = (P0&key_init_state); /*读p0口的四个IO口*/
// tvbox_printf("port_vaule:", port_vaule, 1);
if(port_vaule != key_init_state) /*当IO口有变化的时候*/
{
/*发现有两个键以上同时按下时,不做处理*/
/*当发现有两个按键,下键和上键同时按下的时候产生第十个键值*/
if(key_vaule > 0)
{
if(key_vaule == DECT_UP_KEY) /*检测到有第二个键按下的时候,前一个键是方向上键或是下键 ,再判断此时的按键是否是这两个键的另一个
如果条件满足就产生第十个键值,否则就不做处理
dect_up_key
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -