搜索
bottom↓
回复: 45

PCF8563 的头文件做好了!有需要的来看看啊!呵呵

[复制链接]

出0入0汤圆

发表于 2006-8-13 14:49:26 | 显示全部楼层 |阅读模式
PCF8563 的头文件做好了!感谢hanwl提供资料!

拿出来和大家共享一下!只需修改前面的宏定义就可以了!

只需调用GetPCF8563();函数就可以了,出口参数:年月日时分秒了,呵呵!



/************************************************************************

//ICC-AVR application builder : 2006-8-10 下午 02:12:10   // Target : M16

// Crystal: 8Mhz

时钟芯片PCF8563头文件

************************************************************************/

#define SDA_SET PORTC|=BIT(1);           //时钟芯片数据接口PC1

#define SDA_CLR PORTC&=~BIT(1);

#define CLK_SET PORTC|=BIT(0);           //时钟芯片时钟接口PC0

#define CLK_CLR PORTC&=~BIT(0);

#define SDA_DI_SET DDRC|=BIT(1);

#define SDA_DI_CLR DDRC&=~BIT(1);

#define CLK_DI_SET DDRC|=BIT(0);

#define CLK_DI_CLR DDRC&=~BIT(0);

#define CHECK_SDA  PINC&BIT(1)

unsigned char miao,fen,shi,tian,yue,nian;

unsigned char old_sec,new_sec;

void I2C_Start (void)      

{

         SDA_DI_SET;

         CLK_DI_SET;              

         CLK_SET;                        

         SDA_SET;                          

         delay_nus(2);       

         SDA_CLR;                           

         delay_nus(2);

         SDA_SET;

}

void I2C_Stop (void)         

{

        SDA_DI_SET;

        CLK_DI_SET;               

        SDA_CLR;                        

        CLK_SET;            

        delay_nus(2);

        SDA_SET;                       

        delay_nus(2);

}

unsigned char I2C_Ackn(void)

{

        unsigned char errtime=255;

        CLK_DI_SET;

        SDA_DI_CLR;                         

        delay_nus(2);         

        while(CHECK_SDA)

           {

                 errtime--;

                  if (!errtime)                        

                      {

                      I2C_Stop();

                          return 0x00;

                     }

            }  

        CLK_SET;

        delay_nus(2);

        CLK_CLR;            

        delay_nus(2);

        return 0x01;                               

}

void Write_I2C_Byte(unsigned char byte)   

{

        unsigned char i;

        SDA_DI_SET;

        CLK_DI_SET;                                                  

        for (i = 0; i < 8; i++)                     

     {         

                  CLK_CLR;                               

              if((byte & 0x80))

                    {

                              SDA_SET;

                    }                     

                  else

                         {

                                  SDA_CLR;

                        }                                 

                  delay_nus(2);

                    CLK_SET;                               

             asm("nop");       

                 byte = byte << 1;                                         

         }

        CLK_CLR;                                  

        if (I2C_Ackn()==0) delay_nus(5);               

        CLK_CLR;

}

unsigned char Read_I2C_Byte(void)

{       

        unsigned char i,buff = 0;

        delay_nus(2);

        CLK_DI_SET;;                                

        SDA_DI_CLR;                           

        for (i = 0; i < 8; i++)

                   {

                  CLK_CLR;              

                   delay_nus(2);

               CLK_SET;            

                    delay_nus(2);

                    if ( CHECK_SDA) buff++;

                   buff = (buff << 1);

                    delay_nus(2);

                  }

        SDA_DI_SET;

        CLK_DI_SET;                              

        SDA_CLR;

        delay_nus(2);

        CLK_SET;

        delay_nus(2);

        CLK_CLR;           

        return buff;                       

}

unsigned char rtc_read(unsigned char address)

{

        unsigned char d;

        I2C_Start();

        Write_I2C_Byte(0xa2);

        Write_I2C_Byte(address);

        I2C_Start();

        Write_I2C_Byte(0xa3);

        d=Read_I2C_Byte();

        d=d>>1;

        I2C_Stop();

        return d;

}

void rtc_write(unsigned char address,unsigned char data1)

