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

📄 1302.lst

📁 单片机与时钟芯片ds1302接口程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   1302                                                                  11/20/2007 23:46:12 PAGE 1   


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

line level    source

   1          /*********************************************************************
   2          
   3           公司名称:
   4           模块名称:DS1302.c
   5           功    能:实时时钟模块           时钟芯片型号:DS1302 
   6           说    明:
   7           程序设计:zhaojunjie        
   8           设计时间:2002.03.02        
   9           版 本 号: 20020302
  10          *********************************************************************/
  11          //#include <jyh.h>
  12          #include <intrins.h>
  13          #include "me.h"
  14          #include "LCD1602.h"
  15          unsigned char code ASCII[] ="0123456789ABCDEF";
  16          #define uchar unsigned char
  17          unsigned int XMS;
  18          //sbit     T_CLK      = P2^7;   /*实时时钟时钟线引脚 */
  19          //sbit     T_IO       = P1^4;   /*实时时钟数据线引脚 */
  20          //sbit     T_RST      = P1^5;   /*实时时钟复位线引脚 */
  21          sbit     T_CLK      = P1^2;   /*实时时钟时钟线引脚 */
  22          sbit     T_IO       = P1^3;   /*实时时钟数据线引脚 */
  23          sbit     T_RST      = P3^5;   /*实时时钟复位线引脚 */
  24          
  25          sbit  ACC0 = ACC^0;
  26          sbit  ACC7 = ACC^7;
  27          
  28          //此处定义数码管各段位置
  29          #define a   0x01                //D7
  30          #define b   0x02                //D6
  31          #define c       0x04            //D4
  32          #define d   0x08                //D3
  33          #define e   0x10                //D2
  34          #define f         0x20          //D0
  35          #define g               0x40            //D1
  36          #define dot 0x80                //D5
  37          //////////////////////////////
  38          
  39          //        ~(a+b+c+d+e+f),    // 共阳极
  40          //        (a+b+c+d+e+f),    // 共阴极
  41          //定义特殊符号
  42          //数码管显示时用的编码
  43          unsigned char code seg[] = 
  44          {
  45                  ~(a+b+c+d+e+f),        // 0
  46                  ~(b+c),                // 1
  47                  ~(a+b+d+e+g),          // 2
  48                  ~(a+b+c+d+g),          // 3
  49                  ~(b+c+f+g),            // 4
  50                  ~(a+c+d+f+g),          // 5
  51                  ~(a+c+d+e+f+g),        // 6
  52                  ~(a+b+c),                                               // 7
  53                  ~(a+b+c+d+e+f+g),      // 8
  54                  ~(a+b+c+d+f+g),        // 9
  55                  ~(a+b+c+e+f+g),        //A
C51 COMPILER V7.50   1302                                                                  11/20/2007 23:46:12 PAGE 2   

  56                  ~(c+d+e+f+g),          //b
  57                  ~(a+d+e+f),            //C
  58                  ~(b+c+d+e+g),          //d
  59                  ~(a+d+e+f+g),          //E
  60                  ~(a+e+f+g)             //F
  61          };
  62          char dispbuf[16]={0,1,2,3,4,5};
  63          char low[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
  64          unsigned char stacode=0; //进入设置位数状态
  65          void   RTInputByte(uchar);       /* 输入 1Byte */
  66          uchar  RTOutputByte(void);       /* 输出?1Byte */
  67          void   W1302(uchar, uchar);
  68          uchar  R1302(uchar);
  69          void   Set1302(uchar *);         /* 设置时间 */
  70          void   Bcd2asc(uchar,uchar *);
  71          void   Get1302(uchar curtime[]); /* 读取1302当前时间 */
  72          
  73          /******************************************************************** 
  74          
  75           函 数 名:RTInputByte()
  76           功    能:实时时钟写入一字节
  77           说    明:往DS1302写入1Byte数据 (内部函数)
  78           入口参数:d 写入的数据 
  79           返 回 值:无  
  80           设    计:zhaojunjie           日    期:2002-03-19
  81           修    改:                     日    期: 
  82          ***********************************************************************/
  83          void RTInputByte(uchar dat) 
  84          { 
  85   1          uchar i;
  86   1          ACC = dat;
  87   1          for(i=8; i>0; i--)
  88   1          {
  89   2              T_IO = ACC0;           /*相当于汇编中的 RRC */
  90   2              T_CLK = 1;
  91   2              T_CLK = 0;
  92   2              ACC = ACC >> 1; 
  93   2          } 
  94   1      }
  95          /******************************************************************** 
  96          
  97           函 数 名:RTOutputByte()
  98           功    能:实时时钟读取一字节
  99           说    明:从DS1302读取1Byte数据 (内部函数)
 100           入口参数:无  
 101           返 回 值:ACC
 102           设    计:zhaojunjie           日    期:2002-03-19
 103           修    改:                     日    期: 
 104          ***********************************************************************/
 105          uchar RTOutputByte(void) 
 106          { 
 107   1          uchar i;
 108   1          for(i=8; i>0; i--)
 109   1          {
 110   2              ACC = ACC >>1;         /*相当于汇编中的 RRC */
 111   2              ACC7 = T_IO;
 112   2              T_CLK = 1;
 113   2              T_CLK = 0;
 114   2          } 
 115   1          return(ACC); 
 116   1      }
 117          /******************************************************************** 
C51 COMPILER V7.50   1302                                                                  11/20/2007 23:46:12 PAGE 3   

 118          
 119           函 数 名:W1302()
 120           功    能:往DS1302写入数据
 121           说    明:先写地址,后写命令/数据 (内部函数)
 122           调    用:RTInputByte() , RTOutputByte()
 123           入口参数:ucAddr: DS1302地址, ucData: 要写的数据
 124           返 回 值:无
 125           设    计:zhaojunjie           日    期:2002-03-19
 126           修    改:                     日    期: 
 127          ***********************************************************************/
 128          void W1302(uchar ucAddr, uchar ucDa)
 129          {
 130   1          T_RST = 0;
 131   1          T_CLK = 0;
 132   1          T_RST = 1;
 133   1          RTInputByte(ucAddr);       /* 地址,命令 */
 134   1          RTInputByte(ucDa);       /* 写1Byte数据*/
 135   1          T_CLK = 1;
 136   1          T_RST = 0;
 137   1      } 
 138          /******************************************************************** 
 139          
 140           函 数 名:R1302()
 141           功    能:读取DS1302某地址的数据
 142           说    明:先写地址,后读命令/数据 (内部函数)
 143           调    用:RTInputByte() , RTOutputByte()
 144           入口参数:ucAddr: DS1302地址
 145           返 回 值:ucData :读取的数据
 146           设    计:zhaojunjie           日    期:2002-03-19
 147           修    改:                     日    期: 
 148          ***********************************************************************/
 149          uchar R1302(uchar ucAddr)
 150          {
 151   1          uchar ucData;
 152   1          T_RST = 0;
 153   1          T_CLK = 0;
 154   1          T_RST = 1;
 155   1          RTInputByte(ucAddr);             /* 地址,命令 */
 156   1          ucData = RTOutputByte();         /* 读1Byte数据 */
 157   1          T_CLK = 1;
 158   1          T_RST = 0;
 159   1          return(ucData);
 160   1      }
 161          /******************************************************************** 
 162          
 163           函 数 名:BurstW1302T()
 164           功    能:往DS1302写入时钟数据(多字节方式)
 165           说    明:先写地址,后写命令/数据
 166           调    用:RTInputByte() 
 167           入口参数:pWClock: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制
 168                                      8Byte (BCD码)1B 1B 1B 1B 1B  1B  1B 1B
 169           返 回 值:无
 170           设    计:zhaojunjie           日    期:2002-03-19
 171           修    改:                     日    期: 
 172          ***********************************************************************/
 173          void BurstW1302T(uchar *pWClock)
 174          {
 175   1          uchar i;
 176   1          W1302(0x8e,0x00);         /* 控制命令,WP=0,写操作?*/
 177   1          T_RST = 0;
 178   1          T_CLK = 0;
 179   1          T_RST = 1;
C51 COMPILER V7.50   1302                                                                  11/20/2007 23:46:12 PAGE 4   

 180   1          RTInputByte(0xbe);        /* 0xbe:时钟多字节写命令 */
 181   1          for (i = 8; i>0; i--)     /*8Byte = 7Byte 时钟数据 + 1Byte 控制*/
 182   1          {
 183   2              RTInputByte(*pWClock); /* 写1Byte数据*/
 184   2              pWClock++;
 185   2          }
 186   1          T_CLK = 1;
 187   1          T_RST = 0;
 188   1      } 
 189          /******************************************************************** 
 190          
 191           函 数 名:BurstR1302T()
 192           功    能:读取DS1302时钟数据
 193           说    明:先写地址/命令,后读数据(时钟多字节方式)
 194           调    用:RTInputByte() , RTOutputByte()
 195           入口参数:pRClock: 读取时钟数据地址 格式为: 秒 分 时 日 月 星期 年
 196                                         7Byte (BCD码)1B 1B 1B 1B 1B  1B  1B
 197           返 回 值:无
 198           设    计:zhaojunjie           日    期:2002-03-19
 199           修    改:                     日    期: 
 200          ***********************************************************************/
 201          void BurstR1302T(uchar *pRClock)
 202          {
 203   1          uchar i;
 204   1          char j;
 205   1          T_RST = 0;
 206   1          T_CLK = 0;
 207   1          T_RST = 1;
 208   1          RTInputByte(0xbf);             /* 0xbf:时钟多字节读命令 */
 209   1          for (i=8; i>0; i--) 
 210   1          {
 211   2             j = RTOutputByte();   /* 读1Byte数据 */
 212   2      //                              if (j>=0)
 213   2             *pRClock =j;   /* 读1Byte数据 */
 214   2             pRClock++;
 215   2          }
 216   1          T_CLK = 1;
 217   1          T_RST = 0;
 218   1      }
 219          /******************************************************************** 
 220          
 221           函 数 名:BurstW1302R()
 222           功    能:往DS1302寄存器数写入数据(多字节方式)
 223           说    明:先写地址,后写数据(寄存器多字节方式)
 224           调    用:RTInputByte()
 225           入口参数:pWReg: 寄存器数据地址
 226           返 回 值:无
 227           设    计:zhaojunjie           日    期:2002-03-19
 228           修    改:                     日    期: 
 229          ***********************************************************************/

⌨️ 快捷键说明

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