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

📄 时钟ds1302lcd.lst

📁 单片机的实用程序代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.02b   蔩钟DS1302LCD                                                        02/25/2010 14:59:24 PAGE 1   


C51 COMPILER V7.02b, COMPILATION OF MODULE 蔩钟DS1302LCD
OBJECT MODULE PLACED IN 时钟DS1302LCD.OBJ
COMPILER INVOKED BY: D:\Progrom\Keil\C51\BIN\C51.EXE 时钟DS1302LCD.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /********************************************************************
   2          * 文件名  : 时钟DS1302.c
   3          * 描述    :  该文件实现用DS1302来实现日历和时钟功能,数码管上显示出来。
   4          * 创建人  : 东流,2009年4月10日
   5          * 版本号  : 2.0
   6          ***********************************************************************/
   7          #include<reg52.h>
   8          #include<intrins.h>
   9          
  10          #define uchar unsigned char
  11          #define uint  unsigned int
  12          
  13          uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  14          sbit ACC0 = ACC^0;
  15          sbit ACC7 = ACC^7;
  16          sbit P3_2 = P3^2;
  17          sbit P3_5 = P3^4;
  18          
  19          sbit T_CLK = P1^6; /*实时时钟时钟线引脚 */
  20          sbit T_IO = P3^5; /*实时时钟数据线引脚 */
  21          sbit T_RST = P1^7; /*实时时钟复位线引脚 */
  22          
  23          /********************************************************************
  24          * 名称 : delay()
  25          * 功能 : 延时,延时时间大概为140US。
  26          * 输入 : 无
  27          * 输出 : 无
  28          ***********************************************************************/
  29          
  30          void delay()
  31          {
  32   1              int i,j;
  33   1              for(i=0; i<=10; i++)
  34   1              for(j=0; j<=2; j++)
  35   1      ;
  36   1      }
  37          
  38          /********************************************************************
  39          * 名称 : Delay_1ms()
  40          * 功能 : 延时子程序,延时时间为 1ms * x
  41          * 输入 : x (延时一毫秒的个数)
  42          * 输出 : 无
  43          ***********************************************************************/
  44          void Delay_1ms(uint i)//1ms延时
  45          {
  46   1              uchar x,j;
  47   1              for(j=0;j<i;j++)
  48   1              for(x=0;x<=148;x++);    
  49   1      }
  50          
  51          /********************************************************************
  52          * 名称 :  v_RTInputByte()
  53          * 功能 :  往DS1302写入1Byte数据
  54          * 输入 :  ucDa 写入的数据
  55          * 输出 :  无
C51 COMPILER V7.02b   蔩钟DS1302LCD                                                        02/25/2010 14:59:24 PAGE 2   

  56          ***********************************************************************/
  57          void v_RTInputByte(uchar ucDa)
  58          {
  59   1              uchar i;
  60   1              ACC = ucDa;
  61   1              T_RST = 1;
  62   1              for(i=8; i>0; i--)
  63   1              {
  64   2                      T_IO = ACC0;
  65   2                      T_CLK = 1;
  66   2                      T_CLK = 0;
  67   2                      ACC = ACC >> 1;
  68   2              }
  69   1      }
  70          
  71          /********************************************************************
  72          * 名称  :   uc_RTOutputByte()
  73          * 功能  :   从DS1302读取1Byte数据
  74          * 输入  :       无
  75          * 返回值:   ACC
  76          ***********************************************************************/
  77          uchar uc_RTOutputByte(void) 
  78          {
  79   1              uchar i;
  80   1              T_RST = 1;
  81   1              for(i=8; i>0; i--)
  82   1              {
  83   2                      ACC = ACC >>1;
  84   2                      T_IO=1;
  85   2                      ACC7 = T_IO;
  86   2                      T_CLK = 1;
  87   2                      T_CLK = 0;
  88   2              }
  89   1              return(ACC);
  90   1      }
  91          
  92          /********************************************************************
  93          * 名称   :   v_W1302(uchar ucAddr, uchar ucDa)
  94          * 功能   :   往DS1302写入数据
  95          * 输入   :   ucAddr: DS1302地址, ucDa: 要写的数据
  96          * 返回值 :   无
  97          ***********************************************************************/
  98          void v_W1302(uchar ucAddr, uchar ucDa)
  99          {
 100   1              T_RST = 0;
 101   1              T_CLK = 0;
 102   1              T_RST = 1;
 103   1              v_RTInputByte(ucAddr);   // 写地址 
 104   1              _nop_();
 105   1              _nop_();
 106   1              v_RTInputByte(ucDa);     // 写1Byte数据
 107   1              T_CLK = 1;
 108   1              T_RST = 0;
 109   1      }
 110          
 111          /********************************************************************
 112          * 名称   :  uc_R1302(uchar ucAddr)
 113          * 功能   :  读取DS1302某地址的数据
 114          * 输入   :  ucAddr: DS1302地址
 115          * 返回值 :  ucDa :读取的数据
 116          ***********************************************************************/
 117          uchar uc_R1302(uchar ucAddr)