{

          I2C_Start();

          Write_I2C_Byte(0xa2);

          Write_I2C_Byte(address);

          Write_I2C_Byte(data1);

          I2C_Stop();

}

void rtc_start(void)

{

rtc_write(0,0);

}

void rtc_stop(void)

{

rtc_write(0,0x20);

}

void SetPCF8563(unsigned char adds,unsigned char data)

{

CLI();

rtc_stop();

rtc_write(adds,data);

rtc_start();

SEI();

}

void set8563(void)        //设置时间!

{                         //这里就自己弄吧!我就偷懒了,呵呵!

  SetPCF8563(8,0x06);     //设置年

  SetPCF8563(7,0x08);     //设置月

  SetPCF8563(5,0x09);     //设置日

  SetPCF8563(4,0x23);     //设置时

  SetPCF8563(3,0x59);     //设置分

  SetPCF8563(2,0x49);     //设置秒

}

void GetPCF8563()             //只需调用这个函数就可以了!(设置时间除外哦!)

{

  CLI();                      // 出口参数就是这些了

  miao=(rtc_read(2)&0x7f);    //秒             

  fen=(rtc_read(3)&0x7f);     //分             

  shi=(rtc_read(4)&0x3f);     //时     

  tian=(rtc_read(5)&0x3f);        

  yue=(rtc_read(7)&0x1f);           

  nian=(rtc_read(8));         //年   

  SEI();

}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2006-8-13 15:20:05 | 显示全部楼层
不好意思,延时子程序给忘了贴了,

//delay.h

/*-----------------------------------------------------------------------

延时函数

系统时钟:8M

-----------------------------------------------------------------------*/

void delay_1us(void)                 //1us延时函数

  {

   asm("nop");

  }



void delay_nus(unsigned int n)       //N us延时函数

  {

   unsigned int i=0;

   for (i=0;i<n;i++)

   delay_1us();

  }

  

void delay_1ms(void)                 //1ms延时函数

  {

   unsigned int i;

   for (i=0;i<1140;i++);

  }

  

void delay_nms(unsigned int n)       //N ms延时函数

  {

   unsigned int i=0;

   for (i=0;i<n;i++)

   delay_1ms();

  }

出0入0汤圆

发表于 2006-8-13 15:21:01 | 显示全部楼层
支持!谢谢 我正在学习这些外围器件使用

thank you very much!

出0入0汤圆

 楼主| 发表于 2006-8-13 18:30:02 | 显示全部楼层
客气什么啊!大家多交流嘛!

出0入0汤圆

发表于 2006-8-13 21:49:55 | 显示全部楼层
使用软件模拟IIC吗?

为什么不用AVR的硬件IIC呢,可能硬件的更好吧

?

出0入0汤圆

 楼主| 发表于 2006-8-13 22:18:44 | 显示全部楼层
呵呵,正准备换成TWI呢!今天是没有时间了,改天吧!

出0入0汤圆

 楼主| 发表于 2006-8-15 13:41:48 | 显示全部楼层
TWI 的程序来喽!

出0入0汤圆

发表于 2006-8-15 17:02:58 | 显示全部楼层
为什么不用AVR的硬件IIC呢????

出0入0汤圆

发表于 2006-12-10 14:37:12 | 显示全部楼层
请问LZ,如果改了频率为16M,程序里面有什么地方需要改吗?单片机的外部时钟晶振对8563有影响吗

出0入0汤圆

发表于 2006-12-13 15:27:15 | 显示全部楼层
在网上找了一个下5,只发现了这个程序只改一点点就能用,5分钟前把程序头改了一下,能用。很好。特来道谢!这个程序序昨天我搞了一天,水平有线。没搞定

出0入0汤圆

发表于 2006-12-26 13:59:23 | 显示全部楼层
怎么我用这个头文件用不了,调用总是返回GETPCF8563中的相与值0x7f,0x7f,0x37..?

请问各位是什么原因??

出0入0汤圆

发表于 2009-6-19 22:33:05 | 显示全部楼层
学习一下

出0入0汤圆

