⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usb_task.lst

📁 at89c5132,at89c51snd1的usb与keyboard驱动程序。
💻 LST
📖 第 1 页 / 共 2 页
字号:
 147   2          if (usb_connected == TRUE)
 148   2          { 
 149   3            usb_connected = FALSE;
 150   3            Led_all_off();
 151   3            Led_3_on();
 152   3          }
 153   2      
 154   2          if (Usb_resume())
 155   2          {
 156   3            usb_connected = TRUE;
 157   3            Usb_clear_suspend();
 158   3            Usb_clear_resume();
 159   3            Usb_clear_sof();
 160   3            Led_3_off();
 161   3          }
 162   2        }
C51 COMPILER V7.06   USB_TASK                                                              01/29/2008 10:59:25 PAGE 4   

 163   1        else
 164   1        {
 165   2          usb_connected = TRUE;
 166   2          if (Usb_reset()) { usb_var_init();   Usb_clear_reset(); }
 167   2      
 168   2          if (Usb_sof())
 169   2          {
 170   3            usb_sof_counter ++;
 171   3            if (usb_sof_counter == 0xFF)
 172   3            {
 173   4              Led_0_toggle();
 174   4            }
 175   3            Usb_clear_sof();
 176   3          }
 177   2      
 178   2          if (Usb_endpoint_interrupt())
 179   2          {
 180   3            Usb_select_ep(EP_CONTROL);
 181   3            if (Usb_setup_received()) { usb_enumeration_process(); }
 182   3            Usb_select_ep(EP_KBD_IN);
 183   3            if (Usb_tx_complete())    { Usb_clear_tx_complete();
 184   4                                        key_hit = FALSE;
 185   4                                        Led_1_off(); }
 186   3          }
 187   2        }
 188   1      }
 189          
 190          /*F**************************************************************************
 191          * NAME: usb_kbd
 192          *----------------------------------------------------------------------------
 193          * PARAMS:
 194          * delay:    none
 195          * return:   none
 196          *----------------------------------------------------------------------------
 197          * PURPOSE: 
 198          * This function links the keyboard and the USB bus.
 199          *----------------------------------------------------------------------------
 200          * EXAMPLE:
 201          *----------------------------------------------------------------------------
 202          * NOTE: 
 203          *----------------------------------------------------------------------------
 204          * REQUIREMENTS: 
 205          *****************************************************************************/
 206          void usb_kbd_task (void)
 207          {
 208   1        // if USB ready to transmit new data :
 209   1        //        - if last time = 0, nothing
 210   1        //        - if key pressed -> transmit key
 211   1        //        - if !key pressed -> transmit 0
 212   1        if ((!key_hit) && (usb_configuration_nb != 0) && !(Usb_suspend()))
 213   1        {
 214   2          kbd_test_hit();
 215   2          if (key_hit == TRUE)
 216   2          {
 217   3            Led_1_on();
 218   3            transmit_no_key = TRUE;
 219   3            Usb_select_ep(EP_KBD_IN);
 220   3            Usb_write_byte(0);
 221   3            Usb_write_byte(shift_key);
 222   3            Usb_write_byte(usb_key);
 223   3            Usb_write_byte(0);
 224   3            Usb_write_byte(0);
C51 COMPILER V7.06   USB_TASK                                                              01/29/2008 10:59:25 PAGE 5   

 225   3            Usb_write_byte(0);
 226   3            Usb_write_byte(0);
 227   3            Usb_write_byte(0);
 228   3            Usb_set_tx_ready();
 229   3            return;
 230   3          }
 231   2      
 232   2          if (transmit_no_key)
 233   2          {
 234   3            key_hit = TRUE;
 235   3            transmit_no_key = FALSE;
 236   3            Usb_select_ep(EP_KBD_IN);
 237   3            Usb_write_byte(0);
 238   3            Usb_write_byte(0);
 239   3            Usb_write_byte(0);
 240   3            Usb_write_byte(0);
 241   3            Usb_write_byte(0);
 242   3            Usb_write_byte(0);
 243   3            Usb_write_byte(0);
 244   3            Usb_write_byte(0);
 245   3            Usb_set_tx_ready();
 246   3          }
 247   2        }
 248   1      }
 249          
 250          /*F**************************************************************************
 251          * NAME:     kbd_test_hit
 252          *----------------------------------------------------------------------------
 253          * PARAMS:
 254          *
 255          * return:
 256          *----------------------------------------------------------------------------
 257          * PURPOSE: 
 258          *   This function scans the keyboard keys and update the scan_key word.
 259          *   if a key is pressed, the key_hit bit is set to TRUE.
 260          *----------------------------------------------------------------------------
 261          * EXAMPLE:
 262          *----------------------------------------------------------------------------
 263          * NOTE:
 264          *----------------------------------------------------------------------------
 265          * REQUIREMENTS:
 266          *****************************************************************************/
 267          void kbd_test_hit(void)
 268          {
 269   1        switch (usb_kbd_state)
 270   1        {
 271   2          case 0: if (P3_2 == 0)
 272   2                    { 
 273   3                      usb_kbd_state = 1; 
 274   3                      usb_key_pointer = usb_keys;
 275   3                      usb_data_to_send = SIZEOF_USB_KEYS;
 276   3                      Led_2_off();
 277   3                    }
 278   2                    else
 279   2                    {
 280   3                      Led_2_on();
 281   3                    };
 282   2                  break;
 283   2          case 1: if (usb_data_to_send != 0)
 284   2                  {
 285   3                    if ((key_hit == FALSE) && (transmit_no_key == FALSE))
 286   3                    {
C51 COMPILER V7.06   USB_TASK                                                              01/29/2008 10:59:25 PAGE 6   

 287   4                      usb_key = *usb_key_pointer;
 288   4                      usb_key_pointer ++;
 289   4                      usb_data_to_send --;
 290   4                      key_hit = TRUE;
 291   4                    }
 292   3                  }
 293   2                  else
 294   2                  {
 295   3                    usb_kbd_state = 0;
 296   3                  }
 297   2                  break;
 298   2        }
 299   1      }
 300          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    408    ----
   CONSTANT SIZE    =    362    ----
   XDATA SIZE       =     11    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =      2    ----
   BIT SIZE         =      3    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -