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

📄 main.lst

📁 51的计算器很好的啊
💻 LST
字号:
C51 COMPILER V8.05a   MAIN                                                                 07/29/2007 09:35:52 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE sources\main.c BROWSE INCDIR(.\include) DEBUG OBJECTEXTEND PRINT(.\main.lst
                    -) OBJECT(main.obj)

line level    source

   1          //*************************************************************************************************
   2          //*************************************************************************************************
   3          //**<程序名>:LED动态扫描显示及键盘输入扫描。                                                                                                    **
   4          //**<功能>:将键盘输入转换成相应的输出并显示在LCD上,同时带有1s计数功能。                                                **
   5          //**<版本说明>:此版是第二版beta2,在第一版的基础上增强防抖动功能,采用全新的防抖动算法,使得按  **
   6          //**                    键扫描更精确可靠。                                                                                                                               **
   7          //**<主要改动>:重新加入防抖动标志位,但与出版不同的是,防抖动标志改为首次有效,同时增加了防抖动 **
   8          //**                    清除标志位,通过T1定时300毫秒清除防抖动标志位,从而使得键盘扫描及处理更加可靠。  **
   9          //**<作者>:程沛                                                                                                                                                                 **
  10          //**<完成时间>:2007年7月28日                                                                                                                                    **
  11          //**<联系方式>:superyongzhe@163.com                                                                                                                     **
  12          //*************************************************************************************************
  13          //*************************************************************************************************
  14          
  15          
  16          //*************************************************************************************************
  17          //*                                                                                                                                                                                               *
  18          //*                      ******************************头文件及宏定义**************************                           *
  19          //*                                                                                                                                                                                               *
  20          //*************************************************************************************************
  21          #include "includes.h"
  22          
  23          #define TIME0H 0xFC
  24          #define TIME0L 0x18             //定时器0溢出时间:5ms
  25          
  26          #define TIME1H 0x44
  27          #define TIME1L 0x80             //定时器1溢出时间:48ms
  28          
  29          
  30          //*************************************************************************************************
  31          //*                                                                                                                                                                                               *
  32          //*                       ********************************全局变量******************************                          *
  33          //*                                                                                                                                                                                               *
  34          //*************************************************************************************************
  35          
  36          //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定时器0定时刷新LED计数>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  37          unsigned char uc_DisCount=1;
  38          
  39          unsigned long ul_Number=0;                      //LCD实时显示数字。
  40          
  41          
  42          //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定时器1计数刷新定时(计时模式>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  43          unsigned char uc_TimeCount=0;           //定时器1定时计数。
  44          
  45          bit b_ClockStart=0;                                     //定时器1显示计数标志位。
  46          
  47          
  48          //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖动标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  49          
  50          bit b_KeyShock=0;                                       //键盘防抖动标志位。
  51                                                                                  //当按键中断产生时,首先判断此位。
  52                                                                                  //0--执行键盘扫描及键码处理程序;1--不执行。
  53          
  54          bit b_KillShock=0;                                      //防抖标志清除位:0--不清除;1--清除。