发表于 2009-6-19 22:39:22 | 显示全部楼层
俺也用这个芯片.一直正常

出0入0汤圆

发表于 2009-6-19 22:41:24 | 显示全部楼层
TWI一点都不觉得好用,配置复杂
IO口固定
没ARM的专用硬件方便,I2C和SPI都是专用的,速度快,而且IO可配置,灵活的硬件使用

出0入0汤圆

发表于 2010-2-19 18:19:55 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-2-19 19:27:54 | 显示全部楼层
学习一下

出0入0汤圆

发表于 2010-5-4 21:37:25 | 显示全部楼层
mark。

出0入0汤圆

发表于 2010-5-10 16:43:15 | 显示全部楼层
学习了!!!!!!!!

出0入0汤圆

发表于 2010-6-18 09:24:36 | 显示全部楼层
顶!

出0入0汤圆

发表于 2010-8-24 11:58:22 | 显示全部楼层
mARK

出0入0汤圆

发表于 2010-8-25 15:08:22 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-9-12 22:32:21 | 显示全部楼层
谢谢!

出0入0汤圆

发表于 2011-1-15 23:42:16 | 显示全部楼层
学习

出0入0汤圆

发表于 2011-1-16 00:14:47 | 显示全部楼层
mark

出0入42汤圆

发表于 2011-1-16 00:50:47 | 显示全部楼层
h和c不区分的典型情况。。。多个文件中调用该驱动就不方便了

出0入0汤圆

发表于 2011-1-18 16:15:52 | 显示全部楼层
jh

出0入0汤圆

发表于 2011-1-21 08:28:09 | 显示全部楼层
mark ,谢谢分享

出0入0汤圆

发表于 2011-1-21 08:42:31 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-9 18:20:43 | 显示全部楼层
试下,谢谢共享

出0入0汤圆

发表于 2011-6-21 17:27:54 | 显示全部楼层
回复【楼主位】hhrfjz  ---
-----------------------------------------------------------------------
谢谢分享。

出0入0汤圆

发表于 2011-7-23 14:09:04 | 显示全部楼层
在/INT 脚产生周期为1s 的脉冲中断信号 怎么改程序呢

出0入0汤圆

发表于 2011-12-30 22:12:55 | 显示全部楼层
d=Read_I2C_Byte();
d=d>>1;
I2C_Stop();
return d;

其中d=d>>1;
是什么意思,请楼主指教一下

出0入0汤圆

发表于 2012-3-28 00:12:42 | 显示全部楼层
好东西,顶一下

出0入0汤圆

发表于 2012-3-28 07:43:31 | 显示全部楼层
顶一下     

出0入0汤圆

发表于 2012-7-16 16:05:16 | 显示全部楼层
mark~~~~~~

出0入0汤圆

发表于 2012-7-17 22:17:59 | 显示全部楼层
卸下楼主分享!

出0入0汤圆

发表于 2012-9-13 23:40:57 | 显示全部楼层
moouse 发表于 2011-12-30 22:12
d=Read_I2C_Byte();
d=d>>1;
I2C_Stop();

左移一位

出0入0汤圆

发表于 2012-9-28 12:36:54 | 显示全部楼层
学习一下

出0入0汤圆

发表于 2012-11-12 20:48:13 | 显示全部楼层
顶个
但不知楼主 SET();子函数在哪哦,

出0入0汤圆

发表于 2012-11-29 13:01:28 | 显示全部楼层
mark,留用

出0入0汤圆

发表于 2013-1-5 18:50:22 | 显示全部楼层

出0入0汤圆

发表于 2013-1-28 10:37:40 | 显示全部楼层

出0入0汤圆

发表于 2013-4-12 11:16:29 来自手机 | 显示全部楼层
学习一下....

出0入0汤圆

发表于 2017-3-21 14:49:50 | 显示全部楼层
正说要做这个来玩玩

出0入0汤圆

发表于 2017-7-27 14:47:05 | 显示全部楼层
老贴,很具有参考意义!

出0入0汤圆

发表于 2017-7-29 10:25:33 | 显示全部楼层
学习了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 02:58

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表