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

📄 ds1302.lst

📁 Keil C51完整的128X64LCD显示的电子打铃仪代码,内含DS1302X5045等操作代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   DS1302                                                                06/10/2006 08:26:02 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN DS1302.OBJ
COMPILER INVOKED BY: D:\ExpertTools\Keil\C51\BIN\C51.EXE DS1302.C OPTIMIZE(5,SPEED) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*********************************************************************
   2           *Description:                 Real Time Clock Module For IC DS1302
   3           *File Name:                    DS1302.C
   4           *Use Compile Lanague:  KEIL C51
   5           *Version :                     V1.0
   6           *Code Author:                 zhouhuanxi
   7           *Date:                                 2005-01-19
   8           CopyRight(C)                   2005 --  SHENZHEN XINSANWEI Machine&Electronics CO.,LTD.
   9          *********************************************************************/
  10          
  11          //==== FILE Include And Macro Declare Segment=====
  12          
  13          #include        "Config.H"
  14          
  15          code uint8 monthday[]={0x31,0x29,0x31,0x30,0x31,0x30,0x31,0x31,0x30,0x31,0x30,0x31};
  16          //Define DS1302 Operate IO Pin
  17          sbit IO         =        P3^6;
  18          sbit SCLK       =        P3^5;
  19          sbit RSTB       =        P3^7;
  20          
  21          /******************************************************************** 
  22          *
  23          * 名称: DS1302_InputByte
  24          * 说明: 
  25          * 功能: 往DS1302写入1Byte数据
  26          * 调用:
  27          * 输入: ucDa 写入的数据 
  28          * 返回值: 无
  29          ***********************************************************************/
  30          void DS1302_InputByte(uint8 ucDa) 
  31          { 
  32   1              uint8 i;
  33   1              
  34   1              for(i=8; i>0; i--)
  35   1              {
  36   2                      if((ucDa&0x01)==0x01)
  37   2                              IO=1;
  38   2                      else
  39   2                              IO=0;
  40   2      
  41   2                      SCLK = 1;
  42   2                      _NOP_();
  43   2                      SCLK = 0;
  44   2                      ucDa = ucDa >> 1; 
  45   2              } 
  46   1      }
  47          
  48          /******************************************************************** 
  49          *
  50          * 名称: uint8 DS1302_OutputByte
  51          * 说明: 
  52          * 功能: 从DS1302读取1Byte数据
  53          * 调用: 
  54          * 输入: 
  55          * 返回值: ACC
C51 COMPILER V7.50   DS1302                                                                06/10/2006 08:26:02 PAGE 2   

  56          ***********************************************************************/
  57          uint8 DS1302_OutputByte(void) 
  58          { 
  59   1              uint8 i,ucDB=0x00;
  60   1              CY      =       0;
  61   1              for(i=8; i>0; i--)
  62   1              {
  63   2                      ucDB=ucDB>>1;
  64   2                      if (IO)
  65   2                              ucDB=ucDB|0x80;
  66   2                      SCLK = 1;
  67   2                      _NOP_();
  68   2                      SCLK = 0;
  69   2              } 
  70   1              return(ucDB); 
  71   1      }
  72          
  73          /******************************************************************** 
  74          * 名称: v_W1302
  75          * 说明: 先写地址,后写命令/数据
  76          * 功能: 往DS1302写入数据
  77          * 调用: DS1302_InputByte() 
  78          * 输入: ucAddr: DS1302地址, ucDa: 要写的数据
  79          * 返回值: 无
  80          ***********************************************************************/
  81          void W_ByteToDS1302(uint8 ucAddr, uint8 ucDa)
  82          {
  83   1              RSTB = 0;
  84   1              SCLK = 0;
  85   1              RSTB = 1;
  86   1              DS1302_InputByte(ucAddr); /* 地址,命令 */
  87   1              DS1302_InputByte(ucDa); /* 写1Byte数据*/
  88   1              SCLK = 1;
  89   1              RSTB =0;
  90   1      } 
  91          
  92          /******************************************************************** 
  93          * 名称: RD_ByteFromDS1302
  94          * 说明: 先写地址,后读命令/数据
  95          * 功能: 读取DS1302某地址的数据
  96          * 调用: DS1302_InputByte() , DS1302_OutputByte()
  97          * 输入: ucAddr: DS1302地址
  98          * 返回值: ucDa :读取的数据
  99          ***********************************************************************/
 100          uint8 RD_ByteFromDS1302(uint8 ucAddr)
 101          {
 102   1              uint8 ucDa;
 103   1              RSTB = 0;
 104   1              SCLK = 0;
 105   1              RSTB = 1;
 106   1              DS1302_InputByte(ucAddr); /* 地址,命令 */
 107   1              ucDa = DS1302_OutputByte(); /* 读1Byte数据 */
 108   1              SCLK = 1;
 109   1              RSTB =0;
 110   1              return(ucDa);
 111   1      }
 112          
 113          #ifdef MY_USE
              /******************************************************************** 
              *
              * 名称: DS1302_REG_Burst_WR
              * 说明: 先写地址,后写数据(时钟多字节方式)
C51 COMPILER V7.50   DS1302                                                                06/10/2006 08:26:02 PAGE 3   

              * 功能: 往DS1302写入时钟数据(多字节方式)
              * 调用: DS1302_InputByte() 
              * 输入: pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制
              * 8Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B 1B
              * 返回值: 无
              ***********************************************************************/
              void DS1302_REG_Burst_WR(uint8 *pSecDa)
              {
                      uint8 i;
              
                      W_ByteToDS1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
                      RSTB = 0;
                      SCLK = 0;
                      RSTB = 1;
                      DS1302_InputByte(0xbe); /* 0xbe:时钟多字节写命令 */
                      for (i=8;i>0;i--) /*8Byte = 7Byte 时钟数据 + 1Byte 控制*/
                      {
                              DS1302_InputByte(*pSecDa);/* 写1Byte数据*/
                              pSecDa++;
                      }
                      SCLK = 1;
                      RSTB =0;
              } 
              
              /******************************************************************** 
              *
              * 名称: DS1302_REG_Burst_RD
              * 说明: 先写地址,后读命令/数据(时钟多字节方式)
              * 功能: 读取DS1302时钟数据
              * 调用: DS1302_InputByte() , DS1302_OutputByte()
              * 输入: pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 
              * 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
              * 返回值: ucDa :读取的数据
              ***********************************************************************/
              void DS1302_REG_Burst_RD(uint8 *pSecDa)
              {
                      uint8 i;
              
                      RSTB = 0;
                      SCLK = 0;
                      RSTB = 1;
                      DS1302_InputByte(0xbf); /* 0xbf:时钟多字节读命令 */
                      for (i=8; i>0; i--) 
                      {
                              *pSecDa = DS1302_OutputByte(); /* 读1Byte数据 */
                              pSecDa++;
                      }
                      SCLK = 1;
                      RSTB =0;
              }
              
              /******************************************************************** 
              *
              * 名称: DS1302_RAM_Burst_WR
              * 说明: 先写地址,后写数据(寄存器多字节方式)
              * 功能: 往DS1302寄存器数写入数据(多字节方式)
              * 调用: DS1302_InputByte() 
              * 输入: pReDa: 寄存器数据地址
              * 返回值: 无
              ***********************************************************************/
              void DS1302_RAM_Burst_WR(uint8 *pReDa)
              {
C51 COMPILER V7.50   DS1302                                                                06/10/2006 08:26:02 PAGE 4   

                      uint8 i;
              
                      W_ByteToDS1302(0x8e,0x00); // 控制命令,WP=0,写操作?
                      RSTB = 0;
                      SCLK = 0;
                      RSTB = 1;
                      DS1302_InputByte(0xfe); // 0xbe:时钟多字节写命令
                      for (i=31;i>0;i--) //31Byte 寄存器数据 
                      {
                              DS1302_InputByte(*pReDa); // 写1Byte数据
                              pReDa++;
                      }
                      SCLK = 1;
                      RSTB =0;
              } 
              
              /******************************************************************** 
              *
              * 名称: DS1302_RAM_Burst_RD
              * 说明: 先写地址,后读命令/数据(寄存器多字节方式)
              * 功能: 读取DS1302寄存器数据
              * 调用: DS1302_InputByte() , DS1302_OutputByte()
              * 输入: pReDa: 寄存器数据地址
              * 返回值: 无
              ***********************************************************************/

⌨️ 快捷键说明

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