C51 COMPILER V8.05a   MAIN                                                                 07/29/2007 09:35:52 PAGE 2   

  55          
  56          unsigned char uc_KillCount=1;           //抖动标志清除计数,使用定时器1。
  57          
  58          
  59          //*************************************************************************************************
  60          //*                                                                                                                                                                                               *
  61          //*                       ********************************主函数******************************                            *
  62          //*                                                                                                                                                                                               *
  63          //*************************************************************************************************
  64          void main()
  65          {
  66   1              P2=0x0F;                  //初始化键盘接口。
  67   1      
  68   1              TMOD=0x11;                //定时器0:模式一;定时器0:模式一.
  69   1      
  70   1      
  71   1      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定时器0,用于LCD刷新>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  72   1              TH0=TIME0H;
  73   1              TL0=TIME0L;
  74   1              TR0=1;                   //开启定时器0
  75   1              ET0=1;                   //开定时器0中断
  76   1      
  77   1      
  78   1      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定时器1,用于1s计时 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  79   1              TH1=TIME1H;
  80   1              TL1=TIME1L;
  81   1              TR1=1;                   //开启定时器1
  82   1              ET1=1;                   //开定时器1中断
  83   1      
  84   1      
  85   1      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<外部中断0,用于执行键盘扫描和键处理程序>>>>>>>>>>>>>>>>>>>>>>>>>>>
  86   1              IT0=1;                   //外部中断0,中断方式:下降沿
  87   1              EX0=1;                   //开启外部中断0
  88   1      
  89   1              PT0=1;
  90   1              PX0=0;
  91   1      
  92   1              EA=1;                    //开启总中断
  93   1      
  94   1              while(1);
  95   1      }
  96          
  97          
  98          //*************************************************************************************************
  99          //*                                                                                                                                                                                               *
 100          //*             ***************************外部中断0,调用键盘扫描程序*************************                   *
 101          //*                                                                                                                                                                                               *
 102          //*************************************************************************************************
 103          void vINT0(void) interrupt 0
 104          {
 105   1              EX0=0;                                                  //在键扫描处理时,关闭外部中断0,防抖动。
 106   1      
 107   1              if(b_KeyShock==0)
 108   1                      {
 109   2                      vKeyProcess(ucKeyScan());       //当判断有按键按下时,扫描键盘,并把扫描结果进行处理。
 110   2                      }
 111   1              else b_KeyShock=0;                              //如果有抖动则不执行键扫描,恢复防抖动标志。
 112   1      
 113   1      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<设置防抖动清除标志位 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
 114   1              if(b_KeyShock==1)
 115   1                      b_KillShock=1;                          //如果防抖动标志位开启则开启防抖动标志清除位,
 116   1                                                                              //300ms后清除防抖动标志。
C51 COMPILER V8.05a   MAIN                                                                 07/29/2007 09:35:52 PAGE 3   

 117   1      
 118   1      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<恢复键扫描处理前初始状态 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 119   1              P2=0x0F;                                                //恢复P2口。
 120   1              EX0=1;                                                  //恢复按键中断。
 121   1      }
 122          
 123          
 124          //*************************************************************************************************
 125          //*                                                                                                                                                                                               *
 126          //*             **********************定时器1中断,用于计时功能和防抖动标志清除************************   *
 127          //*                                                                                                                                                                                               *
 128          //*************************************************************************************************
 129          void vTimer1(void) interrupt 3
 130          {
 131   1      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<计时模式计数刷新>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 132   1              if(b_ClockStart==1)                                     //当计时模式开启式,如计时处于运行状态则执行定时计数增加。
 133   1                      {
 134   2                      if(uc_TimeCount%21==0)
 135   2                              {
 136   3                              uc_TimeCount=1;
 137   3                              ul_Number++;
 138   3                              }
 139   2                      else uc_TimeCount++;
 140   2                      }
 141   1      
 142   1      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖动标志清除>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 143   1              if(b_KillShock==1)
 144   1                      {
 145   2                      if(uc_KillCount%7==0)                    //当防抖动标志位为1时,计时300ms后清除抖动标志位。
 146   2                              {
 147   3                              b_KeyShock=0;
 148   3                              b_KillShock=0;
 149   3                              uc_KillCount=1;
 150   3                              }
 151   2                      else uc_KillCount++;
 152   2                      }
 153   1      
 154   1              TH1=TIME1H;
 155   1              TL1=TIME1L;
 156   1      
 157   1      }
 158          
 159          
 160          //*************************************************************************************************
 161          //*                                                                                                                                                                                               *
 162          //*             ***************************定时器0,定时刷新LED*************************                                  *
 163          //*                                                                                                                                                                                               *
 164          //*************************************************************************************************
 165          void vTimer0(void) interrupt 1
 166          {
 167   1              vShowOneNum(*(pucLedNum(ul_Number)+uc_DisCount),6-uc_DisCount);    //在LCD上显示1位数字。
 168   1      
 169   1              if(uc_DisCount>=5)
 170   1                      uc_DisCount=0;                                          //定时器0在每次被触发时,改变LCd显示。
 171   1              else uc_DisCount++;                                             //从第一位到第六位循环显示。
 172   1      
 173   1              TH0=TIME0H;                                                             //恢复定时器0初始值。
 174   1              TL0=TIME0L;
 175   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
C51 COMPILER V8.05a   MAIN                                                                 07/29/2007 09:35:52 PAGE 4   

   CODE SIZE        =    312    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7    ----
   IDATA SIZE       =   ----    ----
   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 + -