/********************************************/
//FileName:识别四个独立按键是短按还是长按
//Function: 不同按键 短按或长按分别显示不同的LED
//author:liu yong
//QQ:545018331
//Date:2013/03/13
/********************************************/
#include <PIC.H>
__CONFIG(0X3B31);
#define uint8 unsigned char
unsigned int time_10ms_ok=0;
uint8 KeyValue;
bit KeyShortpressFlag,KeyLongpressFlag;
//=========定义长按键断口的TICK数及连发间隔的TICK数=======//
#define KEY_LONG_PERIOD 200
//=========定义按键断口=======//
#define io_key_1 RB0
#define io_key_2 RB1
#define io_key_3 RB2
#define io_key_4 RB3
//=========定义按键键值=======//
#define KEY_VALUE_1 0X0e
#define KEY_VALUE_2 0X0d
#define KEY_VALUE_3 0X0b
#define KEY_VALUE_4 0X07
#define KEY_NULL 0X0f
//=========定义按键返回值状态(按下,长按,连发,释放)=======//
#define KEY_SHORT 0X80
#define KEY_LONG 0X40
//=========定义按键状态=======//
#define KEY_STATE_INIT 0
#define KEY_STATE_WOBBLE 1
#define KEY_STATE_PRESS 2
#define KEY_STATE_LONG 3
#define KEY_STATE_RELEASE 4
void initial(void)
{
 TRISB=0xff;
 TRISC=0;
 PORTC=0XFF;
 RBPU=0;
 T1CON=0X01;//1:1
 TMR1H=-(10000 >> 8);
 TMR1L=-(10000 & 0XFF);
 TMR1IF=0;
 TMR1IE=1;
 INTCON=0XC0;
}
void interrupt timer1_isr(void) // 定时器10ms中断服务
{
 if(TMR1IF)
 {
 TMR1H=-(10000 >> 8);
 TMR1L=-(10000 & 0XFF);
 time_10ms_ok = 1;
 TMR1IF=0;
 }
}
void KeyInit(void)
{
 io_key_1 = 1;
 io_key_2 = 1;
  io_key_3 = 1;
 io_key_4 = 1;
}
uint8 KeyScan(void)
{
 if(io_key_1 == 0)return KEY_VALUE_1;
 if(io_key_2 == 0)return KEY_VALUE_2;
 if(io_key_3 == 0)return KEY_VALUE_3;
 if(io_key_4 == 0)return KEY_VALUE_4;
 return KEY_NULL;
}
uint8 GetKey(void)
{
 static uint8 s_u8KeyState = KEY_STATE_INIT ;
 static uint8 s_u8KeyTimeCount = 0;
 uint8 i ;
 uint8 KeyTemp=KEY_NULL;
 KeyTemp = KeyScan();//0x0e 0f
 switch(s_u8KeyState)
 {
 case KEY_STATE_INIT:
 {
 if(KEY_NULL != KeyTemp)
 {
 s_u8KeyState = KEY_STATE_WOBBLE ;
 }
 }
 break;
 case KEY_STATE_WOBBLE:
 {