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

📄 ic165.c

📁 p89lpc915程序
💻 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 + -