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

📄 system.lst

📁 C8051F120与串口、并口、D12、USB、LCD应用
💻 LST
字号:
C51 COMPILER V7.01  SYSTEM                                                                 06/30/2007 11:42:50 PAGE 1   


C51 COMPILER V7.01, COMPILATION OF MODULE SYSTEM
OBJECT MODULE PLACED IN System.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE System.c LARGE BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include "System.h" 
   2          
   3          //25ms定时器2计数值=0x10000-22.1184M/12/40
   4          #define T2L_VAL 0x00
   5          #define T2H_VAL 0x4C
   6          
   7          unsigned char CheckKeyF=0;      //键盘检测标志位
   8          unsigned int  counter=0;        //T2计数器,25ms++
   9          unsigned int  Mycounter;        //计数器,用于用户定时
  10          unsigned char Myflag=0;         //用户定时标志
  11          
  12          //键盘数据结构
  13          struct KeyStruct Key[8];
  14          
  15          void delay(int n)    //延时函数
  16          {
  17   1              int i=0;
  18   1              while(i<n)      i++;
  19   1      }
  20          
  21          #define XBARE 0x40      //ENABLE XBR, set XBR2.6 = 1
  22          //配置交叉开关和I/O口
  23          void PORT_INIT()
  24          { 
  25   1              SFRPAGE = CONFIG_PAGE;
  26   1              /* XBR0 control follow digital utils
  27   1              uart0:xbr0.2->p0.0,p0.1
  28   1              spi0:xbr0.1->p0.2,p0.3,p0.4,(p0.5)
  29   1              smb0:xbr0.0->p0.6,p0.7
  30   1              */
  31   1              XBR0 = 0x07;
  32   1      
  33   1              /*XBR2 control follows
  34   1              UART1:xbr2.2->p1.0,p1.1
  35   1              */
  36   1              XBR2 = 0x4;
  37   1      
  38   1              // set P1MDIN.2 to ADC2-in, skip p1.2 pin
  39   1              P1MDIN = 0xFB;
  40   1      
  41   1              /*XBR1 control follows
  42   1              T0:XBR1.1->p1.3
  43   1              INT0:XBR1.2->p1.4
  44   1              */
  45   1              XBR1 = 0x06;
  46   1              //for test
  47   1      //      P1MDOUT |= 0x10;
  48   1      //      XBR1 |= 0x82;   //XBR1.7:sysclk->p1.4   
  49   1      
  50   1      
  51   1              //ENABLE switch 
  52   1              XBR2 |= XBARE;
  53   1         
  54   1              P5MDOUT|=0x0F;   //LCD控制信号
  55   1              P6MDOUT|=0xFF;   //LCD数据信号
C51 COMPILER V7.01  SYSTEM                                                                 06/30/2007 11:42:50 PAGE 2   

  56   1              P7MDOUT|=0x13;   //背光,RES,HC157控制
  57   1              P3MDOUT|=0x04;   //KEY_EN
  58   1      }
  59          
  60          //系统时钟初始化
  61          void SYSCLK_INIT()                //使用外部晶阵22.1184M   
  62          {   
  63   1          SFRPAGE = CONFIG_PAGE;
  64   1              OSCXCN |=0x67;                //使能外部晶阵
  65   1          while((OSCXCN & 0x80)==0)     //延时,直至外部晶阵就绪
  66   1          delay(100);
  67   1              CLKSEL |=0x01;                //切换到外部时钟
  68   1      } 
  69          
  70          
  71          void Timer2_INIT()                //16位自动重装模式,产成25ms中断
  72          {   
  73   1          SFRPAGE = TMR2_PAGE;
  74   1              
  75   1              TMR2L=T2L_VAL;                //赋值          
  76   1          TMR2H=T2H_VAL;
  77   1          RCAP2L=T2L_VAL;
  78   1          RCAP2H=T2H_VAL;
  79   1          TMR2CF |=0x01;                //SYSCLK/12作为T2输入,向上计数
  80   1              TMR2CN &=0xf4;                //T2工作模式: 自动重装,计时器,忽略T2EX信号                       
  81   1              ET2=1;
  82   1              TR2=1;  
  83   1      }
  84          
  85          void Timer2_ISR() interrupt 5            //T2 25ms中断
  86          {   
  87   1              TF2=0;
  88   1              counter++;
  89   1          CheckKeyF=1;                                //键盘检测              
  90   1              if(Mycounter==counter)         
  91   1                      Myflag=1;                                       //用户定时到,置位
  92   1      }
  93          
  94          void CheckKey()                                         //键盘检测.要求每次按键时间超过100ms;持续按键以每秒4次计算
  95          {       
  96   1          unsigned char data i;
  97   1              unsigned char data M=1;
  98   1              SFRPAGE = CONFIG_PAGE;
  99   1              OE=1;                                                   //关闭并口
 100   1              Key_En=0;                               //使能键盘
 101   1              P6MDOUT=0x00;                           //配置P6为数字输入 (数字输入=漏极开路+SFR写1)
 102   1              P6=0xff;
 103   1              delay(5);
 104   1          for(i=0;i<8;i++)                            //依次检测各键
 105   1              {  
 106   2                  if((P6&M)==0)                               //当前第i位为0
 107   2                      {
 108   3                              if(Key[i].pressold==0)  //前一次为0
 109   3                              {
 110   4                                      Key[i].pressing++;
 111   4                                      if(Key[i].pressing==4)  Key[i].pressed=1;
 112   4                                      if(Key[i].pressing==10) Key[i].pressing=0;  //持续按键以每秒4次计算
 113   4                              }
 114   3                              else                                    //前一次为1
 115   3                              { 
 116   4                                      Key[i].pressing=1;      
 117   4                              }
C51 COMPILER V7.01  SYSTEM                                                                 06/30/2007 11:42:50 PAGE 3   

 118   3                              Key[i].pressold=0;
 119   3                      }
 120   2                      else                                            //当前第i位为1
 121   2                      {    
 122   3                      if(Key[i].pressold==0)  //前一次为0   
 123   3                          {
 124   4                                      Key[i].pressing=0; 
 125   4                              }
 126   3                              else                                    //前一次为1
 127   3                              {
 128   4                                                      
 129   4                              }
 130   3                          Key[i].pressold=1;
 131   3                      }
 132   2                  M=M<<1;  
 133   2              }
 134   1              CheckKeyF=0;
 135   1              Key_En=1; 
 136   1          P6MDOUT=0xff;                                       //P6置回输出状态
 137   1      }
 138          
 139          void Key_INIT()
 140          {
 141   1        int i;
 142   1        for(i=0;i<8;i++)
 143   1        {
 144   2                Key[i].pressed=0;
 145   2                Key[i].pressold=1;
 146   2                Key[i].pressing=0;
 147   2        }
 148   1      }
 149          
 150          void ClearKey()
 151          {
 152   1              int i;
 153   1              for(i=0;i<8;i++)
 154   1              {
 155   2                      Key[i].pressed=0;
 156   2              }
 157   1      }
 158          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    557    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     30    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       2
   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 + -