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

📄 main.lst

📁 实现51单片机的日历功能 用T2定时器作为基本时钟中断
💻 LST
字号:
C51 COMPILER V7.06   MAIN                                                                  10/26/2008 17:03:12 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil C51\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <regx52.h>
   2          #include "KeyBoardService.h"
   3          #include "seg.h"
   4          
   5          unsigned char press_flag=0;
   6          unsigned char key_value;
   7          
   8          #define uchar   unsigned char
   9          uchar deta, sec, min, hour;
  10          uchar display[4];
  11          uchar i,xint_flag;
  12          extern uchar modal;
  13          unsigned int k,j;
  14          unsigned int count_pt;
  15          
  16          void T2Init()
  17          {
  18   1              T2MOD=0x01;             //自动重装方式2
  19   1              T2CON=0x00;
  20   1              TH2=0x4c;
  21   1              TL2=0x00;
  22   1              RCAP2H=0x4c;            //50ms定时0x4c00        修改至54ms 10%
  23   1              RCAP2L=0x00;
  24   1              ET2=1;
  25   1      }
  26          
  27          void Int0Init()
  28          {
  29   1              EX0=1;
  30   1              IT0=1;
  31   1              PX0=1;
  32   1      }
  33          
  34          void TInit()
  35          {
  36   1              TMOD=0x31;              //T0方式1 60ms键盘扫描          T1方式2控制EX0
  37   1              TH0=0x28;
  38   1              TL0=0x00;
  39   1              ET0=1;
  40   1              TR0=1;
  41   1      //      TH1=
  42   1      }
  43          
  44          void Init()
  45          {
  46   1              T2Init();
  47   1              TInit();
  48   1              Int0Init();
  49   1      }
  50          
  51          void T0_Int() interrupt 1
  52          {
  53   1              TH0=0x28;
  54   1              TL0=0x00;
  55   1              key_value = P1|0x1f;
C51 COMPILER V7.06   MAIN                                                                  10/26/2008 17:03:12 PAGE 2   

  56   1              if(key_value != 0xff)   
  57   1              {
  58   2                      if(press_flag == 0)
  59   2                              press_flag=1;
  60   2                      else if(press_flag == 1)
  61   2                              press_flag = 2;
  62   2              }
  63   1              else press_flag = 0;
  64   1      }
  65          
  66          void T2_Int() interrupt 5 
  67          {
  68   1              EA=0;
  69   1              TF2=0;
  70   1              deta++;
  71   1              if(deta >= 20)
  72   1              {
  73   2                      sec++;
  74   2                      deta = 0;
  75   2              }
  76   1              if(sec >= 60)
  77   1              {
  78   2                      sec = 0;
  79   2                      min++;                  
  80   2              }
  81   1              if(min >= 60)
  82   1              {
  83   2                      min = 0;
  84   2                      hour++;
  85   2              }
  86   1              if(hour >= 24)
  87   1              {
  88   2                      hour = 0;
  89   2              }
  90   1              if(modal == 0)
  91   1              {
  92   2                      if(xint_flag != 1)
  93   2                      {
  94   3                              display[3] = min%10;
  95   3                              display[2] = min/10;
  96   3                              display[1] = hour%10;
  97   3                              display[0] = hour/10;
  98   3                      }
  99   2              }
 100   1              EA = 1;
 101   1      }
 102          
 103          void Int0() interrupt 0
 104          {
 105   1              EA = 0;
 106   1              xint_flag = 1;
 107   1      
 108   1              EA = 1;
 109   1      }
 110          
 111          
 112          void LCDdisplay()
 113          {
 114   1              count_pt++;
 115   1              for(i=0; i<4; i++)
 116   1              {
 117   2                      WriteCsData(4);
C51 COMPILER V7.06   MAIN                                                                  10/26/2008 17:03:12 PAGE 3   

 118   2                      WriteSegData(display[i]);
 119   2                      WriteCsData(i);
 120   2              }
 121   1              if(modal == 1)
 122   1              {
 123   2                      WriteCsData(4);
 124   2                      WritePoint(1);
 125   2                      WriteCsData(1);
 126   2              }
 127   1              else if(modal == 0)
 128   1              {
 129   2                      if(count_pt > 2000)             //display[3]会再次被点亮
 130   2                      {
 131   3                              count_pt = 0;   
 132   3                      }
 133   2                      else if(count_pt < 1000)
 134   2                      {
 135   3                              WriteCsData(4);
 136   3                              WritePoint(1);
 137   3                              WriteCsData(1);
 138   3                      }
 139   2                      else
 140   2                      {
 141   3      
 142   3                      }
 143   2              }
 144   1      }
 145          
 146          void delay(unsigned int k)
 147          {
 148   1              while(--k)
 149   1                      for(j = 255; j>0; j--);
 150   1      }
 151          
 152          void main()
 153          {
 154   1              Init();
 155   1              TR2=1;
 156   1              EA=1;
 157   1              while(1)
 158   1              {
 159   2                      if(hour > 8 && hour < 22)
 160   2                      {
 161   3                              EX0=0;
 162   3                      }
 163   2                      else    EX1=1;
 164   2      
 165   2                      if(xint_flag == 1)
 166   2                      {
 167   3                              P1_0=~P1_0;
 168   3                              delay(10);
 169   3                      }
 170   2                      KeyBoardService();
 171   2                      LCDdisplay();
 172   2              }
 173   1      }       


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    394    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
C51 COMPILER V7.06   MAIN                                                                  10/26/2008 17:03:12 PAGE 4   

   PDATA SIZE       =   ----    ----
   DATA SIZE        =     18    ----
   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 + -