搜索
bottom↓
回复: 18

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

[复制链接]

出100入143汤圆

发表于 2012-8-20 23:54:10 | 显示全部楼层 |阅读模式
我现在用C8051F320实现接收串口的字符然后模拟usb键盘将字符以文本的方式输入到文本文件里面。
现在遇到的问题是接收一个字符后,这个字符会自动重发,找了一天没找到主要原因。希望哪位大侠能指点迷津一下啊。
不胜感激。
  1. //-----------------------------------------------------------------------------
  2. // UART0_Interrupt
  3. //-----------------------------------------------------------------------------
  4. //
  5. // This routine is invoked whenever a character is entered or displayed on the
  6. // Hyperterminal.
  7. //
  8. //-----------------------------------------------------------------------------


  9. void UART0_Interrupt (void) interrupt 4
  10. {
  11.    unsigned char key=0;
  12.    unsigned char rx=0;

  13.    if (RI0 == 1)
  14.    {
  15.       rx = SBUF0;
  16.           RI0 = 0;               // Clear interrupt flag
  17.           
  18.                   switch(rx)
  19.           {
  20.                 case 'a':
  21.                         key = 0x04;
  22.                         IN_PACKET[2]        =key;
  23.                         IN_PACKET[3]        =0;       
  24.                         IN_PACKET[4]        =0;       
  25.                         IN_PACKET[5]        =0;
  26.                         IN_PACKET[6]        =0;
  27.                         IN_PACKET[7]        =0;
  28.                         SendPacket (0);
  29.                         break;
  30.                 case 'b':
  31.                         key = 0x05;
  32.                         IN_PACKET[2]        = key;
  33.                         IN_PACKET[3]        =0;       
  34.                         IN_PACKET[4]        =0;       
  35.                         IN_PACKET[5]        =0;
  36.                         IN_PACKET[6]        =0;
  37.                         IN_PACKET[7]        =0;
  38.                         SendPacket (0);

  39.                         break;
  40.                 case 'c':
  41.                         key = 0x06;
  42.                         IN_PACKET[2]        = key;
  43.                         IN_PACKET[3]        =0;       
  44.                         IN_PACKET[4]        =0;       
  45.                         IN_PACKET[5]        =0;
  46.                         IN_PACKET[6]        =0;
  47.                         IN_PACKET[7]        =0;
  48.                         SendPacket (0);
  49.                         break;
  50.                 case 'd':
  51.                         key = 0x07;
  52.                         IN_PACKET[2]        = key;
  53.                         IN_PACKET[3]        =0;       
  54.                         IN_PACKET[4]        =0;       
  55.                         IN_PACKET[5]        =0;
  56.                         IN_PACKET[6]        =0;
  57.                         IN_PACKET[7]        =0;
  58.                         SendPacket (0);
  59.                         break;
  60.                 case 'e':
  61.                         key = 0x08;
  62.                         IN_PACKET[2]        = key;
  63.                         IN_PACKET[3]        =0;       
  64.                         IN_PACKET[4]        =0;       
  65.                         IN_PACKET[5]        =0;
  66.                         IN_PACKET[6]        =0;
  67.                         IN_PACKET[7]        =0;
  68.                         SendPacket (0);
  69.                         break;
  70.                 case 'f':
  71.                         key = 0x09;
  72.                         IN_PACKET[2]        = key;
  73.                         IN_PACKET[3]        =0;       
  74.                         IN_PACKET[4]        =0;       
  75.                         IN_PACKET[5]        =0;
  76.                         IN_PACKET[6]        =0;
  77.                         IN_PACKET[7]        =0;
  78.                         SendPacket (0);
  79.                         break;
  80.                 case 'g':
  81.                         key = 0x0A;
  82.                         IN_PACKET[2]        = key;
  83.                         IN_PACKET[3]        =0;       
  84.                         IN_PACKET[4]        =0;       
  85.                         IN_PACKET[5]        =0;
  86.                         IN_PACKET[6]        =0;
  87.                         IN_PACKET[7]        =0;
  88.                         SendPacket (0);
  89.                         break;
  90.                 case 'h':
  91.                         key = 0x0B;
  92.                         IN_PACKET[2]        = key;
  93.                         IN_PACKET[3]        =0;       
  94.                         IN_PACKET[4]        =0;       
  95.                         IN_PACKET[5]        =0;
  96.                         IN_PACKET[6]        =0;
  97.                         IN_PACKET[7]        =0;
  98.                         SendPacket (0);
  99.                         break;
  100.                 case 'i':
  101.                         key = 0x0C;
  102.                         IN_PACKET[2]        = key;
  103.                         IN_PACKET[3]        =0;       
  104.                         IN_PACKET[4]        =0;       
  105.                         IN_PACKET[5]        =0;
  106.                         IN_PACKET[6]        =0;
  107.                         IN_PACKET[7]        =0;
  108.                         SendPacket (0);
  109.                         break;
  110.                 case 'j':
  111.                         key = 0x0D;
  112.                         IN_PACKET[2]        = key;
  113.                         IN_PACKET[3]        =0;       
  114.                         IN_PACKET[4]        =0;       
  115.                         IN_PACKET[5]        =0;
  116.                         IN_PACKET[6]        =0;
  117.                         IN_PACKET[7]        =0;
  118.                         SendPacket (0);
  119.                         break;
  120.                 case 'k':
  121.                         key = 0x0E;
  122.                         IN_PACKET[2]        = key;
  123.                         IN_PACKET[3]        =0;       
  124.                         IN_PACKET[4]        =0;       
  125.                         IN_PACKET[5]        =0;
  126.                         IN_PACKET[6]        =0;
  127.                         IN_PACKET[7]        =0;
  128.                         SendPacket (0);
  129.                         break;
  130.                 case 'l':
  131.                         key = 0x0F;
  132.                         IN_PACKET[2]        = key;
  133.                         IN_PACKET[3]        =0;       
  134.                         IN_PACKET[4]        =0;       
  135.                         IN_PACKET[5]        =0;
  136.                         IN_PACKET[6]        =0;
  137.                         IN_PACKET[7]        =0;
  138.                         SendPacket (0);
  139.                         break;
  140.                 case 'm':
  141.                         key = 0x10;
  142.                         IN_PACKET[2]        = key;
  143.                         IN_PACKET[3]        =0;       
  144.                         IN_PACKET[4]        =0;       
  145.                         IN_PACKET[5]        =0;
  146.                         IN_PACKET[6]        =0;
  147.                         IN_PACKET[7]        =0;
  148.                         SendPacket (0);
  149.                         break;
  150.                 case 'n':
  151.                         key = 0x11;
  152.                         IN_PACKET[2]        = key;
  153.                         IN_PACKET[3]        =0;       
  154.                         IN_PACKET[4]        =0;       
  155.                         IN_PACKET[5]        =0;
  156.                         IN_PACKET[6]        =0;
  157.                         IN_PACKET[7]        =0;
  158.                         SendPacket (0);
  159.                         break;
  160.                 case 'o':
  161.                         key = 0x12;
  162.                         IN_PACKET[2]        = key;
  163.                         IN_PACKET[3]        =0;       
  164.                         IN_PACKET[4]        =0;       
  165.                         IN_PACKET[5]        =0;
  166.                         IN_PACKET[6]        =0;
  167.                         IN_PACKET[7]        =0;
  168.                         SendPacket (0);
  169.                         break;
  170.                 case 'p':
  171.                         key = 0x13;
  172.                         IN_PACKET[2]        = key;
  173.                         IN_PACKET[3]        =0;       
  174.                         IN_PACKET[4]        =0;       
  175.                         IN_PACKET[5]        =0;
  176.                         IN_PACKET[6]        =0;
  177.                         IN_PACKET[7]        =0;
  178.                         SendPacket (0);
  179.                         break;
  180.                 case 'q':
  181.                         key = 0x14;
  182.                         IN_PACKET[2]        = key;
  183.                         IN_PACKET[3]        =0;       
  184.                         IN_PACKET[4]        =0;       
  185.                         IN_PACKET[5]        =0;
  186.                         IN_PACKET[6]        =0;
  187.                         IN_PACKET[7]        =0;
  188.                         SendPacket (0);
  189.                         break;
  190.                 case 'r':
  191.                         key = 0x15;
  192.                         IN_PACKET[2]        = key;
  193.                         IN_PACKET[3]        =0;       
  194.                         IN_PACKET[4]        =0;       
  195.                         IN_PACKET[5]        =0;
  196.                         IN_PACKET[6]        =0;
  197.                         IN_PACKET[7]        =0;
  198.                         SendPacket (0);
  199.                         break;
  200.                 case 's':
  201.                         key = 0x16;
  202.                         IN_PACKET[2]        = key;
  203.                         IN_PACKET[3]        =0;       
  204.                         IN_PACKET[4]        =0;       
  205.                         IN_PACKET[5]        =0;
  206.                         IN_PACKET[6]        =0;
  207.                         IN_PACKET[7]        =0;
  208.                         SendPacket (0);
  209.                         break;
  210.                 case 't':
  211.                         key = 0x17;
  212.                         IN_PACKET[2]        = key;
  213.                         IN_PACKET[3]        =0;       
  214.                         IN_PACKET[4]        =0;       
  215.                         IN_PACKET[5]        =0;
  216.                         IN_PACKET[6]        =0;
  217.                         IN_PACKET[7]        =0;
  218.                         SendPacket (0);
  219.                         break;
  220.                 case 'u':
  221.                         key = 0x18;
  222.                         IN_PACKET[2]        = key;
  223.                         IN_PACKET[3]        =0;       
  224.                         IN_PACKET[4]        =0;       
  225.                         IN_PACKET[5]        =0;
  226.                         IN_PACKET[6]        =0;
  227.                         IN_PACKET[7]        =0;
  228.                         SendPacket (0);
  229.                         break;
  230.                 case 'v':
  231.                         key = 0x19;
  232.                         IN_PACKET[2]        = key;
  233.                         IN_PACKET[3]        =0;       
  234.                         IN_PACKET[4]        =0;       
  235.                         IN_PACKET[5]        =0;
  236.                         IN_PACKET[6]        =0;
  237.                         IN_PACKET[7]        =0;
  238.                         SendPacket (0);
  239.                         break;
  240.                 case 'w':
  241.                         key = 0x1A;
  242.                         IN_PACKET[2]        = key;
  243.                         IN_PACKET[3]        =0;       
  244.                         IN_PACKET[4]        =0;       
  245.                         IN_PACKET[5]        =0;
  246.                         IN_PACKET[6]        =0;
  247.                         IN_PACKET[7]        =0;
  248.                         SendPacket (0);
  249.                         break;
  250.                 case 'x':
  251.                         key = 0x1B;
  252.                         IN_PACKET[2]        = key;
  253.                         IN_PACKET[3]        =0;       
  254.                         IN_PACKET[4]        =0;       
  255.                         IN_PACKET[5]        =0;
  256.                         IN_PACKET[6]        =0;
  257.                         IN_PACKET[7]        =0;
  258.                         SendPacket (0);
  259.                         break;
  260.                 case 'y':
  261.                         key = 0x1C;
  262.                         IN_PACKET[2]        = key;
  263.                         IN_PACKET[3]        =0;       
  264.                         IN_PACKET[4]        =0;       
  265.                         IN_PACKET[5]        =0;
  266.                         IN_PACKET[6]        =0;
  267.                         IN_PACKET[7]        =0;
  268.                         SendPacket (0);
  269.                         break;
  270.                 case 'z':
  271.                         key = 0x1D;
  272.                         IN_PACKET[2]        = key;
  273.                         IN_PACKET[3]        =0;       
  274.                         IN_PACKET[4]        =0;       
  275.                         IN_PACKET[5]        =0;
  276.                         IN_PACKET[6]        =0;
  277.                         IN_PACKET[7]        =0;
  278.                         SendPacket (0);
  279.                         break;
  280.                 case 'A':
  281.                         key = 0x04;
  282.                         IN_PACKET[0]        = 0x20;
  283.                         IN_PACKET[2]        = key;
  284.                         IN_PACKET[3]        =0;       
  285.                         IN_PACKET[4]        =0;       
  286.                         IN_PACKET[5]        =0;
  287.                         IN_PACKET[6]        =0;
  288.                         IN_PACKET[7]        =0;
  289.                         SendPacket (0);
  290.                         break;
  291.                 case 'B':
  292.                         key = 0x05;
  293.                         IN_PACKET[0]        = 0x20;
  294.                         IN_PACKET[2]        = key;
  295.                         IN_PACKET[3]        =0;       
  296.                         IN_PACKET[4]        =0;       
  297.                         IN_PACKET[5]        =0;
  298.                         IN_PACKET[6]        =0;
  299.                         IN_PACKET[7]        =0;
  300.                         SendPacket (0);
  301.                         break;
  302.                 case 'C':
  303.                         key = 0x06;
  304.                         IN_PACKET[0]        = 0x20;
  305.                         IN_PACKET[2]        = key;
  306.                         IN_PACKET[3]        =0;       
  307.                         IN_PACKET[4]        =0;       
  308.                         IN_PACKET[5]        =0;
  309.                         IN_PACKET[6]        =0;
  310.                         IN_PACKET[7]        =0;
  311.                         SendPacket (0);
  312.                         break;
  313.                 case 'D':
  314.                         key = 0x07;
  315.                         IN_PACKET[0]        = 0x20;
  316.                         IN_PACKET[2]        = key;
  317.                         IN_PACKET[3]        =0;       
  318.                         IN_PACKET[4]        =0;       
  319.                         IN_PACKET[5]        =0;
  320.                         IN_PACKET[6]        =0;
  321.                         IN_PACKET[7]        =0;
  322.                         SendPacket (0);
  323.                         break;
  324.                 case 'E':
  325.                         key = 0x08;
  326.                         IN_PACKET[0]        = 0x20;
  327.                         IN_PACKET[2]        = key;
  328.                         IN_PACKET[3]        =0;       
  329.                         IN_PACKET[4]        =0;       
  330.                         IN_PACKET[5]        =0;
  331.                         IN_PACKET[6]        =0;
  332.                         IN_PACKET[7]        =0;
  333.                         SendPacket (0);
  334.                         break;
  335.                 case 'F':
  336.                         key = 0x09;
  337.                         IN_PACKET[0]        = 0x20;
  338.                         IN_PACKET[2]        = key;
  339.                         IN_PACKET[3]        =0;       
  340.                         IN_PACKET[4]        =0;       
  341.                         IN_PACKET[5]        =0;
  342.                         IN_PACKET[6]        =0;
  343.                         IN_PACKET[7]        =0;
  344.                         SendPacket (0);
  345.                         break;
  346.                 case 'G':
  347.                         key = 0x0A;
  348.                         IN_PACKET[0]        = 0x20;
  349.                         IN_PACKET[2]        = key;
  350.                         IN_PACKET[3]        =0;       
  351.                         IN_PACKET[4]        =0;       
  352.                         IN_PACKET[5]        =0;
  353.                         IN_PACKET[6]        =0;
  354.                         IN_PACKET[7]        =0;
  355.                         SendPacket (0);
  356.                         break;
  357.                 case 'H':
  358.                         key = 0x0B;
  359.                         IN_PACKET[0]        = 0x20;
  360.                         IN_PACKET[2]        = key;
  361.                         IN_PACKET[3]        =0;       
  362.                         IN_PACKET[4]        =0;       
  363.                         IN_PACKET[5]        =0;
  364.                         IN_PACKET[6]        =0;
  365.                         IN_PACKET[7]        =0;
  366.                         SendPacket (0);
  367.                         break;
  368.                 case 'I':
  369.                         key = 0x0C;
  370.                         IN_PACKET[0]        = 0x20;
  371.                         IN_PACKET[2]        = key;
  372.                         IN_PACKET[3]        =0;       
  373.                         IN_PACKET[4]        =0;       
  374.                         IN_PACKET[5]        =0;
  375.                         IN_PACKET[6]        =0;
  376.                         IN_PACKET[7]        =0;
  377.                         SendPacket (0);
  378.                         break;
  379.                 case 'J':
  380.                         key = 0x0D;
  381.                         IN_PACKET[0]        = 0x20;
  382.                         IN_PACKET[2]        = key;
  383.                         IN_PACKET[3]        =0;       
  384.                         IN_PACKET[4]        =0;       
  385.                         IN_PACKET[5]        =0;
  386.                         IN_PACKET[6]        =0;
  387.                         IN_PACKET[7]        =0;
  388.                         SendPacket (0);
  389.                         break;
  390.                 case 'K':
  391.                         key = 0x0E;
  392.                         IN_PACKET[0]        = 0x20;
  393.                         IN_PACKET[2]        = key;
  394.                         IN_PACKET[3]        =0;       
  395.                         IN_PACKET[4]        =0;       
  396.                         IN_PACKET[5]        =0;
  397.                         IN_PACKET[6]        =0;
  398.                         IN_PACKET[7]        =0;
  399.                         SendPacket (0);
  400.                         break;
  401.                 case 'L':
  402.                         key = 0x0F;
  403.                         IN_PACKET[0]        = 0x20;
  404.                         IN_PACKET[2]        = key;
  405.                         IN_PACKET[3]        =0;       
  406.                         IN_PACKET[4]        =0;       
  407.                         IN_PACKET[5]        =0;
  408.                         IN_PACKET[6]        =0;
  409.                         IN_PACKET[7]        =0;
  410.                         SendPacket (0);
  411.                         break;
  412.                 case 'M':
  413.                         key = 0x10;
  414.                         IN_PACKET[0]        = 0x20;
  415.                         IN_PACKET[2]        = key;
  416.                         IN_PACKET[3]        =0;       
  417.                         IN_PACKET[4]        =0;       
  418.                         IN_PACKET[5]        =0;
  419.                         IN_PACKET[6]        =0;
  420.                         IN_PACKET[7]        =0;
  421.                         SendPacket (0);
  422.                         break;
  423.                 case 'N':
  424.                         key = 0x11;
  425.                         IN_PACKET[0]        = 0x20;
  426.                         IN_PACKET[2]        = key;
  427.                         IN_PACKET[3]        =0;       
  428.                         IN_PACKET[4]        =0;       
  429.                         IN_PACKET[5]        =0;
  430.                         IN_PACKET[6]        =0;
  431.                         IN_PACKET[7]        =0;
  432.                         SendPacket (0);
  433.                         break;
  434.                 case 'O':
  435.                         key = 0x12;
  436.                         IN_PACKET[0]        = 0x20;
  437.                         IN_PACKET[2]        = key;
  438.                         IN_PACKET[3]        =0;       
  439.                         IN_PACKET[4]        =0;       
  440.                         IN_PACKET[5]        =0;
  441.                         IN_PACKET[6]        =0;
  442.                         IN_PACKET[7]        =0;
  443.                         SendPacket (0);
  444.                         break;
  445.                 case 'P':
  446.                         key = 0x13;
  447.                         IN_PACKET[0]        = 0x20;
  448.                         IN_PACKET[2]        = key;
  449.                         IN_PACKET[3]        =0;       
  450.                         IN_PACKET[4]        =0;       
  451.                         IN_PACKET[5]        =0;
  452.                         IN_PACKET[6]        =0;
  453.                         IN_PACKET[7]        =0;
  454.                         SendPacket (0);
  455.                         break;
  456.                 case 'Q':
  457.                         key = 0x14;
  458.                         IN_PACKET[0]        = 0x20;
  459.                         IN_PACKET[2]        = key;
  460.                         IN_PACKET[3]        =0;       
  461.                         IN_PACKET[4]        =0;       
  462.                         IN_PACKET[5]        =0;
  463.                         IN_PACKET[6]        =0;
  464.                         IN_PACKET[7]        =0;
  465.                         SendPacket (0);
  466.                         break;
  467.                 case 'R':
  468.                         key = 0x15;
  469.                         IN_PACKET[0]        = 0x20;
  470.                         IN_PACKET[2]        = key;
  471.                         IN_PACKET[3]        =0;       
  472.                         IN_PACKET[4]        =0;       
  473.                         IN_PACKET[5]        =0;
  474.                         IN_PACKET[6]        =0;
  475.                         IN_PACKET[7]        =0;
  476.                         SendPacket (0);
  477.                         break;
  478.                 case 'S':
  479.                         key = 0x16;
  480.                         IN_PACKET[0]        = 0x20;
  481.                         IN_PACKET[2]        = key;
  482.                         IN_PACKET[3]        =0;       
  483.                         IN_PACKET[4]        =0;       
  484.                         IN_PACKET[5]        =0;
  485.                         IN_PACKET[6]        =0;
  486.                         IN_PACKET[7]        =0;
  487.                         SendPacket (0);
  488.                         break;
  489.                 case 'T':
  490.                         key = 0x17;
  491.                         IN_PACKET[0]        = 0x20;
  492.                         IN_PACKET[2]        = key;
  493.                         IN_PACKET[3]        =0;       
  494.                         IN_PACKET[4]        =0;       
  495.                         IN_PACKET[5]        =0;
  496.                         IN_PACKET[6]        =0;
  497.                         IN_PACKET[7]        =0;
  498.                         SendPacket (0);
  499.                         break;
  500.                 case 'U':
  501.                         key = 0x18;
  502.                         IN_PACKET[0]        = 0x20;
  503.                         IN_PACKET[2]        = key;
  504.                         IN_PACKET[3]        =0;       
  505.                         IN_PACKET[4]        =0;       
  506.                         IN_PACKET[5]        =0;
  507.                         IN_PACKET[6]        =0;
  508.                         IN_PACKET[7]        =0;
  509.                         SendPacket (0);
  510.                         break;
  511.                 case 'V':
  512.                         key = 0x19;
  513.                         IN_PACKET[0]        = 0x20;
  514.                         IN_PACKET[2]        = key;
  515.                         IN_PACKET[3]        =0;       
  516.                         IN_PACKET[4]        =0;       
  517.                         IN_PACKET[5]        =0;
  518.                         IN_PACKET[6]        =0;
  519.                         IN_PACKET[7]        =0;
  520.                         SendPacket (0);
  521.                         break;
  522.                 case 'W':
  523.                         key = 0x1A;
  524.                         IN_PACKET[0]        = 0x20;
  525.                         IN_PACKET[2]        = key;
  526.                         IN_PACKET[3]        =0;       
  527.                         IN_PACKET[4]        =0;       
  528.                         IN_PACKET[5]        =0;
  529.                         IN_PACKET[6]        =0;
  530.                         IN_PACKET[7]        =0;
  531.                         SendPacket (0);
  532.                         break;
  533.                 case 'X':
  534.                         key = 0x1B;
  535.                         IN_PACKET[0]        = 0x20;
  536.                         IN_PACKET[2]        = key;
  537.                         IN_PACKET[3]        =0;       
  538.                         IN_PACKET[4]        =0;       
  539.                         IN_PACKET[5]        =0;
  540.                         IN_PACKET[6]        =0;
  541.                         IN_PACKET[7]        =0;
  542.                         SendPacket (0);
  543.                         break;
  544.                 case 'Y':
  545.                         key = 0x1C;
  546.                         IN_PACKET[0]        = 0x20;
  547.                         IN_PACKET[2]        = key;
  548.                         IN_PACKET[3]        =0;       
  549.                         IN_PACKET[4]        =0;       
  550.                         IN_PACKET[5]        =0;
  551.                         IN_PACKET[6]        =0;
  552.                         IN_PACKET[7]        =0;
  553.                         SendPacket (0);
  554.                         break;
  555.                 case 'Z':
  556.                         key = 0x1D;
  557.                         IN_PACKET[0]        = 0x20;
  558.                         IN_PACKET[2]        = key;
  559.                         IN_PACKET[3]        =0;       
  560.                         IN_PACKET[4]        =0;       
  561.                         IN_PACKET[5]        =0;
  562.                         IN_PACKET[6]        =0;
  563.                         IN_PACKET[7]        =0;
  564.                         SendPacket (0);
  565.                         break;
  566.                 case '1':
  567.                         key = 0x1E;
  568.                         IN_PACKET[2]        = key;
  569.                         IN_PACKET[3]        =0;       
  570.                         IN_PACKET[4]        =0;       
  571.                         IN_PACKET[5]        =0;
  572.                         IN_PACKET[6]        =0;
  573.                         IN_PACKET[7]        =0;
  574.                         SendPacket (0);
  575.                         break;
  576.                 case '2':
  577.                         key = 0x1F;
  578.                         IN_PACKET[2]        = key;
  579.                         IN_PACKET[3]        =0;       
  580.                         IN_PACKET[4]        =0;       
  581.                         IN_PACKET[5]        =0;
  582.                         IN_PACKET[6]        =0;
  583.                         IN_PACKET[7]        =0;
  584.                         SendPacket (0);
  585.                         break;
  586.                 case '3':
  587.                         key = 0x20;
  588.                         IN_PACKET[2]        = key;
  589.                         IN_PACKET[3]        =0;       
  590.                         IN_PACKET[4]        =0;       
  591.                         IN_PACKET[5]        =0;
  592.                         IN_PACKET[6]        =0;
  593.                         IN_PACKET[7]        =0;
  594.                         SendPacket (0);
  595.                         break;
  596.                 case '4':
  597.                         key = 0x21;
  598.                         IN_PACKET[2]        = key;
  599.                         IN_PACKET[3]        =0;       
  600.                         IN_PACKET[4]        =0;       
  601.                         IN_PACKET[5]        =0;
  602.                         IN_PACKET[6]        =0;
  603.                         IN_PACKET[7]        =0;
  604.                         SendPacket (0);
  605.                         break;
  606.                 case '5':
  607.                         key = 0x22;
  608.                         IN_PACKET[2]        = key;
  609.                         IN_PACKET[3]        =0;       
  610.                         IN_PACKET[4]        =0;       
  611.                         IN_PACKET[5]        =0;
  612.                         IN_PACKET[6]        =0;
  613.                         IN_PACKET[7]        =0;
  614.                         SendPacket (0);
  615.                         break;
  616.                 case '6':
  617.                         key = 0x23;
  618.                         IN_PACKET[2]        = key;
  619.                         IN_PACKET[3]        =0;       
  620.                         IN_PACKET[4]        =0;       
  621.                         IN_PACKET[5]        =0;
  622.                         IN_PACKET[6]        =0;
  623.                         IN_PACKET[7]        =0;
  624.                         SendPacket (0);
  625.                         break;
  626.                 case '7':
  627.                         key = 0x24;
  628.                         IN_PACKET[2]        = key;
  629.                         IN_PACKET[3]        =0;       
  630.                         IN_PACKET[4]        =0;       
  631.                         IN_PACKET[5]        =0;
  632.                         IN_PACKET[6]        =0;
  633.                         IN_PACKET[7]        =0;
  634.                         SendPacket (0);
  635.                         break;
  636.                 case '8':
  637.                         key = 0x25;
  638.                         IN_PACKET[2]        = key;
  639.                         IN_PACKET[3]        =0;       
  640.                         IN_PACKET[4]        =0;       
  641.                         IN_PACKET[5]        =0;
  642.                         IN_PACKET[6]        =0;
  643.                         IN_PACKET[7]        =0;
  644.                         SendPacket (0);
  645.                         break;
  646.                 case '9':
  647.                         key = 0x26;
  648.                         IN_PACKET[2]        = key;
  649.                         IN_PACKET[3]        =0;       
  650.                         IN_PACKET[4]        =0;       
  651.                         IN_PACKET[5]        =0;
  652.                         IN_PACKET[6]        =0;
  653.                         IN_PACKET[7]        =0;
  654.                         SendPacket (0);
  655.                         break;
  656.                 case '0':
  657.                         key = 0x27;
  658.                         IN_PACKET[2]        = key;
  659.                         IN_PACKET[3]        =0;       
  660.                         IN_PACKET[4]        =0;       
  661.                         IN_PACKET[5]        =0;
  662.                         IN_PACKET[6]        =0;
  663.                         IN_PACKET[7]        =0;
  664.                         SendPacket (0);
  665.                         break;
  666.                 case '.':
  667.                         key = 0x37;
  668.                         IN_PACKET[2]        = key;
  669.                         IN_PACKET[3]        =0;       
  670.                         IN_PACKET[4]        =0;       
  671.                         IN_PACKET[5]        =0;
  672.                         IN_PACKET[6]        =0;
  673.                         IN_PACKET[7]        =0;
  674.                         SendPacket (0);
  675.                         break;
  676.                 case ',':
  677.                         key = 0x36;
  678.                         IN_PACKET[2]        = key;
  679.                         IN_PACKET[3]        =0;       
  680.                         IN_PACKET[4]        =0;       
  681.                         IN_PACKET[5]        =0;
  682.                         IN_PACKET[6]        =0;
  683.                         IN_PACKET[7]        =0;
  684.                         SendPacket (0);
  685.                         break;
  686.                 case '-':
  687.                         key = 0x2D;
  688.                         IN_PACKET[2]        = key;
  689.                         IN_PACKET[3]        =0;       
  690.                         IN_PACKET[4]        =0;       
  691.                         IN_PACKET[5]        =0;
  692.                         IN_PACKET[6]        =0;
  693.                         IN_PACKET[7]        =0;
  694.                         SendPacket (0);
  695.                         break;
  696.                 case '+':
  697.                         key = 0x2E;
  698.                         IN_PACKET[0]        = 0x02;
  699.                         IN_PACKET[2]        = key;
  700.                         IN_PACKET[3]        =0;       
  701.                         IN_PACKET[4]        =0;       
  702.                         IN_PACKET[5]        =0;
  703.                         IN_PACKET[6]        =0;
  704.                         IN_PACKET[7]        =0;
  705.                         SendPacket (0);
  706.                         break;
  707.                 case ' ':
  708.                         key = 0x2C;
  709.                         IN_PACKET[2]        = key;
  710.                         IN_PACKET[3]        =0;       
  711.                         IN_PACKET[4]        =0;       
  712.                         IN_PACKET[5]        =0;
  713.                         IN_PACKET[6]        =0;
  714.                         IN_PACKET[7]        =0;
  715.                         SendPacket (0);
  716.                         break;
  717.                 case ':':
  718.                         key = 0x33;
  719.                         IN_PACKET[0]        = 0x02;
  720.                         IN_PACKET[2]        = key;
  721.                         IN_PACKET[3]        =0;       
  722.                         IN_PACKET[4]        =0;       
  723.                         IN_PACKET[5]        =0;
  724.                         IN_PACKET[6]        =0;
  725.                         IN_PACKET[7]        =0;
  726.                         SendPacket (0);
  727.                         break;
  728.                 case 0x0d:
  729.                         key = 0x58;
  730.                         IN_PACKET[2]        = key;
  731.                         IN_PACKET[3]        =0;       
  732.                         IN_PACKET[4]        =0;       
  733.                         IN_PACKET[5]        =0;
  734.                         IN_PACKET[6]        =0;
  735.                         IN_PACKET[7]        =0;
  736.                         SendPacket (0);
  737.                         break;
  738.                 default:
  739.                     IN_PACKET[0]        =0;
  740.                     IN_PACKET[2]        =0;
  741.                         IN_PACKET[3]        =0;       
  742.                         IN_PACKET[4]        =0;       
  743.                         IN_PACKET[5]        =0;
  744.                         IN_PACKET[6]        =0;
  745.                         IN_PACKET[7]        =0;
  746.                         SendPacket (0);
  747.                     break;
  748.           }                  
  749.    }
  750. }
