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

📄 rtc.lst

📁 51单片机下的RTC程序
💻 LST
字号:
C51 COMPILER V7.50   RTC                                                                   09/09/2006 12:13:13 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE RTC
OBJECT MODULE PLACED IN RTC.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE RTC.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  Copyright (c)  $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
   2          $                                                                                               肖遥电子(广州)研发中心
   3          $                                                                               Shawyoo Electronics (GuangZhou) R&D Center
   4          $                               http://www.shawyoo.com           Email: autoele@qq.com
   5          $                                                                QQ群:9069471/9069433/9524253          All rights reserved.      
   6          $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  Copyright (c)  $$$$$$$$$$$$$$$$$$$$$$$$$$$ */
   7          /*  
   8                                                文件描述
   9                  文件名:          RTC.c
  10                  功能描述:把日期时间变成秒,把秒变成日期时间格式
  11                  编译环境:通用C编译器 
  12                  目标CPU:  
  13                  作者:
  14                  创建时间:
  15                  建议编辑环境:UltraEdit 11.00a+  制表符宽度为三个字符,程序可读性更好。
  16          $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
  17          */                                        
  18          
  19          #define                 DEF_RTC                 1
  20          #define                 RTC_GLOBALS             1
  21          #include        "RTC.h"
  22          
  23          #include                        <stdio.h>
  24          
  25          
  26          /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
  27                  平年中,每个月的天数.月是从1开始
  28          */
  29          signed char code DayOfMonth[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
  30          
  31          /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
  32                  从START_YEAR开始,总计TOTAL_YEAR,每年的润年标志,润年为1,否则为0
  33                  这个表是从2000年开始,共100年。不同年份要作相应修改。
  34          */
  35          unsigned char code LeapYearFlag[100] = 
  36          {
  37                  1,0,0,0,        1,0,0,0,        1,0,0,0,        1,0,0,0,        1,0,0,0,
  38                  1,0,0,0,        1,0,0,0,        1,0,0,0,        1,0,0,0,        1,0,0,0,
  39                  1,0,0,0,        1,0,0,0,        1,0,0,0,        1,0,0,0,        1,0,0,0,
  40                  1,0,0,0,        1,0,0,0,        1,0,0,0,        1,0,0,0,        1,0,0,0,
  41                  1,0,0,0,        1,0,0,0,        1,0,0,0,        1,0,0,0,        1,0,0,0,
  42          };
  43          
  44          
  45          
  46          /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
  47             平年中,当月及前面月份的总天数
  48          */  
  49          signed short code DayOfYear[13] = { 0,31,59,90,120,151,181,212,243,273,304,334,365  };  
  50          
  51          
  52          
  53          /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
  54                  函数名称:DateTimeToSecond
  55             功能描述:把日期和时间转换为秒(2000年1月1日0时0分0秒时刻为0秒)
C51 COMPILER V7.50   RTC                                                                   09/09/2006 12:13:13 PAGE 2   

  56             入口参数:RTC结构指针                  
  57             出口参数:秒
  58             全局变量: 无
  59             创建时间:2006-5-6 17:40
  60             修改时间:
  61          */ 
  62          uint32                  DateTimeToSecond(RTC_STR  *pRTC)
  63          {
  64   1              uchar           i;
  65   1         int16        LeapYear,wYear;
  66   1         uint32       Day,Sec,ySec;   
  67   1              //////////////////////////////////////////      
  68   1              wYear = pRTC->wYear;
  69   1         wYear -= START_YEAR;         
  70   1              /////////////////////////////////// 计算出已过去的整年总共秒数
  71   1              for(i=0,ySec=0;i<wYear;i++)
  72   1              {
  73   2                      ySec += ONE_YEAR_SECOND;
  74   2                      if(LeapYearFlag[i])
  75   2                              ySec += ONE_DAY_SECOND;
  76   2              }
  77   1              /////////////////////////////////// 计算出当年已过去的整天数
  78   1              LeapYear = LeapYearFlag[wYear];
  79   1              Day = DayOfYear[pRTC->Month-1];
  80   1              Day += pRTC->Day;
  81   1              Day -= 1;
  82   1              if((LeapYear!=0)&&(pRTC->Month>2))
  83   1                      Day += 1;
  84   1              /////////////////////////////////// 计算出当天已过去的总秒数
  85   1              Sec = (pRTC->Hour)*3600L + (pRTC->Min)*60L + pRTC->Sec;
  86   1              Sec += ySec;
  87   1              Sec += (Day*ONE_DAY_SECOND);
  88   1              /////////////////////////////////// 
  89   1         return Sec;
  90   1      }       // End of function <DateTimeToSecond>
  91          
  92          
  93          
  94          /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
  95                  函数名称:SecondToDateTime
  96             功能描述:把秒(2000年1月1日0时0分0秒时刻为0秒)转换为年月日时分秒
  97             入口参数:秒,RTC结构指针              
  98             出口参数:成功标志,成功为OK,不成功为ERROR
  99             全局变量: 无
 100             创建时间:2006-5-6 17:40
 101             修改时间:
 102          */ 
 103          uchar                   SecondToDateTime(uint32 Second, RTC_STR  *pRTC)
 104          {
 105   1              uchar           i,Month,Day;
 106   1         int16        LeapYear,wYear;
 107   1         uint32       Sec;    
 108   1              /////////////////////////////////// 计算出已过去的整年数
 109   1              for(i=0,wYear=0;i<TOTAL_YEAR;i++)
 110   1              {
 111   2                      Sec = ONE_YEAR_SECOND;
 112   2                      if(LeapYearFlag[i])
 113   2                              Sec += ONE_DAY_SECOND;
 114   2                      if(Second<Sec)  break;
 115   2                      wYear++;
 116   2                      Second -= Sec;
 117   2              }
C51 COMPILER V7.50   RTC                                                                   09/09/2006 12:13:13 PAGE 3   

 118   1              pRTC->Year = wYear;
 119   1              pRTC->wYear = wYear+START_YEAR;
 120   1              /////////////////////////////////// 计算出当年已过去的整月数
 121   1              LeapYear = LeapYearFlag[wYear];
 122   1              for(i=0,Month=1;i<12;i++)
 123   1              {
 124   2                      Sec = DayOfMonth[i];
 125   2                      Sec *= ONE_DAY_SECOND;
 126   2                      if((LeapYear!=0)&&(Month==2))
 127   2                              Sec += ONE_DAY_SECOND;
 128   2                      if(Second<Sec)  break;
 129   2                      Month++;
 130   2                      Second -= Sec;
 131   2              }
 132   1              pRTC->Month = Month;
 133   1              /////////////////////////////////// 计算出当月已过去的整天数
 134   1              pRTC->Day = Second/ONE_DAY_SECOND;
 135   1              pRTC->Day += 1;
 136   1              /////////////////////////////////// 计算出当天已过去的整小时数
 137   1              Second %= ONE_DAY_SECOND;
 138   1              pRTC->Hour = Second/3600L;
 139   1              /////////////////////////////////// 计算出分钟、秒
 140   1              Second %= 3600L;
 141   1              pRTC->Min = Second/60;
 142   1              pRTC->Sec = Second%60;
 143   1              /////////////////////////////////// 星期
 144   1              wYear = pRTC->wYear;
 145   1              Month = pRTC->Month;
 146   1              Day   = pRTC->Day;
 147   1              if((Month==1)||(Month==2))
 148   1              {
 149   2                      Month += 12;
 150   2                      wYear--;
 151   2              }
 152   1              pRTC->Week = ((Day+2*Month+3*(Month+1)/5+wYear+wYear/4-wYear/100+wYear/400)+1)%7;
 153   1              return 0;
 154   1      }                       
 155                  // End of function <SecondToDateTime>           
 156          
 157          
 158          
 159          
 160          /*
 161           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  End of File $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
 162           */
 163          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1175    ----
   CONSTANT SIZE    =    138    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     11      36
   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 + -