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

📄 main.lst

📁 2010年新增TX-1C程序
💻 LST
字号:
C51 COMPILER V8.02   MAIN                                                                  06/17/2010 09:51:57 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN Main.OBJ
COMPILER INVOKED BY: D:\处理软件\keil\C51\BIN\C51.EXE Main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /******************************************************************
   2             本程序只供学习使用,未经作者许可,不得用于其它任何用途
   3                                           
   4                                           欢迎光临天祥电子  www.txmcu.cn
   5                    
   6          *******************************************************************/
   7          
   8          #include <AT89X52.H>  //头文件
   9          #include "Key.h"
  10          #include "Led.h"
  11          #include "UART.h"
  12          #include "pdiusbd12.h"
  13          #include "UsbCore.h"
  14          #include "config.h"
  15          
  16          unsigned char s6,s7,s10,s11,s14,s15,s,again1,again2,again3,again4,again5,again6,pp,qq,rr,ss,tt,uu;
  17          
  18          code uint8 HeadTable[][74]={
  19          "********************************************************************\r\n",
  20          "******                  “天祥电子”之 USB鼠标                  ******\r\n",
  21          "******                       www.txmcu.cn                       ******\r\n",
  22          "******                       www.txmcu.com                      ******\r\n",
  23          "******                       AT89S52 CPU                        ******\r\n",
  24          "******                   建立日期:",__DATE__,"                 ******\r\n",
  25          "******                   建立时间:",__TIME__,"                 ******\r\n",
  26          "******                  请按下列按键分别进行测试                ******\r\n",
  27          "******         S10:左Shift键  S11:左Alt键  S14:1键                      ******\r\n",
  28          "******       S15:2键   S6:Caps Lock键 S7:Num Lock键                    ******\r\n",
  29          "******  注意:数字键是数字小键盘,必须打开Num Lock才是数字键  ******\r\n",
  30          "********************************************************************\r\n",
  31          };              
  32          
  33          /********************************************************************
  34          函数功能:根据按键情况返回报告的函数。
  35          入口参数:无。
  36          返    回:无。
  37          备    注:无。
  38          ********************************************************************/
  39          void SendReport(void)
  40          {
  41   1       //需要返回的8字节报告的缓冲
  42   1       //通过报告描述符的定义及HID用途表文档,可知Buf[0]的D0是左Ctrl键,
  43   1       //D1是左Shift键,D2是左Alt键,D3是左GUI(即Window键),
  44   1       //D4是右Ctrl,D5是右Shift,D6是右Alt,D7是右GUI键。
  45   1       //Buf[1]保留,值为0。Buf[2]~Buf[7]为键值,最多可以有6个。
  46   1       //由于我们这里普通键最多只有5个,因此不会超过6个。
  47   1       //对于实际的键盘,如果按键数太多时,后面的6个字节都为0xFF,
  48   1       //表示按下的键太多,无法正确返回。
  49   1       
  50   1       uint8 Buf[8]={0,0,0,0,0,0,0,0};
  51   1       //由于需要返回多个按键,所以需要增加一个变量来保存当前的位置。
  52   1       uint8 i=2;
  53   1       if(s)
  54   1       {
  55   2              s=0;
C51 COMPILER V8.02   MAIN                                                                  06/17/2010 09:51:57 PAGE 2   

  56   2              if(s6)  
  57   2              {
  58   3                      s6=0;
  59   3                      Buf[i]=0x39;  //S6为大/小写切换键。
  60   3                      i++;  //切换到下个位置。
  61   3              }
  62   2              if(s7)
  63   2              {
  64   3                      s7=0;
  65   3                      Buf[i]=0x53;  //S7为数字小键盘功能切换键。
  66   3              }
  67   2              if(s10)
  68   2              {
  69   3                      s10=0;
  70   3                      Buf[0]|=0x02;  //S10为左Shift键。
  71   3              }
  72   2              if(s11)
  73   2              {
  74   3                      s11=0;
  75   3                      Buf[0]|=0x04;  //S11为左Alt键
  76   3              }
  77   2              if(s14)
  78   2              {
  79   3                      s14=0;
  80   3                      Buf[i]=0x59;  //S14为数字小键盘1键。
  81   3                      i++;  //切换到下个位置。
  82   3              }
  83   2              if(s15)
  84   2              {
  85   3                      s15=0;
  86   3                      Buf[i]=0x5A;  //S15数字小键盘2键。
  87   3                      i++;  //切换到下个位置。
  88   3              }
  89   2      //报告准备好了,通过端点1返回,长度为4字节。
  90   2        D12WriteEndpointBuffer(3,8,Buf);
  91   2        Ep1InIsBusy=1;  //设置端点忙标志。    
  92   2      }
  93   1      }
  94          ////////////////////////End of function//////////////////////////////
  95          
  96          /********************************************************************
  97          函数功能:主函数。
  98          入口参数:无。
  99          返    回:无。
 100          备    注:无。
 101          ********************************************************************/
 102          void main(void)  //主函数
 103          {
 104   1       uint8 i;
 105   1       uint16 id;
 106   1       uint8 InterruptSource;
 107   1       
 108   1       EA=1; //打开中断
 109   1       InitKeyboard(); //初始化按键
 110   1       InitUART();  //初始化串口
 111   1       
 112   1       for(i=0;i<19;i++)        //显示信息
 113   1       {
 114   2        Prints(HeadTable[i]);
 115   2       }
 116   1       
 117   1       id=D12ReadID();
C51 COMPILER V8.02   MAIN                                                                  06/17/2010 09:51:57 PAGE 3   

 118   1      
 119   1       Prints("Your D12 chip\'s ID is: ");
 120   1       PrintShortIntHex(id);
 121   1      
 122   1       if(id==0x1012)
 123   1       {
 124   2        Prints(". ID is correct! Congratulations!\r\n\r\n");
 125   2       }
 126   1       else
 127   1       {
 128   2        Prints(". ID is incorrect! What a pity!\r\n\r\n");
 129   2       }
 130   1       
 131   1       UsbDisconnect();  //先断开USB连接
 132   1       UsbConnect();  //将USB连接上
 133   1       ConfigValue=0; //配置值初始化为0
 134   1       
 135   1       while(1)  //死循环
 136   1       {
 137   2        if(D12GetIntPin()==0) //如果有中断发生
 138   2        {
 139   3         outportb(D12COMMAND,0xF4);// READ_INTERRUPT_REGISTER);
 140   3         InterruptSource=inportb(D12DATA);//D12ReadByte(); //读回第一字节的中断寄存器
 141   3         if(InterruptSource&0x80)UsbBusSuspend(); //总线挂起中断处理
 142   3         if(InterruptSource&0x40)UsbBusReset();   //总线复位中断处理
 143   3         if(InterruptSource&0x01)UsbEp0Out();     //端点0输出中断处理
 144   3         if(InterruptSource&0x02)UsbEp0In();      //端点0输入中断处理
 145   3         if(InterruptSource&0x04)UsbEp1Out();     //端点1输出中断处理
 146   3         if(InterruptSource&0x08)UsbEp1In();      //端点1输入中断处理
 147   3         if(InterruptSource&0x10)UsbEp2Out();     //端点2输出中断处理
 148   3         if(InterruptSource&0x20)UsbEp2In();      //端点2输入中断处理
 149   3        }
 150   2        if(ConfigValue!=0) //如果已经设置为非0的配置,则可以返回报告数据
 151   2        {
 152   3         if(!Ep1InIsBusy)  //如果端点1输入没有处于忙状态,则可以发送数据
 153   3         {
 154   4          KeyCanChange=0;  //禁止按键扫描
 155   4          if(s) //如果有按键事件发生
 156   4          {
 157   5           SendReport();  //则返回报告
 158   5          }
 159   4          KeyCanChange=1;  //允许按键扫描
 160   4         }
 161   3        }
 162   2       }
 163   1      }
 164          ////////////////////////End of function//////////////////////////////


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    325    ----
   CONSTANT SIZE    =   1290    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     19      12
   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 + -