如题,我设置的端点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。有按键也会有正确的按键信息。 |