打印

usb键盘空闲时间一致发送8个0x00.

[复制链接]
2213|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
443799600|  楼主 | 2010-6-28 16:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,我设置的端点2中断,按照圈圈的设置:
/****************************主端点输入处理************************************/
void endp2_in(void)                                    
{
uint8 i;
// Prints("端点2输入................................",1);
KeyMapCanChange=0;  //禁止修改按键值
if(KeyMapOk) //如果有按键按下
{
//4*4的键盘,最多能够识别3个键同时按下,
//如果开关上接二极管可以同时识别更多的键
if(Count1Bits(KeyMapOk)>3)
  {
        for(i=2;i<8;i++)InBuffer[i]=0x01;  //按键过多
       }
else
  {
   if(KeyMapOk&(1<<3)) //左Ctrl键
    {
     InBuffer[0]|=1;
    }
   else
    {
     InBuffer[0]&=~1;
    }

   if(KeyMapOk&(1<<7)) //左shift键
    {
     InBuffer[0]|=1<<1;
    }
   else
    {
     InBuffer[0]&=~(1<<1);
    }

   if(KeyMapOk&(1<<2)) //左ALT键
    {
     InBuffer[0]|=1<<2;
    }
   else
    {
         InBuffer[0]&=~(1<<2);
        }
        i=2;
        if(KeyMapOk&(1))
        {
         InBuffer[i++]=0x28;           //回车键
        }
        if(KeyMapOk&(1<<1))
        {
         InBuffer[i++]=0x62;           //0键
        }
        if(KeyMapOk&(1<<4))
        {
         InBuffer[i++]=0x5B;           //3键
        }
        if(KeyMapOk&(1<<5))
        {
         InBuffer[i++]=0x5A;           //2键
        }
        if(KeyMapOk&(1<<6))
        {
         InBuffer[i++]=0x59;           //1键
        }
        if(KeyMapOk&(1<<8))
        {
         InBuffer[i++]=0x5E;           //6键
        }
        if(KeyMapOk&(1<<9))
        {
         InBuffer[i++]=0x5D;           //5键
        }
        if(KeyMapOk&(1<<10))
        {
         InBuffer[i++]=0x5C;           //4键
        }
        if(KeyMapOk&(1<<11))
        {
         InBuffer[i++]=0x39;           //Caps Lock键
        }
        if(KeyMapOk&(1<<12))
        {
         InBuffer[i++]=0x61;           //9键
        }
        if(KeyMapOk&(1<<13))
        {
         InBuffer[i++]=0x60;           //8键
        }
        if(KeyMapOk&(1<<14))
        {
         InBuffer[i++]=0x5F;           //2键
        }
        if(KeyMapOk&(1<<15))
        {
         InBuffer[i++]=0x53;           //Num Lock键
        }
        for(;i<8;i++)
        {
         InBuffer[i]=0;  //多余的清0
        }
       }
}
else //如果无按键按下,则返回0
{
for(i=0;i<8;i++)
  {
        InBuffer[i]=0;
       }
}
KeyMapCanChange=1; //允许修改按键值
//返回8个字节数据
write_endpoint_buff(5,8,InBuffer);
}
但是空闲时段会一致发送8个0x00。有按键也会有正确的按键信息。

相关帖子

沙发
大秦正声| | 2010-6-29 14:03 | 只看该作者
else //如果无按键按下,则返回0
{
for(i=0;i<8;i++)
  {
        InBuffer=0;
       }
}


用定时器查询键盘状态的!  空闲时段会一直发送8个0x00
说明无键盘操作.

51+d12不是好方案!

可以考虑用c8051f320/340

我的博客:
http://yang96381.blog.163.com/

使用特权

评论回复
板凳
大秦正声| | 2010-6-29 14:10 | 只看该作者
实现键盘和鼠标在系统中互换!一会是键盘,一会是鼠标!
好象川剧中的"变脸"!

使用特权

评论回复
地板
USB初学者| | 2015-4-5 21:27 | 只看该作者
MARK

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

16

帖子

0

粉丝