zzh90513 发表于 2012-8-20 23:54:10

求助:用C8051F320模拟USB键盘键码重发问题

我现在用C8051F320实现接收串口的字符然后模拟usb键盘将字符以文本的方式输入到文本文件里面。
现在遇到的问题是接收一个字符后,这个字符会自动重发,找了一天没找到主要原因。希望哪位大侠能指点迷津一下啊。
不胜感激。//-----------------------------------------------------------------------------
// UART0_Interrupt
//-----------------------------------------------------------------------------
//
// This routine is invoked whenever a character is entered or displayed on the
// Hyperterminal.
//
//-----------------------------------------------------------------------------


void UART0_Interrupt (void) interrupt 4
{
   unsigned char key=0;
   unsigned char rx=0;

   if (RI0 == 1)
   {
      rx = SBUF0;
          RI0 = 0;               // Clear interrupt flag
          
                  switch(rx)
          {
                case 'a':
                        key = 0x04;
                        IN_PACKET        =key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'b':
                        key = 0x05;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);

                        break;
                case 'c':
                        key = 0x06;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'd':
                        key = 0x07;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'e':
                        key = 0x08;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'f':
                        key = 0x09;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'g':
                        key = 0x0A;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'h':
                        key = 0x0B;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'i':
                        key = 0x0C;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'j':
                        key = 0x0D;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'k':
                        key = 0x0E;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'l':
                        key = 0x0F;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'm':
                        key = 0x10;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'n':
                        key = 0x11;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'o':
                        key = 0x12;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'p':
                        key = 0x13;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'q':
                        key = 0x14;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'r':
                        key = 0x15;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 's':
                        key = 0x16;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 't':
                        key = 0x17;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'u':
                        key = 0x18;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'v':
                        key = 0x19;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'w':
                        key = 0x1A;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'x':
                        key = 0x1B;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'y':
                        key = 0x1C;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'z':
                        key = 0x1D;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'A':
                        key = 0x04;
                        IN_PACKET        = 0x20;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'B':
                        key = 0x05;
                        IN_PACKET        = 0x20;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'C':
                        key = 0x06;
                        IN_PACKET        = 0x20;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'D':
                        key = 0x07;
                        IN_PACKET        = 0x20;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'E':
                        key = 0x08;
                        IN_PACKET        = 0x20;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'F':
                        key = 0x09;
                        IN_PACKET        = 0x20;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'G':
                        key = 0x0A;
                        IN_PACKET        = 0x20;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'H':
                        key = 0x0B;
                        IN_PACKET        = 0x20;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'I':
                        key = 0x0C;
                        IN_PACKET        = 0x20;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'J':
                        key = 0x0D;
                        IN_PACKET        = 0x20;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'K':
                        key = 0x0E;
                        IN_PACKET        = 0x20;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'L':
                        key = 0x0F;
                        IN_PACKET        = 0x20;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'M':
                        key = 0x10;
                        IN_PACKET        = 0x20;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'N':
                        key = 0x11;
                        IN_PACKET        = 0x20;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'O':
                        key = 0x12;
                        IN_PACKET        = 0x20;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'P':
                        key = 0x13;
                        IN_PACKET        = 0x20;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'Q':
                        key = 0x14;
                        IN_PACKET        = 0x20;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'R':
                        key = 0x15;
                        IN_PACKET        = 0x20;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'S':
                        key = 0x16;
                        IN_PACKET        = 0x20;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'T':
                        key = 0x17;
                        IN_PACKET        = 0x20;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'U':
                        key = 0x18;
                        IN_PACKET        = 0x20;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'V':
                        key = 0x19;
                        IN_PACKET        = 0x20;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'W':
                        key = 0x1A;
                        IN_PACKET        = 0x20;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'X':
                        key = 0x1B;
                        IN_PACKET        = 0x20;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'Y':
                        key = 0x1C;
                        IN_PACKET        = 0x20;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 'Z':
                        key = 0x1D;
                        IN_PACKET        = 0x20;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case '1':
                        key = 0x1E;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case '2':
                        key = 0x1F;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case '3':
                        key = 0x20;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case '4':
                        key = 0x21;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case '5':
                        key = 0x22;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case '6':
                        key = 0x23;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case '7':
                        key = 0x24;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case '8':
                        key = 0x25;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case '9':
                        key = 0x26;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case '0':
                        key = 0x27;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case '.':
                        key = 0x37;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case ',':
                        key = 0x36;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case '-':
                        key = 0x2D;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case '+':
                        key = 0x2E;
                        IN_PACKET        = 0x02;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case ' ':
                        key = 0x2C;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case ':':
                        key = 0x33;
                        IN_PACKET        = 0x02;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                case 0x0d:
                        key = 0x58;
                        IN_PACKET        = key;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                        break;
                default:
                  IN_PACKET        =0;
                  IN_PACKET        =0;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                  break;
          }                  
   }
}

zzh90513 发表于 2012-8-21 06:55:07

自己抢个沙发

zzh90513 发表于 2012-8-21 08:28:20

再顶一下

jetli 发表于 2012-8-21 09:36:28

把工程整个打包rar上来 {:sweat:}

zzh90513 发表于 2012-8-21 09:41:41

jetli 发表于 2012-8-21 09:36 static/image/common/back.gif
把工程整个打包rar上来

attach://Keyboard.zip

谢谢,帮忙看看哈

zzh90513 发表于 2012-8-21 09:43:12

jetli 发表于 2012-8-21 09:36 static/image/common/back.gif
把工程整个打包rar上来

已经上传了

jetli 发表于 2012-8-21 10:13:50

试着做这样的测试,【 调试程序的排除法】

