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

📄 rtc.lst

📁 单片机与时钟芯片ds1302接口程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   RTC                                                                   06/12/2007 17:35:07 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE RTC
OBJECT MODULE PLACED IN RTC.OBJ
COMPILER INVOKED BY: f:\Keil\C51\BIN\C51.EXE RTC.C BROWSE DEBUG OBJECTEXTEND TABS(2)

line level    source

   1          /*******************************************************************************
   2          *  标题:  蓝海微芯LJD-SY-5200单片机开发系统演示程序                            *
   3          *  文件:  RTC.C                                                                *
   4          *  日期:  2006-7-25                                                            *
   5          *  版本:  1.0                                                                  *
   6          *  作者:  蓝海微芯                                                             *
   7          *  网站: http://www.ljd-2008.com                                              *
   8          ********************************************************************************
   9          *  描述:                                                                       *
  10          *        通过8位数码管显示当前的时间包括时分秒,通过时间设置键可对当前的时间    *
  11          *      进行设置。共有两个设置按键按键1和按键2;按键1为选定键。按键1首次被      *
  12          *      按下时钟停止走时并且秒时间开始闪烁,此时可通过按键2对秒时间进行设置,   *
  13          *      按键2按下一次秒时间数值加一。当按键1第二次被按下时分时间被选中并不停    *
  14          *      地闪烁,此时通过按键2可对分时间进行设置,按键2按下一次分时间加一。      *
  15          *      按键第三次被按下时小时时间被选中并且不停的闪烁,此时通过按键2可对小     *
  16          *      时时间进行设置,按键2每按下一次小时时间加一。按键1第四次被按下后时间    *
  17          *      设置结束,时钟从设定的时间开始走时。                                    *     
  18          *                                                                              *
  19          *                                                                              *
  20          ********************************************************************************
  21          * 【版权】 Copyright(C)微芯科技 http://www.bluemcu.com    All Rights Reserved  *          
  22          * 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                  *
  23          *******************************************************************************/
  24          #include <reg52.h>
  25          #include<stdio.h>
  26          #include<absacc.h>
  27          #include<intrins.h>
  28          
  29          
  30          /*如果使用键盘中断请定义
  31          #define  USE_KEY  */
  32          
  33          #define  uchar  unsigned char
  34          #define  uint   unsigned int
  35          
  36          sbit     T_CLK      = P1^1;   /*实时时钟时钟线引脚 */
  37          sbit     T_IO       = P1^0;   /*实时时钟数据线引脚 */
  38          sbit     T_RST      = P1^4;   /*实时时钟复位线引脚 */
  39          
  40          sbit     P1_3       = P1^3;
  41          sbit     P1_5       = P1^5;
  42          sbit     ACC0       = ACC^0;
  43          sbit     ACC7       = ACC^7;
  44          
  45          uchar M;
  46          uchar N;
  47          uchar key_flag;
  48          
  49          /*void   RTInputByte(uchar);       /* 输入 1Byte */
  50          /*uchar  RTOutputByte(void);       /* 输出?1Byte */
  51          /*void   W1302(uchar, uchar);
  52          /*uchar  R1302(uchar);
  53          /*void   Set1302(uchar *);         /* 设置时间 */
  54          /*void   Get1302(uchar curtime[]); /* 读取1302当前时间 */
  55          uchar SClock[3];