复制代码

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出100入143汤圆

 楼主| 发表于 2012-8-21 06:55:07 | 显示全部楼层
自己抢个沙发

出100入143汤圆

 楼主| 发表于 2012-8-21 08:28:20 | 显示全部楼层
再顶一下

出0入0汤圆

发表于 2012-8-21 09:36:28 | 显示全部楼层
把工程整个打包rar上来

出100入143汤圆

 楼主| 发表于 2012-8-21 09:41:41 | 显示全部楼层
jetli 发表于 2012-8-21 09:36
把工程整个打包rar上来

attach://Keyboard.zip

谢谢,帮忙看看哈

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出100入143汤圆

 楼主| 发表于 2012-8-21 09:43:12 | 显示全部楼层
jetli 发表于 2012-8-21 09:36
把工程整个打包rar上来

已经上传了

出0入0汤圆

发表于 2012-8-21 10:13:50 | 显示全部楼层
试着做这样的测试,【 调试程序的排除法】

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

出0入0汤圆

发表于 2013-3-25 16:42:25 | 显示全部楼层
zzh90513 发表于 2012-8-21 09:43
已经上传了

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

出0入0汤圆

发表于 2013-7-11 09:00:24 | 显示全部楼层
本帖最后由 xi416547162 于 2013-7-11 09:02 编辑

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

