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

📄 xxh.lst

📁 Proteus + KeilC 开发的跑表程序。简单、完整
💻 LST
字号:
C51 COMPILER V7.07   XXH                                                                   01/07/2009 16:15:46 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE XXH
OBJECT MODULE PLACED IN xxh.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE xxh.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg52.h>
   2          
   3          #define PORTSEG P0              // 数码管段输出
   4          #define PORTDIG P2              // 数码管位输出
   5          
   6          sbit KEY0   = P1^7;
   7          sbit KEY1   = P1^6;
   8          
   9          unsigned char i_ms,i_sec,i_min;
  10          unsigned char c_disp_dat[8],i_cur_dig;
  11          bit b_flag;
  12          
  13          char code seg_7[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
  14          
  15          void time() interrupt 1         // 10ms 到了更新时间值
  16          {
  17   1              TH0=0x78;
  18   1              TL0=0xEC;
  19   1              TR0=1;
  20   1      
  21   1              if(i_ms++ == 100)           // ms 计数到100ms 
  22   1              {
  23   2                      i_ms = 0;                       // ms 清零
  24   2                      if(i_sec++ == 60)   // 秒计数加一 
  25   2                      {
  26   3                              i_sec = 0;      // 秒计数达到60 就清0
  27   3                              if(i_min++ == 60)   // 分计数加一
  28   3                              {
  29   4                                      i_min = 0;      // 分计数达到60 就清0
  30   4                              }
  31   3                      }
  32   2              }
  33   1      
  34   1              c_disp_dat[0]=seg_7[i_min/10];   // 把要显示的分钟数的十位数段码查出来
  35   1              c_disp_dat[1]=seg_7[i_min%10];   // 把要显示的分钟数的个位数段码查出来
  36   1              c_disp_dat[2]=seg_7[i_sec/10];   // 把要显示的秒钟数的十位数段码查出来
  37   1              c_disp_dat[3]=seg_7[i_sec%10];   // 把要显示的秒钟数的个位数段码查出来
  38   1              c_disp_dat[4]=seg_7[i_ms/10];   // 把要显示的毫秒数的十位数段码查出来
  39   1              c_disp_dat[5]=seg_7[i_ms%10];   // 把要显示的毫秒数的个位数段码查出来
  40   1      }
  41          
  42          
  43          void interact() interrupt 3             //隔一段时间切换显示一位LED,实现扫描显示
  44          {
  45   1              TH1=0xf6;
  46   1              TL1=0x3c;
  47   1              TR1=1;
  48   1      
  49   1              PORTSEG = 0x0;
  50   1              if(++i_cur_dig==6)                      // 共需要显示6位数字
  51   1              {
  52   2                      PORTDIG = 0xdf;
  53   2                      i_cur_dig = 0;
  54   2              }
  55   1              else
C51 COMPILER V7.07   XXH                                                                   01/07/2009 16:15:46 PAGE 2   

  56   1                      PORTDIG = ~((~PORTDIG)>>1);             // 显示右边一位LED
  57   1              PORTSEG = c_disp_dat[i_cur_dig];    // 段码输出
  58   1      }
  59          
  60          void delay(unsigned char i)             // 延时程序
  61          {
  62   1              while(i--);
  63   1      }
  64          
  65          void main()
  66          {
  67   1              EA=0; //关所有中断
  68   1      
  69   1              TMOD=0x01;                      // T0、T1 均为16位计数模式
  70   1              TH0=0x78;
  71   1              TL0=0xEC;
  72   1      
  73   1              TH1=0xf6;
  74   1              TL1=0x3c;
  75   1      
  76   1              i_ms = i_sec = i_min = 0;
  77   1              i_cur_dig = 0;
  78   1              PORTDIG = 0xfe;
  79   1      
  80   1              ET0=1;          //开T0中断
  81   1              TR0=1;
  82   1              ET1=1;          //开T1中断
  83   1              TR1=1;
  84   1              EA=1;           //开所有中断
  85   1              
  86   1              while(1)
  87   1              {
  88   2                      if(KEY0 == 0)           //检测是否按下  key0 按键
  89   2                      {
  90   3                              delay(100);             // 消抖
  91   3                              if(KEY0 == 0)
  92   3                              {
  93   4                                      TR0 = ~TR0;                     // 暂停秒表
  94   4                                      while(KEY0 == 0)        // 等待按键释放
  95   4                                      {}
  96   4                              }
  97   3                      }
  98   2                      if(KEY1 == 0)           //检测是否按下  key1 按键
  99   2                      {
 100   3                              delay(100);             // 消抖
 101   3                              if(KEY1 == 0)
 102   3                              {
 103   4                                      i_ms = i_sec = i_min = 0;       // 清秒表计数
 104   4                                      while(KEY0 == 0)        // 等待按键释放
 105   4                                      {}
 106   4                              }
 107   3                      }
 108   2              }
 109   1      }
 110          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    277    ----
   CONSTANT SIZE    =     11    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
C51 COMPILER V7.07   XXH                                                                   01/07/2009 16:15:46 PAGE 3   

   DATA SIZE        =     12    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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