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

📄 part.lst

📁 DS1302资料lcd.rar
💻 LST
字号:
C51 COMPILER V8.08   PART                                                                  06/11/2009 09:37:40 PAGE 1   


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

line level    source

   1          #include<reg52.h>
   2          /********************************************************************
   3          时间:2009年3月22日22:36:10
   4          ********************************************************************/
   5          #ifndef _DS1302_H_
   6          #define _DS1302_H_
   7          
   8          sbit DS1302_CLK = P3^0; //实时时钟时钟线引脚
   9          sbit DS1302_IO = P3^1; //实时时钟数据线引脚
  10          sbit DS1302_RST = P3^2; //实时时钟复位线引脚
  11          sbit ACC0 = ACC^0;
  12          sbit ACC7 = ACC^7;
  13          
  14          #define Time_24_Hour 0x00 //24时制控制 
  15          #define Time_Start   0x00 //开始走时
  16          #define Time_Stop   0x80 //停止走时
  17          
  18          #define DS1302_SECOND 0x80 //DS1302各寄存器操作命令定义
  19          #define DS1302_MINUTE 0x82
  20          #define DS1302_HOUR   0x84
  21          #define DS1302_WEEK   0x8A
  22          #define DS1302_DAY   0x86
  23          #define DS1302_MONTH 0x88
  24          #define DS1302_YEAR   0x8C
  25          #define DS1302_WRITE 0x8E
  26          #define DS1302_POWER 0x90
  27          
  28          #define BCD2DEC(X) (((X&0x70)>>4)*10 + (X&0x0F)) //用于将BCD码转成十进制的宏
  29          #define DEC2BCD(X) ((X/10)<<4 | (X%10))    //用于将十进制转成BCD码的宏
  30          
  31          typedef struct __SYSTEMTIME__   //定义的时间类型结构体,全部数为十进制
  32          {
  33          unsigned char Second;
  34          unsigned char Minute;
  35          unsigned char Hour;
  36          unsigned char Week;
  37          unsigned char Day;
  38          unsigned char Month;
  39          unsigned char Year;
  40          }SYSTEMTIME;
  41          
  42          //实时时钟写入一字节(内部函数)
  43          void DS1302InputByte(unsigned char d)
  44          {
  45   1          unsigned char i;
  46   1          ACC = d;
  47   1          for(i=8; i>0; i--)
  48   1          {
  49   2              DS1302_IO = ACC0;     //相当于汇编中的 RRC
  50   2              DS1302_CLK = 1;
  51   2              DS1302_CLK = 0;
  52   2              ACC = ACC >> 1;
  53   2          }
  54   1      }
  55          
C51 COMPILER V8.08   PART                                                                  06/11/2009 09:37:40 PAGE 2   

  56          //实时时钟读取一字节(内部函数)
  57          unsigned char DS1302OutputByte(void)
  58          {
  59   1          unsigned char i;
  60   1          for(i=8; i>0; i--)
  61   1          {
  62   2              ACC = ACC >>1;      //相当于汇编中的 RRC
  63   2              ACC7 = DS1302_IO;
  64   2              DS1302_CLK = 1;
  65   2              DS1302_CLK = 0;
  66   2          }
  67   1          return(ACC);
  68   1      }
  69          
  70          //写DS1302,ucAddr: DS1302地址, ucData: 要写的数据
  71          void Write1302(unsigned char ucAddr, unsigned char ucDa)
  72          {
  73   1          DS1302_RST = 0;
  74   1          DS1302_CLK = 0;
  75   1          DS1302_RST = 1;
  76   1          DS1302InputByte(ucAddr);       // 地址,命令
  77   1          DS1302InputByte(ucDa);       // 写1Byte数据
  78   1          DS1302_CLK = 1;
  79   1          DS1302_RST = 0;
  80   1      }
  81          
  82          //读取DS1302某地址的数据
  83          unsigned char Read1302(unsigned char ucAddr)
  84          {
  85   1          unsigned char ucData;
  86   1          DS1302_RST = 0;
  87   1          DS1302_CLK = 0;
  88   1          DS1302_RST = 1;
  89   1          DS1302InputByte(ucAddr|0x01);        // 地址,命令
  90   1          ucData = DS1302OutputByte();         // 读1Byte数据
  91   1          DS1302_CLK = 1;
  92   1          DS1302_RST = 0;
  93   1          return(ucData);
  94   1      }
  95          
  96          //读取时间函数
  97          void DS1302_GetTime(SYSTEMTIME *Time)
  98          {
  99   1      unsigned char ReadValue;
 100   1      ReadValue = Read1302(DS1302_SECOND);
 101   1      Time->Second = BCD2DEC(ReadValue&0x7F);
 102   1      
 103   1      ReadValue = Read1302(DS1302_MINUTE);
 104   1      Time->Minute = BCD2DEC(ReadValue);
 105   1      
 106   1      ReadValue = Read1302(DS1302_HOUR);
 107   1      Time->Hour = BCD2DEC(ReadValue&0x7F);
 108   1      
 109   1      ReadValue = Read1302(DS1302_DAY);
 110   1      Time->Day = BCD2DEC(ReadValue); 
 111   1      
 112   1      ReadValue = Read1302(DS1302_WEEK);
 113   1      Time->Week = BCD2DEC(ReadValue);
 114   1      
 115   1      ReadValue = Read1302(DS1302_MONTH); 
 116   1      Time->Month = BCD2DEC(ReadValue);
 117   1      
C51 COMPILER V8.08   PART                                                                  06/11/2009 09:37:40 PAGE 3   

 118   1      ReadValue = Read1302(DS1302_YEAR);
 119   1      Time->Year = BCD2DEC(ReadValue); 
 120   1      }
 121          
 122          //设置时间函数
 123          void DS1302_SetTime(SYSTEMTIME *Time)
 124          {
 125   1      Write1302(DS1302_WRITE,0x00);   //关闭写保护
 126   1      
 127   1      Write1302(DS1302_YEAR,DEC2BCD(Time->Year));
 128   1      Write1302(DS1302_MONTH,DEC2BCD(Time->Month));
 129   1      Write1302(DS1302_WEEK,DEC2BCD(Time->Week));
 130   1      Write1302(DS1302_DAY,DEC2BCD(Time->Day));
 131   1      Write1302(DS1302_HOUR,DEC2BCD(Time->Hour)|Time_24_Hour);
 132   1      Write1302(DS1302_MINUTE,DEC2BCD(Time->Minute));
 133   1      Write1302(DS1302_SECOND,DEC2BCD(Time->Second)|Time_Start);
 134   1      
 135   1      Write1302(DS1302_WRITE,0x80);   //打开写保护 
 136   1      }
 137          
 138          //初始化DS1302
 139          void DS1302_Initial(void)
 140          {
 141   1      Write1302(DS1302_WRITE,0x00);   //关闭写保护
 142   1      Write1302(DS1302_SECOND,Time_Stop);//停止计时
 143   1      Write1302(DS1302_HOUR,Time_24_Hour);//24时制
 144   1      Write1302(DS1302_POWER,0xA6);   //单二极管,4K电阻充电
 145   1      //   Write1302(DS1302_SECOND,DEC2BCD(Time_Start));
 146   1      Write1302(DS1302_WRITE,0x80);   //打开写保护
 147   1      }
 148          
 149          #endif


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