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

📄 u_keyboard.lst

📁 一个用 51 + d12 实现的usb键盘的完整源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   U_KEYBOARD                                                            04/16/2007 15:22:52 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE U_KEYBOARD
OBJECT MODULE PLACED IN .\Obj\U_KeyBoard.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE U_KeyBoard.c LARGE OPTIMIZE(2,SPEED) BROWSE MODP2 PRINT(.\Obj\U_KeyBoard.ls
                    -t) OBJECT(.\Obj\U_KeyBoard.obj)

line level    source

   1          
   2          //#include<conio.h>
   3          #include "..\..\DRIVER\inc\includes.h"
   4          #include "mainloop.h"
   5          #include "usb100.h"
   6          #include "chap_9.h"
   7          #include "protodma.h"
   8          #include "mainloop.h"
   9          
  10          sfr CKCON = 0X8F;
  11          
  12                  sbit MCU_SWM0     = P3^4;
  13                  sbit MCU_SWM1     = P3^5;
  14                  sbit MCU_LED0     = P3^6;
  15                  sbit MCU_LED1     = P3^7;
  16          
  17                  sbit MCU_A0               = P2^0;
  18          
  19          //      sbit MCU_D12CS    = P1^6;
  20                  sbit MCU_D12RST   = P2^1;
  21          
  22          
  23                  sbit D12SUSPD     = P3^3;
  24                  
  25          
  26          /*
  27          //*************************************************************************
  28          // USB protocol function pointer arrays
  29          //*************************************************************************
  30          */
  31          void fn_usb_isr();
  32          
  33          //USB标准请求
  34          code void (*StandardDeviceRequest[])(void) =
  35          {
  36                  get_status,
  37                  clear_feature,
  38                  reserved,
  39                  set_feature,
  40                  reserved,
  41                  set_address,
  42                  get_descriptor,
  43                  reserved,
  44                  get_configuration,
  45                  set_configuration,
  46                  get_interface,
  47                  set_interface,
  48                  reserved,
  49                  reserved,
  50                  reserved,
  51                  reserved
  52          };
  53          
  54          //用户厂商请求
