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

📄 pcf8563.lst

📁 pcf8563 51单片机
💻 LST
字号:
C51 COMPILER V7.50   PCF8563                                                               02/21/2012 18:24:45 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE PCF8563
OBJECT MODULE PLACED IN pcf8563.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE pcf8563.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //以下是PCF8563.c文件的源程序
   2          #include "pcf8563.h"
   3          #include "iic.h"
   4          
   5          /*功能描述:向地址adr的寄存器写入多个字节
   6            隶属模块:PCF8563驱动模块
   7            函数属性:内部
   8            参数说明:addr:寄存器地址
   9                      length:要写入的字节数
  10                      pbuf:指向数据缓冲区的指针
  11            返回说明:操作结果,0表示成功,1表示失败*/
  12          
  13            
  14          unsigned char PCF8563_Write_Bytes(unsigned char addr,unsigned char length,unsigned char *pbuf)
  15          { unsigned char i=0;
  16   1        IIC_Start(); //IIC通讯开始
  17   1        if(IIC_Write_Byte(0xa2)) return 1;  //写入PCF8563的ID与读写控制位,通讯有错误立即返回
  18   1        if(IIC_Write_Byte(addr)) return 1;  //写寄存器地址
  19   1        for(i=0;i<length;i++)  //写入length个字节
  20   1        {
  21   2          if(IIC_Write_Byte(pbuf[i])) return 1;//将pbuf中的length个字节写入pcf8563的数据缓冲区
  22   2      
  23   2         }
  24   1       IIC_Stop();
  25   1       return 0;
  26   1      
  27   1      }
  28          
  29          /*功能描述:从地址addr的寄存器读取多个字节
  30            隶属模块:PCF8563驱动模块
  31            函数属性:内部:
  32            参数说明:addr:寄存器地址
  33                      length:要读出的字节数
  34                      pbuf:指向数据缓冲区的指针
  35            返回说明:操作结果,0表示成功,1表示失败*/
  36          unsigned char PCF8563_Read_Bytes(unsigned char addr,unsigned char length,unsigned char *pbuf )
  37          {
  38   1       unsigned char i=0,err=0;
  39   1       IIC_Start(); //IIC通讯开始
  40   1       if(IIC_Write_Byte(0xa2)) return 1;  //写入PCF8563的ID与读写控制位,通讯有错误立即返回
  41   1       if(IIC_Write_Byte(addr)) return 1;  //写寄存器地址
  42   1       
  43   1       IIC_Start();
  44   1       if(IIC_Write_Byte(0xa3)) return 1; //前length-1个字节,每读完一个字节要向PCF8563提供ACK,即告诉其继续提供
             -下面的数据,读取操作还未完毕 
  45   1      
  46   1         for(i=0;i<length-1;i++)
  47   1         { pbuf[i]=IIC_Read_Byte();
  48   2           IIC_Ack();
  49   2      
  50   2         }
  51   1        pbuf[i]=IIC_Read_Byte(); //读取最后一个字节,即第length个字节 
  52   1        IIC_NAck();  //读取最后一个字节后,要向PCF8563提NACK,告诉其读取操作结束,不再向下读了 
  53   1        IIC_Stop();
  54   1        return 0;
C51 COMPILER V7.50   PCF8563                                                               02/21/2012 18:24:45 PAGE 2   

  55   1      
  56   1      }    
  57          
  58          
  59          /* 功能描述:将BCD码装换为十进制的数值
  60             隶属模块:PCF8563驱动模块
  61             函数属性:内部
  62             参数说明:x:待转换的BCD码字节
  63             返回说明:转换后的值
  64             注:将BCD格式数据转换为十进制的值,如29的BCD格式为0x29   */
  65          
  66          unsigned char BCD2Val(unsigned char x)
  67          {
  68   1       return (x>>4)*10+(x&0x0f);//高四位乘以10,再加上低四位
  69   1      }
  70          
  71          
  72          /*功能描述:将十进制数值转换为BCD码
  73             隶属模块:PCF8563驱动模块*/
  74            // 函数属性:内部
  75           //  参数说明:x:待转换的数值
  76            // 转换说明:转换后的值
  77            // 注: 将值转为BCD格式,如23转为BCD格式为0x23 */
  78          
  79           unsigned char Val2BCD(unsigned char x)
  80          {
  81   1        return (x/10)*16+(x%10); //将十进制的数值十位乘以16,再 
  82   1      }
  83          
  84          
  85          
  86          
  87          
  88          /* 功能描述:读取时间
  89             隶属模块:PCF8563驱动模块
  90             函数属性:外部,供用户使用
  91             参数说明:无
  92             返回说明:操作结果,0表示成功,1表示失败
  93             注:从PCF8563中读到的时间值,被装载到全局的外部结构体 */
  94          unsigned char P8563_Read_Time()
  95          {
  96   1       unsigned char temp[7];
  97   1       if(!PCF8563_Read_Bytes(0x02,7,temp))   //读取时间,即读取秒 分 时 日 星期 月 年
  98   1       {  //以下对读取到temp的数组中的时间数据进行截取
  99   2          // 并转换为十进制数值写入到temp中去
 100   2        time.second=BCD2Val(temp[0]&0x7f);  //秒
 101   2        time.minute=BCD2Val(temp[1]&0x7f);
 102   2        time.hour  =BCD2Val(temp[2]&0x3f);
 103   2        time.day   =BCD2Val(temp[3]&0x3f);
 104   2        time.week  =BCD2Val(temp[4]&0x07);
 105   2        time.month =BCD2Val(temp[5]&0x1f);
 106   2        time.year  =BCD2Val(temp[6]);
 107   2        return 0;
 108   2      
 109   2       } 
 110   1       else 
 111   1       return 1;
 112   1      
 113   1      }
 114          
 115          
 116          