C51 COMPILER V7.50   RTC                                                                   06/12/2007 17:35:07 PAGE 2   

  56          /********************************************************************
  57          函 数 名:RTInputByte()
  58          功    能:实时时钟写入一字节
  59          说    明:往DS1302写入1Byte数据 (内部函数)
  60          入口参数:d 写入的数据
  61          返 回 值:无  
  62          设    计:蓝海微芯          
  63          ***********************************************************************/
  64          void RTInputByte(uchar d)
  65          {
  66   1        uchar i;
  67   1        ACC = d;
  68   1        for(i=8; i>0; i--)
  69   1        {
  70   2          T_IO = ACC0;           /*相当于汇编中的 RRC */
  71   2          T_CLK = 1;
  72   2          T_CLK = 0;
  73   2          ACC = ACC >> 1;
  74   2        }
  75   1      }
  76          /********************************************************************
  77          函 数 名:RTOutputByte()
  78          功    能:实时时钟读取一字节
  79          说    明:从DS1302读取1Byte数据 (内部函数)
  80          入口参数:无  
  81          返 回 值:ACC
  82          设    计:蓝海微芯           
  83          ***********************************************************************/
  84          uchar RTOutputByte(void)
  85          {
  86   1        uchar i;
  87   1        for(i=8; i>0; i--)
  88   1        {
  89   2          ACC = ACC >>1;         /*相当于汇编中的 RRC */
  90   2          ACC7 = T_IO;
  91   2          T_CLK = 1;
  92   2          T_CLK = 0;
  93   2        }
  94   1        return(ACC);
  95   1      }
  96          /********************************************************************
  97          函 数 名:W1302()
  98          功    能:往DS1302写入数据
  99          说    明:先写地址,后写命令/数据 (内部函数)
 100          调    用:RTInputByte() , RTOutputByte()
 101          入口参数:ucAddr: DS1302地址, ucData: 要写的数据
 102          返 回 值:无
 103          设    计:蓝海微芯         
 104          ***********************************************************************/
 105          void W1302(uchar ucAddr, uchar ucDa)
 106          {
 107   1        T_RST = 0;
 108   1        T_CLK = 0;
 109   1        T_RST = 1;
 110   1        RTInputByte(ucAddr);       /* 地址,命令 */
 111   1        RTInputByte(ucDa);         /* 写1Byte数据*/
 112   1        T_CLK = 1;
 113   1        T_RST = 0;
 114   1      }
 115          /********************************************************************
 116          函 数 名:R1302()
 117          功    能:读取DS1302某地址的数据
C51 COMPILER V7.50   RTC                                                                   06/12/2007 17:35:07 PAGE 3   

 118          说    明:先写地址,后读命令/数据 (内部函数)
 119          调    用:RTInputByte() , RTOutputByte()
 120          入口参数:ucAddr: DS1302地址
 121          返 回 值:ucData :读取的数据
 122          设    计:蓝海微芯           
 123          ***********************************************************************/
 124          uchar R1302(uchar ucAddr)
 125          {
 126   1        uchar ucData;
 127   1        T_RST = 0;
 128   1        T_CLK = 0;
 129   1        T_RST = 1;
 130   1        RTInputByte(ucAddr);             /* 地址,命令 */
 131   1        ucData = RTOutputByte();         /* 读1Byte数据 */
 132   1        T_CLK = 1;
 133   1        T_RST = 0;
 134   1        return(ucData);
 135   1      }
 136          /********************************************************************
 137          函 数 名:Set1302()
 138          功    能:设置初始时间
 139          说    明:先写地址,后读命令/数据(寄存器多字节方式)
 140          调    用:W1302()
 141          入口参数:pClock: 设置时钟数据
 142          
 143          地址格式为: 秒 分 时 日 月 星期 年
 144          7Byte (BCD码)1B 1B 1B 1B 1B  1B  1B
 145          返 回 值:无
 146          设    计:蓝海微芯           
 147          ***********************************************************************/
 148          void Set1302(uchar *pClock)
 149          {
 150   1        uchar i;
 151   1        uchar ucAddr = 0x80;
 152   1        W1302(0x8e,0x00);           /* 控制命令,WP=0,写操作?*/
 153   1        for(i =3; i>0; i--)
 154   1        {
 155   2          W1302(ucAddr,*pClock);    /* 秒 分 时 日 月 星期 年 */
 156   2          pClock++;
 157   2          ucAddr +=2;
 158   2        }
 159   1        W1302(0x8e,0x80);           /* 控制命令,WP=1,写保护?*/
 160   1      }
 161          /********************************************************************
 162          函 数 名:Get1302()
 163          功    能:读取DS1302当前时间
 164          说    明:
 165          调    用:R1302()
 166          入口参数:ucCurtime: 保存当前时间地址。
 167          当前时间格式为: 秒 分 时 日 月 星期 年
 168          7Byte (BCD码)   1B 1B 1B 1B 1B  1B  1B
 169          返 回 值:无
 170          设    计:蓝海微芯           
 171          ***********************************************************************/
 172          void Get1302(uchar ucCurtime[])
 173          {
 174   1        uchar i;
 175   1        uchar ucAddr = 0x81;
 176   1        for (i=0; i<3; i++)
 177   1        {
 178   2          ucCurtime[i] = R1302(ucAddr); /*格式为: 秒 分 时 日 月 星期 年 */
 179   2          ucAddr += 2;
C51 COMPILER V7.50   RTC                                                                   06/12/2007 17:35:07 PAGE 4   

⌨️ 快捷键说明

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