1、接收到一个字符后,强制进入一个死循环例如某LED闪。
2、如果还会有,重复字符重发,说明是中断出现了循环。
3、再屏蔽此中断
、、、

amazing030 发表于 2013-3-25 16:42:25

zzh90513 发表于 2012-8-21 09:43 static/image/common/back.gif
已经上传了

不知道你的问题解决没?我最近用321做个东西也是重复发码,还没找到问题

xi416547162 发表于 2013-7-11 09:00:24

本帖最后由 xi416547162 于 2013-7-11 09:02 编辑

应该是没发断码,相当于电脑认为按键按下未释放,不知道usb键盘里有没有这说法?

and001 发表于 2014-8-5 18:22:48

zzh90513 发表于 2012-8-21 09:41
attach://Keyboard.zip

谢谢,帮忙看看哈

兄弟:

你的程序搞好了吗?我也是用C8051F340模拟枚举USB键盘,可是到 SEF CONFIG 命令后失败!有没好的方法?

and001 发表于 2014-8-17 10:23:32

本帖最后由 and001 于 2014-8-17 10:46 编辑

兄弟搞好那个重复问题没?我等你的答案呀?好像是USB重复发,???

我看你的解决办法是空闲的时候发“0”,对吧?
//                        IN_PACKET        = key;
//                        IN_PACKET        =0;       
//                        IN_PACKET        =0;       
//                        IN_PACKET        =0;
//                        IN_PACKET        =0;
//                        IN_PACKET        =0;
//                        SendPacket (0);
//                        break;
                default:
                  IN_PACKET        =0;
                  IN_PACKET        =0;
                        IN_PACKET        =0;       
                        IN_PACKET        =0;       
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        IN_PACKET        =0;
                        SendPacket (0);
                  break;
               
               
               
          }   
//        }               

}

zzh90513 发表于 2014-8-18 10:33:50

and001 发表于 2014-8-17 10:23
兄弟搞好那个重复问题没?我等你的答案呀?好像是USB重复发,???

我看你的解决办法是空闲的时候发“0” ...

发送0代表释放按键,“按下”和“弹起”必须成对出现,要不然就是“连按”

and001 发表于 2014-8-18 10:41:51

zzh90513 发表于 2014-8-18 10:33
发送0代表释放按键,“按下”和“弹起”必须成对出现,要不然就是“连按” ...

非常感谢!我也已经实现用C8051F340实现USB键盘模拟功能!
想顺便问问:兄弟现在搞啥项目?

and001 发表于 2014-8-18 22:13:12

zzh90513 发表于 2014-8-18 10:33
发送0代表释放按键,“按下”和“弹起”必须成对出现,要不然就是“连按” ...

当前想用内部的晶体(默认为12MHz)


如下操作:
#define SYS_INT_OSC      0x00      // Select to use internal oscillator
#define SYS_EXT_OSC      0x01      // Select to use an external oscillator
#define SYS_4X_DIV_2       0x02
先#define _USB_LOW_SPEED_    // 让它直接用内部时钟,其他都不修改




void Sysclk_Init (void)
{
#ifdef _USB_LOW_SPEED_

   OSCICN |= 0x03;                     // Configure internal oscillator for 内部时钟不分频
                                       // its maximum frequency and enable
                                       // missing clock detector

          CLKSEL= SYS_INT_OSC;            // Select System clock --用内部时钟
                CLKSEL |= USB_INT_OSC_DIV_2;      // Select USB clock---系统时钟2分频给USB用--6MHz
#else
   OSCICN |= 0x03;                     // Configure internal oscillator for
                                       // its maximum frequency and enable
                                       // missing clock detector

   CLKMUL= 0x00;                     // Select internal oscillator as
                                       // input to clock multiplier

   CLKMUL |= 0x80;                     // Enable clock multiplier
   CLKMUL |= 0xC0;                     // Initialize the clock multiplier
   Delay();                            // Delay for clock multiplier to begin

   while(!(CLKMUL & 0x20));            // Wait for multiplier to lock
   CLKSEL= SYS_INT_OSC;            // Select system clock
   CLKSEL |= USB_4X_CLOCK;             // Select USB clock
#endif/* _USB_LOW_SPEED_ */
}




就好像枚举都不成功了,请问我这样有什么问题、。??

zzh90513 发表于 2014-8-18 22:31:10

and001 发表于 2014-8-18 22:13
当前想用内部的晶体(默认为12MHz)




我前面上传了工程,对照下

and001 发表于 2014-8-18 23:05:33

zzh90513 发表于 2014-8-18 22:31
我前面上传了工程,对照下

谢谢!我弄错了,应该已经是内部时钟了,只是为什么是全速USB呢?好像键盘和鼠标都应该是 低速的吗?

zzh90513 发表于 2014-8-19 14:11:07

and001 发表于 2014-8-18 23:05
谢谢!我弄错了,应该已经是内部时钟了,只是为什么是全速USB呢?好像键盘和鼠标都应该是 低速的吗? ...

全速,低速代表传输速度,跟什么设备没关系

and001 发表于 2014-8-19 14:14:01

我定义成低速完全跑不起来?是不是HID设备枚举里面已经有参数默认成全速?

#define _USB_LOW_SPEED_ 后不能枚举??

zzh90513 发表于 2014-8-19 21:07:29

and001 发表于 2014-8-19 14:14
我定义成低速完全跑不起来?是不是HID设备枚举里面已经有参数默认成全速?

#define _USB_LOW_SPEED_ 后不 ...

枚举过程里面变量需要修改
页: [1]
查看完整版本: 求助:用C8051F320模拟USB键盘键码重发问题