C51 COMPILER V7.50   PCF8563                                                               02/21/2012 18:24:45 PAGE 3   

 117          
 118          
 119          
 120          
 121          /*功能描述:设置时间
 122            隶属模块:PCF8563驱动模块
 123            函数属性:外部,供用户使用
 124            参数说明:无
 125            返回说明:操作结果,0表示成功,1表示失败
 126            注:在设置时间前先将时间数据填充到time中去,随后调用此函数,时间
 127                数据即被写入到PCF8563中,并以新设置的时间继续走时 */
 128          
 129          unsigned char P8563_Set_Time()
 130          {
 131   1        unsigned char temp[7];
 132   1        unsigned char i;
 133   1        for(i=0;i<7;i++)
 134   1        {
 135   2        temp[i]=Val2BCD(((unsigned char *)(&time))[i]);
 136   2        }
 137   1      
 138   1      return PCF8563_Write_Bytes(0x02,7,temp);
 139   1      
 140   1      }
 141          
 142          /* 功能描述:设置倒计时寄存器
 143             隶属模块:PCF8563驱动模块
 144             返回说明:0表示成功,1表示失败
 145             注:先将要写入到倒计时寄存器的数据装入全局变量外部结构体变量dcounter中
 146                 随后调用此函数将数据写入 */
 147           unsigned char P8563_Set_DownCounter()
 148          {
 149   1       return PCF8563_Write_Bytes(0x0e,2,(unsigned char *)&dcounter);
 150   1      
 151   1      }
 152          
 153          /* 功能描述:读取倒计时寄存器
 154             隶属模块:PCF8563驱动模块
 155             返回说明:操作结果,0表示成功,1表示失败
 156             注:将倒计时寄存器的值读回到dcounter中 */
 157          unsigned char P8563_Read_DownCounter()
 158          {
 159   1       return PCF8563_Read_Bytes(0x0e,2,(unsigned char *)&dcounter);
 160   1      
 161   1      }


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