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

📄 main.lst

📁 此源代码为USB鼠标的相关开发代码
💻 LST
字号:
C51 COMPILER V7.06   MAIN                                                                  11/16/2008 15:59:42 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN Main.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE Main.c BROWSE DEBUG OBJECTEXTEND TABS(1)

stmt level    source

   1          /******************************************************************
   2             本程序只供学习使用,未经作者许可,不得用于其它任何用途
   3             
   4                  欢迎访问我的USB专区:http://group.ednchina.com/93/
   5                  欢迎访问我的blog:   http://www.ednchina.com/blog/computer00
   6                                       http://computer00.21ic.org
   7          
   8                  感谢PCB赞助商——电子园: http://bbs.cepark.com/
   9          
  10          main.c file
  11          
  12          作者:电脑圈圈
  13          建立日期: 2008.06.27
  14          修改日期: 2008.07.10
  15          版本:V1.1
  16          版权所有,盗版必究。
  17          Copyright(C) 电脑圈圈 2008-2018
  18          All rights reserved            
  19          *******************************************************************/
  20          
  21          #include <AT89X52.H>  //头文件
  22          #include "Key.h"
  23          #include "Led.h"
  24          #include "UART.h"
  25          #include "pdiusbd12.h"
  26          #include "UsbCore.h"
  27          #include "config.h"
  28          
  29          code uint8 HeadTable[][74]={
  30          "********************************************************************\r\n",
  31          "******             《圈圈教你玩USB》之 USB鼠标                ******\r\n",
  32          "******                      AT89S52 CPU                       ******\r\n",
  33          "******                  建立日期:",__DATE__,"                 ******\r\n",
  34          "******                   建立时间:",__TIME__,"                   ******\r\n",
  35          "******                    作者:电脑圈圈                      ******\r\n",
  36          "******                    欢迎访问作者的                      ******\r\n",
  37          "******           USB专区:http://group.ednchina.com/93/       ******\r\n",
  38          "******      BLOG1:http://www.ednchina.com/blog/computer00    ******\r\n",
  39          "******                BLOG2:http://computer00.21ic.org       ******\r\n",
  40          "******                  请按K1-K8分别进行测试                 ******\r\n",
  41          "******    K1:光标左移  K2:光标右移  K3:光标上移 K4:光标下移   ******\r\n",
  42          "******    K5:滚轮下滚  K6:滚轮上滚  K7:鼠标左键 K8:鼠标右键   ******\r\n",
  43          "********************************************************************\r\n",
  44          };
  45          
  46          /********************************************************************
  47          函数功能:根据按键情况返回报告的函数。
  48          入口参数:无。
  49          返    回:无。
  50          备    注:无。
  51          ********************************************************************/
  52          void SendReport(void)
  53          {
  54   1       //需要返回的4字节报告的缓冲
  55   1       //Buf[0]的D0就是左键,D1就是右键,D2就是中键(这里没有)
C51 COMPILER V7.06   MAIN                                                                  11/16/2008 15:59:42 PAGE 2   

  56   1       //Buf[1]为X轴,Buf[2]为Y轴,Buf[3]为滚轮
  57   1       uint8 Buf[4]={0,0,0,0};
  58   1       
  59   1       //我们不需要KEY1~KEY6按键改变的信息,所以先将它们清0
  60   1       KeyUp &=~(KEY1|KEY2|KEY3|KEY4|KEY5|KEY6);
  61   1       KeyDown &=~(KEY1|KEY2|KEY3|KEY4|KEY5|KEY6);
  62   1       
  63   1       //如果有按键按住,并且不是KEY7、KEY8(左、右键)
  64   1       //或者KEY7、KEY8任何一个键有变动的话,则需要返回报告
  65   1       if((KeyPress&(~(KEY7|KEY8)))||KeyUp||KeyDown)
  66   1       {
  67   2        if(KeyPress & KEY1) //如果KEY1按住,则光标需要左移,即X轴为负值。
  68   2        {
  69   3         Buf[1]=-1;  //这里一次往左移动一个单位。
  70   3        }
  71   2        if(KeyPress & KEY2) //如果KEY2按住,则光标需要右移,即X轴为正值。
  72   2        {
  73   3         Buf[1]=1;   //这里一次往右移动一个单位。
  74   3        }
  75   2        if(KeyPress & KEY3) //如果KEY3按住,则光标需要上移,即Y轴为负值。
  76   2        {
  77   3         Buf[2]=-1;   //这里一次往上移动一个单位。
  78   3        }
  79   2        if(KeyPress & KEY4)  //如果KEY4按住,则光标需要下移,即Y轴为正值。
  80   2        {
  81   3         Buf[2]=1;  //这里一次往下移动一个单位。
  82   3        }
  83   2        if(KeyPress & KEY5)  //如果KEY5按住,则滚轮下滚,即滚轮值为负。
  84   2        {
  85   3         Buf[3]=-1;  //这里一次往下滚动一个单位。
  86   3        }
  87   2        if(KeyPress & KEY6)  //如果KEY6按住,则滚轮上滚,既滚轮值为正
  88   2        {
  89   3         Buf[3]=1;   //这里一次往上滚动一个单位。
  90   3        }
  91   2        if(KeyPress & KEY7)  //鼠标左键
  92   2        {
  93   3         Buf[0]|=0x01;  //D0为鼠标左键
  94   3        }
  95   2        if(KeyPress & KEY8)  //鼠标右键
  96   2        {
  97   3         Buf[0]|=0x02;  //D1为鼠标右键
  98   3        }
  99   2        //报告准备好了,通过端点1返回,长度为4字节。
 100   2        D12WriteEndpointBuffer(3,4,Buf);
 101   2        Ep1InIsBusy=1;  //设置端点忙标志。
 102   2       }
 103   1       //记得清除KeyUp和KeyDown
 104   1       KeyUp=0;
 105   1       KeyDown=0;
 106   1      }
 107          ////////////////////////End of function//////////////////////////////
 108          
 109          /********************************************************************
 110          函数功能:主函数。
 111          入口参数:无。
 112          返    回:无。
 113          备    注:无。
 114          ********************************************************************/
 115          void main(void)  //主函数
 116          {
 117   1       uint8 i;
C51 COMPILER V7.06   MAIN                                                                  11/16/2008 15:59:42 PAGE 3   

 118   1       uint16 id;
 119   1       uint8 InterruptSource;
 120   1       
 121   1       EA=1; //打开中断
 122   1       InitKeyboard(); //初始化按键
 123   1       InitUART();  //初始化串口
 124   1       
 125   1       for(i=0;i<18;i++)   //显示信息
 126   1       {
 127   2        Prints(HeadTable[i]);
 128   2       }
 129   1       
 130   1       id=D12ReadID();
 131   1      
 132   1       Prints("Your D12 chip\'s ID is: ");
 133   1       PrintShortIntHex(id);
 134   1      
 135   1       if(id==0x1012)
 136   1       {
 137   2        Prints(". ID is correct! Congratulations!\r\n\r\n");
 138   2       }
 139   1       else
 140   1       {
 141   2        Prints(". ID is incorrect! What a pity!\r\n\r\n");
 142   2       }
 143   1       
 144   1       UsbDisconnect();  //先断开USB连接
 145   1       UsbConnect();  //将USB连接上
 146   1       ConfigValue=0; //配置值初始化为0
 147   1       
 148   1       while(1)  //死循环
 149   1       {
 150   2        if(D12GetIntPin()==0) //如果有中断发生
 151   2        {
 152   3         D12WriteCommand(READ_INTERRUPT_REGISTER);  //写读中断寄存器的命令
 153   3         InterruptSource=D12ReadByte(); //读回第一字节的中断寄存器
 154   3         if(InterruptSource&0x80)UsbBusSuspend(); //总线挂起中断处理
 155   3         if(InterruptSource&0x40)UsbBusReset();   //总线复位中断处理
 156   3         if(InterruptSource&0x01)UsbEp0Out();     //端点0输出中断处理
 157   3         if(InterruptSource&0x02)UsbEp0In();      //端点0输入中断处理
 158   3         if(InterruptSource&0x04)UsbEp1Out();     //端点1输出中断处理
 159   3         if(InterruptSource&0x08)UsbEp1In();      //端点1输入中断处理
 160   3         if(InterruptSource&0x10)UsbEp2Out();     //端点2输出中断处理
 161   3         if(InterruptSource&0x20)UsbEp2In();      //端点2输入中断处理
 162   3        }
 163   2        if(ConfigValue!=0) //如果已经设置为非0的配置,则可以返回报告数据
 164   2        {
 165   3         LEDs=~KeyPress;  //利用板上8个LED显示按键状态,按下时亮
 166   3         if(!Ep1InIsBusy)  //如果端点1输入没有处于忙状态,则可以发送数据
 167   3         {
 168   4          KeyCanChange=0;  //禁止按键扫描
 169   4          if(KeyUp||KeyDown||KeyPress) //如果有按键事件发生
 170   4          {
 171   5           SendReport();  //则返回报告
 172   5          }
 173   4          KeyCanChange=1;  //允许按键扫描
 174   4         }
 175   3        }
 176   2       }
 177   1      }
 178          ////////////////////////End of function//////////////////////////////

C51 COMPILER V7.06   MAIN                                                                  11/16/2008 15:59:42 PAGE 4   


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    358    ----
   CONSTANT SIZE    =   1434    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       8
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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