首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

一个键的长短按

一个键的长短按

有三个键,分别是 KEY_PLAY  KEY_UP  KEY_DOWN

#define KEY_PLAY  0
#define KEY_UP   1
#define KEY_DOWN  2
#define KEY_DEL  3
#define KEY_PORT  0
#define KEY_PORT_PU  0_PU
#define KEY_PORT_DDR  0_DDR
#define KEY_MARK  (BIT(KEY_DEL)|BIT(KEY_DOWN)|BIT(KEY_UP)|BIT(KEY_PLAY))
#define KEY_0S_PLAY BIT(KEY_PLAY)
#define KEY_0S_UP BIT(KEY_UP)
#define KEY_0S_DOWN BIT(KEY_DOWN)
#define KEY_0S_DEL BIT(KEY_DEL)
#define KEY_1S_PLAY BIT(KEY_PLAY+4)
#define KEY_1S_UP BIT(KEY_UP+4)
#define KEY_1S_DOWN BIT(KEY_DOWN+4)
#define KEY_1S_DEL BIT(KEY_DEL+4)
#define KEY_2S_PLAY BIT(KEY_PLAY+8)
#define KEY_2S_UP BIT(KEY_UP+8)
#define KEY_2S_DOWN BIT(KEY_DOWN+8)
#define KEY_2S_DEL BIT(KEY_DEL+8)
#define KEY_REP_PLAY BIT(KEY_PLAY+12)
#define KEY_REP_UP BIT(KEY_UP+12)
#define KEY_REP_DOWN BIT(KEY_DOWN+12)
#define KEY_REP_DEL BIT(KEY_DEL+12)

现在KEY_PLAY可以长短按,其他两个却不行!

void Key_Scan( void )
{
 Key_IO_Set();
 if( keydataio = (~KEY_PORT)&KEY_MARK )
 {
  if( PowerDownCount ) PowerDownCount = ModePower;
  if( keydata == keydataio )
  {
   if( !(keycnt%keyrepcount) ) pub_keydata |= (keydata&0xF)<<12;
   if( keycnt++ <= KEY_CNT2S )
   {
    if( keycnt == KEY_CNT2S ) pub_keydata |= (keydata&0x9)<<8;
    if( keycnt == KEY_CNT0S+1 ) pub_keydata |= (keydata&0x6);
   }
   keycnt &= 0x7FFFU;
  }
  else keydata = keydataio;
 }
 else
 {
  if( keycnt )
  {
   if( keycnt < KEY_CNT2S ) pub_keydata |= (keydata&0x9)<<4;
   keycnt = 0;
  }
  if( PowerDownCount ) PowerDownCount--;
 }
 Key_IO_Clear();

 if( Time_Count ) Time_Count--; 
}
有人知道怎么设置不!?

返回列表