C51 COMPILER V7.02b   蔩钟DS1302LCD                                                        02/25/2010 14:59:24 PAGE 3   

 118          {
 119   1              uchar ucDa;
 120   1              T_RST = 0;
 121   1              T_CLK = 0;
 122   1              T_RST = 1;
 123   1              v_RTInputByte(ucAddr);    //写地址,命令
 124   1              _nop_();
 125   1              _nop_();
 126   1              ucDa = uc_RTOutputByte(); //读1Byte数据
 127   1              T_CLK = 1;
 128   1              T_RST = 0;
 129   1              return(ucDa);
 130   1      }
 131          
 132          /********************************************************************
 133          * 名称   :  v_BurstW1302T
 134          * 功能   :  往DS1302写入时钟数据(多字节方式)
 135          * 输入   :  pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制
 136          *                                                  8Byte (BCD码) 1B 1B 1B 1B 1B 1B  1B  1B
 137          * 返回值 :  无
 138          ***********************************************************************/
 139          void v_BurstW1302T(uchar *pSecDa)
 140          {
 141   1              uchar i;
 142   1              v_W1302(0x8e, 0x00);          //控制命令,WP=0,写操作
 143   1              T_RST = 0;
 144   1              T_CLK = 0;
 145   1              T_RST = 1;
 146   1              v_RTInputByte(0xbe);          //0xbe:时钟多字节写命令
 147   1              for(i=8; i>0; i--)            //8Byte = 7Byte 时钟数据 + 1Byte 控制
 148   1              {
 149   2                      v_RTInputByte(*pSecDa);   //写1Byte数据
 150   2                      pSecDa++;
 151   2              }
 152   1              T_CLK = 1;
 153   1              T_RST = 0;
 154   1      }
 155          
 156          /********************************************************************
 157          * 名称   :  v_BurstR1302T(uchar *pSecDa)
 158          * 功能   :  读取DS1302时钟数据
 159          * 输入   :  pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年
 160          *                                              7Byte (BCD码) 1B 1B 1B 1B 1B 1B   1B
 161          * 返回值 :  ucDa :读取的数据
 162          ***********************************************************************/
 163          void v_BurstR1302T(uchar *pSecDa)
 164          {
 165   1              uchar i;
 166   1              T_RST = 0;
 167   1              T_CLK = 0;
 168   1              T_RST = 1;
 169   1              v_RTInputByte(0xbf);               //0xbf:时钟多字节读命令
 170   1              for(i=8; i>0; i--)
 171   1              {
 172   2                      *pSecDa = uc_RTOutputByte();   //读1Byte数据
 173   2                      pSecDa++;
 174   2              }
 175   1              T_CLK = 1;
 176   1              T_RST = 0;
 177   1      }
 178          
 179          /********************************************************************
C51 COMPILER V7.02b   蔩钟DS1302LCD                                                        02/25/2010 14:59:24 PAGE 4   

 180          * 名称   :  v_BurstW1302R(uchar *pReDa)
 181          * 功能   :  往DS1302寄存器数写入数据(多字节方式)
 182          * 输入   :  pReDa: 寄存器数据地址
 183          * 返回值 :  无
 184          ***********************************************************************/
 185          void v_BurstW1302R(uchar *pReDa)
 186          {
 187   1              uchar i;
 188   1              v_W1302(0x8e,0x00);         //控制命令,WP=0,写操作
 189   1              T_RST = 0;
 190   1              T_CLK = 0;
 191   1              T_RST = 1;
 192   1              v_RTInputByte(0xfe);       //0xbe:时钟多字节写命令
 193   1              for(i=31; i>0; i--)        //31Byte 寄存器数据
 194   1              {
 195   2                      v_RTInputByte(*pReDa); //写1Byte数据

⌨️ 快捷键说明

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