出0入0汤圆

发表于 2014-8-5 18:22:48 | 显示全部楼层
zzh90513 发表于 2012-8-21 09:41
attach://Keyboard.zip

谢谢,帮忙看看哈

兄弟:

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

出0入0汤圆

发表于 2014-8-17 10:23:32 | 显示全部楼层
本帖最后由 and001 于 2014-8-17 10:46 编辑

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

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

}

出100入143汤圆

 楼主| 发表于 2014-8-18 10:33:50 | 显示全部楼层
and001 发表于 2014-8-17 10:23
兄弟搞好那个重复问题没?我等你的答案呀?好像是USB重复发,???

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

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

出0入0汤圆

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

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

出0入0汤圆

发表于 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_ */
}




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

出100入143汤圆

 楼主| 发表于 2014-8-18 22:31:10 | 显示全部楼层
and001 发表于 2014-8-18 22:13
当前想用内部的晶体(默认为12MHz)

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

出0入0汤圆

发表于 2014-8-18 23:05:33 | 显示全部楼层
zzh90513 发表于 2014-8-18 22:31
我前面上传了工程,对照下

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

出100入143汤圆

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

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

出0入0汤圆

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

#define _USB_LOW_SPEED_ 后不能枚举??

出100入143汤圆

 楼主| 发表于 2014-8-19 21:07:29 | 显示全部楼层
and001 发表于 2014-8-19 14:14
我定义成低速完全跑不起来?是不是HID设备枚举里面已经有参数默认成全速?

#define _USB_LOW_SPEED_ 后不 ...

枚举过程里面变量需要修改
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 03:50

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表