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

📄 ds1302.lst

📁 一款由at89sC51+LCD128*64+DS1302等硬件设计而成的精美万年历。可以在Protues下仿真
💻 LST
字号:
C51 COMPILER V8.08   DS1302                                                                07/29/2008 20:05:45 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN ds1302.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ds1302.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //亦木明
   2          //哪天写的忘了。^_^
   3          #include <reg52.h>
   4          //#include "ds1302.h"
   5          
   6          #define uchar unsigned char
   7          #define uint  unsigned int
   8          
   9          #define SECOND 0x80             //秒
  10          #define MINUTE 0x82             //分鍾
  11          #define HOUR   0x84             //小時
  12          #define DAY        0x86         //天
  13          #define MONTH  0x88             //月
  14          #define WEEK   0x8a             //星期
  15          #define YEAR   0x8c             //年
  16          
  17          sbit DS1302_RST=P3^0;
  18          sbit DS1302_SCLK=P3^1;
  19          sbit DS1302_IO=P3^2;
  20                  
  21          typedef struct systime
  22          {
  23                  uchar   cYear;
  24                  uchar   cMon;
  25                  uchar   cDay;
  26                  uchar   cHour;
  27                  uchar   cMin;
  28                  uchar   cSec;
  29                  uchar   cWeek;
  30          }SYSTIME;
  31                           
  32          void DS1302_Write(uchar D)
  33          {
  34   1              uchar i;        
  35   1              for(i=0;i<8;i++)
  36   1              {       
  37   2                      DS1302_IO=D&0x01;
  38   2                      DS1302_SCLK=1;
  39   2                      DS1302_SCLK=0;
  40   2                      D=D>>1;                         
  41   2              }       
  42   1      }
  43          
  44          uchar DS1302_Read()
  45          {
  46   1              uchar TempDat=0,i;
  47   1              for(i=0;i<8;i++)
  48   1              {       
  49   2                      TempDat>>=1;    
  50   2                      if(DS1302_IO) TempDat=TempDat|0x80;
  51   2                      DS1302_SCLK=1;
  52   2                      DS1302_SCLK=0;
  53   2                      
  54   2              }       
  55   1          return TempDat;
C51 COMPILER V8.08   DS1302                                                                07/29/2008 20:05:45 PAGE 2   

  56   1      }
  57          
  58          void WDS1302(uchar ucAddr, uchar ucDat) 
  59          {
  60   1          DS1302_RST = 0;
  61   1          DS1302_SCLK = 0;
  62   1          DS1302_RST = 1;
  63   1          DS1302_Write(ucAddr);               // 地址,命令 
  64   1          DS1302_Write(ucDat);        // 写1Byte数据
  65   1          DS1302_SCLK = 1;
  66   1          DS1302_RST = 0;
  67   1      } 
  68          
  69          uchar RDS1302(uchar ucAddr)
  70          {
  71   1          uchar ucDat;
  72   1          DS1302_RST = 0;
  73   1          DS1302_SCLK = 0;
  74   1          DS1302_RST = 1;
  75   1          DS1302_Write(ucAddr);               // 地址,命令 
  76   1          ucDat=DS1302_Read();       
  77   1          DS1302_SCLK = 1;
  78   1          DS1302_RST = 0;
  79   1              return ucDat;
  80   1      }
  81          
  82          void SetTime(SYSTIME sys)
  83          {
  84   1      
  85   1          WDS1302(YEAR,sys.cYear); 
  86   1              WDS1302(MONTH,sys.cMon&0x1f);
  87   1              WDS1302(DAY,sys.cDay&0x3f);
  88   1              WDS1302(HOUR,sys.cHour&0xbf);
  89   1              WDS1302(MINUTE,sys.cMin&0x7f);
  90   1              WDS1302(SECOND,sys.cSec&0x7f);  
  91   1              WDS1302(WEEK,sys.cWeek&0x07);
  92   1      
  93   1      }
  94          
  95          void GetTime(SYSTIME *sys)
  96          {
  97   1              uchar uiTempDat;
  98   1              uiTempDat=RDS1302(YEAR|0x01);                     
  99   1              (*sys).cYear=(uiTempDat>>4)*10+(uiTempDat&0x0f);
 100   1      
 101   1      //      uiTempDat=RDS1302(0x88|0x01);
 102   1      //      (*sys).cMon=((uiTempDat&0x1f)>>4)*10+(uiTempDat&0x0f);
 103   1              uiTempDat=RDS1302(0x88|0x01);
 104   1              (*sys).cMon=((uiTempDat&0x1f)>>4)*10+(uiTempDat&0x0f);  
 105   1      
 106   1              uiTempDat=RDS1302(DAY|0x01);
 107   1              (*sys).cDay=((uiTempDat&0x3f)>>4)*10+(uiTempDat&0x0f);
 108   1      
 109   1              uiTempDat=RDS1302(HOUR|0x01);
 110   1              (*sys).cHour=((uiTempDat&0x3f)>>4)*10+(uiTempDat&0x0f);
 111   1      
 112   1              uiTempDat=RDS1302(MINUTE|0x01);
 113   1              sys->cMin=((uiTempDat&0x7f)>>4)*10+(uiTempDat&0x0f);
 114   1      
 115   1              uiTempDat=RDS1302(SECOND|0x01);
 116   1              sys->cSec=((uiTempDat&0x7f)>>4)*10+(uiTempDat&0x0f);
 117   1      
C51 COMPILER V8.08   DS1302                                                                07/29/2008 20:05:45 PAGE 3   

 118   1              uiTempDat=RDS1302(MONTH|0x01);
 119   1              (*sys).cMon=uiTempDat&0x17;
 120   1      
 121   1              uiTempDat=RDS1302(WEEK|0x01);
 122   1              sys->cWeek=uiTempDat&0x07;
 123   1      }


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