C51 COMPILER V7.50   U_KEYBOARD                                                            04/16/2007 15:22:52 PAGE 2   

  55          code void (*VendorDeviceRequest[])(void) =
  56          {
  57                  reserved,
  58                  reserved,
  59                  reserved,
  60                  reserved,
  61                  reserved,
  62                  reserved,
  63                  reserved,
  64                  reserved,
  65                  reserved,
  66                  reserved,
  67                  reserved,
  68                  reserved,
  69                  read_write_register,
  70                  reserved,
  71                  reserved,
  72                  reserved
  73          };
  74          
  75          //类设备请求。
  76          code void (* ClassFunctionTable[])(void)= 
  77          {
  78            reserved, 
  79            GetReport, 
  80            GetIdle,
  81            GetProtocol,
  82            reserved,
  83            reserved, 
  84            reserved,
  85            reserved,
  86            reserved, 
  87            SetReport,
  88            SetIdle,
  89            SetProtocol
  90          };
  91          
  92          /*
  93          //*************************************************************************
  94          //  Public static data
  95          //*************************************************************************
  96          */
  97          
  98          extern EPPFLAGS bEPPflags;
  99          extern unsigned long ClockTicks;
 100          extern unsigned char  GenEpBuf[];
 101          extern IO_REQUEST idata ioRequest;
 102          
 103          extern unsigned char ioSize, ioCount;
 104          extern unsigned char idata EpBuf[];
 105          
 106          CONTROL_XFER ControlData;
 107          BOOL bNoRAM;
 108          
 109          //定时器0初始化程序
 110          //定时器用来定时检测按键状态
 111          void init_timer0(void)
 112          {
 113   1              TMOD &= 0XF0;                    /* clear Timer 0   */
 114   1              TMOD  |= 0X1;
 115   1              TL0 = 0X0;                   /* value set by user    */
 116   1              TH0 = 0X0;                  /* value set by user  */
C51 COMPILER V7.50   U_KEYBOARD                                                            04/16/2007 15:22:52 PAGE 3   

 117   1      //      ET0 = 1;        /* IE.1*/
 118   1              TR0 = 1;                /* TCON.4 start timer  */
 119   1              PT0 = 0;
 120   1      
 121   1              EA = 1;
 122   1      }
 123          
 124          //中断设置
 125          void init_special_interrupts(void)
 126          {
 127   1              IT0 = 0;
 128   1              EX0 = 1;
 129   1      //      ES  = 1;
 130   1              PX0 = 1;
 131   1      
 132   1              EA =1;
 133   1      }
 134          
 135          //I/O口初始化程序
 136          void init_port()
 137          {
 138   1              P0 = 0xFF;
 139   1              P1 = 0xFF;
 140   1              P2 = 0xFF;
 141   1              P3 = 0xFF;
 142   1      //      MCU_D12CS = 0x0;
 143   1              D12SUSPD = 0;
 144   1      }
 145          
 146          
 147          void FlashLed(uchar uci)
 148          {
 149   1              if(uci == 0)
 150   1              {
 151   2                      LedOn(LED1);
 152   2              }
 153   1              else if(uci == 1)
 154   1              {
 155   2                      LedOff(LED1);
 156   2      //              LedOn(LED2);
 157   2              }
 158   1              else if(uci == 2)
 159   1              {
 160   2                      LedOn(LED1);
 161   2      //              LedOn(LED2);
 162   2              }
 163   1              else if(uci == 3)
 164   1              {
 165   2                      LedOff(LED1);
 166   2      //              LedOff(LED2);
 167   2              }
 168   1              else
 169   1              {
 170   2      
 171   2              }
 172   1      }
 173          
 174          /*
 175          void TransferPS2DataToUSB(uchar *ucMouseDataBuff)
 176          {
 177                  uchar ucMouseX;
 178                  char ucMouseY;
C51 COMPILER V7.50   U_KEYBOARD                                                            04/16/2007 15:22:52 PAGE 4   

 179                  uchar ucMouseStatus;
 180          
 181                  ucMouseX = ucMouseDataBuff[1];
 182                  ucMouseY = ucMouseDataBuff[2];
 183                  ucMouseStatus = ucMouseDataBuff[0];
 184          
 185                  if((ucMouseStatus & 0x80) || (ucMouseStatus & 0x40))
 186                  {
 187                          ucMouseX = 0;
 188                          ucMouseY = 0;
 189                          ucMouseStatus = 0;
 190                          return;
 191                          
 192                  }
 193                  if(ucMouseStatus & 0x10)
 194                  {
 195                          ucMouseDataBuff[1] = (ucMouseX>>1)|0x80;
 196                  }
 197                  else
 198                  {
 199                          ucMouseDataBuff[1] = ucMouseX;
 200                  }
 201          
 202                  if(ucMouseStatus & 0x20)
 203                  {
 204                          ucMouseDataBuff[2] = -((ucMouseY>>1)|0x80);
 205                  }
 206                  else
 207                  {
 208                          ucMouseDataBuff[2] = -ucMouseY;
 209                  }
 210          
 211                  ucMouseDataBuff[0] = ucMouseStatus & 0x07;
 212          }
 213          */
 214          
 215          void TestUsbMain(void)
 216          {
 217   1              uint uiChipCode;
 218   1              uchar ucKeyboardDataBuff[8];
 219   1              ulong ulDelayCount;
 220   1              uchar ucStatusMac=0;
 221   1              uchar ucLedFlashCount;
 222   1      
 223   1              #ifdef ConnectPS2Device 
 224   1                      uint uiPS2ReturnData;
 225   1              #endif
 226   1      
 227   1              init_port();//初始化I/O口
 228   1      
 229   1              init_timer0();//初始化定时器0
 230   1              init_special_interrupts();//设置中断
 231   1      
 232   1              Open_Serial(COM_1,SER_BAUD_9600,SER_PARITY_NONE | SER_BITS_8 | SER_STOP_1);
 233   1      
 234   1              ComShowString(1, "开始进行测试") ;
 235   1              for(ulDelayCount=0; ulDelayCount<0x1ff; ulDelayCount++)
 236   1              {
 237   2                      ;
 238   2              }
 239   1              ComShowString(1, "开始进行测试") ;
 240   1      //      InitMouse();
C51 COMPILER V7.50   U_KEYBOARD                                                            04/16/2007 15:22:52 PAGE 5   

 241   1      
 242   1      
 243   1      //      MCU_D12CS = 0x1;        
 244   1      //      MCU_D12CS = 0x0;
 245   1      
 246   1              uiChipCode = D12_ReadChipID();
 247   1              ComShowString(1,"读取的芯片字为");//   读取到的字为1012
 248   1              ComSendText(1,&uiChipCode,2);
 249   1      
 250   1              if(MCU_SWM0 == 0 && MCU_SWM1 == 0) 
 251   1              {
 252   2                      MCU_D12RST = 0;//DMA设置
 253   2                      MCU_D12RST = 1;
 254   2                      D12_SetDMA(0x0);
 255   2              }
 256   1      
 257   1              bEPPflags.value = 0;
 258   1              reconnect_USB();//重新连接USB
 259   1      

⌨️ 快捷键说明

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