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

📄 clock.lst

📁 51单片机的电子钟程序,带整点报时,可设置时间,若要掉点保存功能.单片机时钟用12M,经测试很准的.
💻 LST
字号:
C51 COMPILER V7.06   CLOCK                                                                 11/05/2008 23:54:06 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE CLOCK
OBJECT MODULE PLACED IN clock.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE clock.c BROWSE INCDIR(C:\EZST\EasyStudy51\ES51-II\Target\INC\) DEBUG OBJECT
                    -EXTEND

stmt level    source

   1          
   2          
   3          
   4          #include "at89x52.h"
   5          #include "ES51_II.h"
   6          #include "es51_ii_lib.h"
   7          
   8          
   9          
  10          unsigned char Hour;             //      
  11          unsigned char Mint;             //
  12          unsigned char Sec;              //
  13          
  14          //      设置标志位
  15          bit bSetFlag;                   
  16          //      秒进位标志位
  17          bit bCarryFlag;         
  18          
  19          //      设置指示灯,进入设置时,LED2亮,
  20          #define SETSHOW LED1
  21          
  22          //      T2初始化程序,   50ms定时
  23          void Init_T2(void)
  24          {
  25   1              RCAP2H = 0x3c;
  26   1              RCAP2L = 0xb0;
  27   1              TH2     = RCAP2H;                       //工作方式1,timer2
  28   1              TL2     = RCAP2L;
  29   1      
  30   1              T2MOD = 0x00;
  31   1              ET2 = 1;
  32   1              TR2 = 1;
  33   1      
  34   1      }
  35          
  36          //      数码管显示缓冲区刷新函数
  37          void SMG_ReDisplay(void)
  38          {
  39   1              SMG_BUFF[0] = SMG_TABLE[Hour/10];
  40   1              SMG_BUFF[1] = SMG_TABLE_DP[Hour%10];
  41   1              SMG_BUFF[2] = SMG_TABLE[Mint/10];
  42   1              SMG_BUFF[3] = SMG_TABLE[Mint%10];
  43   1      }
  44          
  45          //      60秒定时到,分钟加1,并刷新数码管显示
  46          void ChangeTime(void)
  47          {       
  48   1              static bit bSecFlag = TRUE;
  49   1              bit  bAlarmFlag = FALSE;
  50   1      
  51   1              bCarryFlag = FALSE;
  52   1      
  53   1              bSecFlag = !bSecFlag;           //      用于小数点闪烁
  54   1      
C51 COMPILER V7.06   CLOCK                                                                 11/05/2008 23:54:06 PAGE 2   

  55   1              if( ++Sec == 60 )                       //      进位,分钟
  56   1                      {
  57   2                      Sec = 0;
  58   2                              
  59   2                      if( ++Mint == 60 )              //      进位,小时       
  60   2                              {
  61   3                              Mint = 0;
  62   3                              bAlarmFlag = TRUE;      //      小时进位,需要整点报时
  63   3                              if( ++Hour == 24 )      //      进位,24小时
  64   3                                      Hour = 0;                       
  65   3                              }
  66   2                      }
  67   1      
  68   1              if( bSecFlag == TRUE )          //      以下代码实现第二位数码管小时点的闪烁
  69   1                      SMG_ReDisplay();                //      显示小数点
  70   1              else                                    
  71   1                      {                                               //      不显示小数点
  72   2                      SMG_BUFF[0] = SMG_TABLE[Hour/10];
  73   2                      SMG_BUFF[1] = SMG_TABLE[Hour%10];
  74   2                      SMG_BUFF[2] = SMG_TABLE[Mint/10];
  75   2                      SMG_BUFF[3] = SMG_TABLE[Mint%10];
  76   2                      }
  77   1              if( bAlarmFlag == TRUE )        //      判断是否需要整点报时
  78   1                      {
  79   2                      bAlarmFlag = FALSE;
  80   2                      Buzzer(1,0);                    //      蜂鸣器发一声长声
  81   2                      }
  82   1      }
  83          
  84          
  85          //      设置电子钟时间函数
  86          void SetClock(void)
  87          {
  88   1              
  89   1              SETSHOW = 0;                            //      设置指示灯亮
  90   1              ET2 = 0;
  91   1              TR2 = 0;
  92   1      
  93   1              KeyVal = 0x0f;                          //      丢弃键值,
  94   1      
  95   1      
  96   1              while( bSetFlag == TRUE )       //      等待按设置键以完成设置
  97   1                      {                                                               
  98   2                      switch( KeyVal )                //      根据键值的不同进行不同的操作
  99   2                              {
 100   3                              case KEY1VAL:           //      设置:小时减1
 101   3                                              if( --Hour == 255 )
 102   3                                                      Hour = 23;
 103   3                                              SMG_ReDisplay();
 104   3                                              KeyVal = 0x0f;
 105   3                                              break;
 106   3                              case KEY2VAL:           //      设置小时加1
 107   3                                              if( ++Hour == 24 )
 108   3                                                      Hour = 0;
 109   3                                              SMG_BUFF[0] = SMG_TABLE[Hour/10];
 110   3                                              SMG_BUFF[1] = SMG_TABLE_DP[Hour%10];                                    
 111   3                                              //nowtime = Hour*1.0+Mint*0.01;//       计算当前时间    
 112   3                                              //SMGprintf("%f",nowtime);//    刷新数码管显示
 113   3                                              KeyVal = 0x0f;
 114   3                                              break;
 115   3                              case KEY3VAL:           //      设置分钟减1
 116   3                                              if( --Mint == 255)
C51 COMPILER V7.06   CLOCK                                                                 11/05/2008 23:54:06 PAGE 3   

 117   3                                                      {
 118   4                                                      Mint = 59;
 119   4                                                      if( --Hour == 255)
 120   4                                                              Hour = 23;
 121   4                                                      }
 122   3                                              SMG_ReDisplay();
 123   3                                              KeyVal = 0x0f;
 124   3                                              break;
 125   3                              case KEY4VAL:           //      设置分钟加1
 126   3                                              if( ++Mint == 60)
 127   3                                                      {
 128   4                                                      Mint = 0;
 129   4                                                      if( ++Hour == 24)
 130   4                                                              Hour = 0;
 131   4                                                      }
 132   3                                              SMG_ReDisplay();
 133   3                                              KeyVal = 0x0f;
 134   3                                              break;
 135   3                              default:                        //      不操作
 136   3                                              break;
 137   3                              }
 138   2                      }
 139   1              SETSHOW = 1;                            //      设置指示灯灭,设置完成
 140   1              Sec = 0;
 141   1              ET2 = 1;
 142   1              TR2 = 1;
 143   1      }
 144          
 145          //      INT0键中断程序
 146          void INT0_KEY(void) interrupt IE0_VECTOR using 0
 147          {
 148   1              unsigned char i=250;
 149   1              while(i--);
 150   1              bSetFlag = !bSetFlag;
 151   1      }
 152          
 153          //      T2定时溢出中断
 154          //              每次定时50ms,对溢出次数进行计数学,每溢出20次为1秒
 155          void INT_T2(void) interrupt TF2_VECTOR using 0
 156          {
 157   1              static unsigned char Count_50ms = 0;
 158   1              TF2 = 0;
 159   1              if( ++ Count_50ms >= 20 )               //      50ms计数加1;
 160   1                      {
 161   2                      Count_50ms = 0;
 162   2                      bCarryFlag = TRUE;
 163   2                      }
 164   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    363    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      3       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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