基于PCF8563时钟芯片的万年历制作

数字时钟电路图

17人已加入

描述

  pcf8563简介

  PCF8563是PHILIPS公司推出的一款工业级内含I2C总线接口功能的具有极低功耗的多功能时钟/日历芯片。PCF8563的多种报警功能、定时器功能、时钟输出功能以及中断输出功能能完成各种复杂的定时服务,甚至可为单片机提供看门狗功能。是一款性价比极高的时钟芯片,它已被广泛用于电表、水表、气表、电话、传真机、便携式仪器以及电池供电的仪器仪表等产品领域。

  pcf8563工作原理

  PCF8563有16个8位寄存器:一个可自动增量的地址寄存器,一个内置32.768KHz的振荡器(带有一个内部集成的电容)一个分频器(用于给实时时钟RTC提供源时钟)一个可编程时钟输出,一个定时器,一个报警器,一个掉电检测器和一个400KHzI2C总线接口。

  所有16个寄存器设计成可寻址的8位并行寄存器,但不是所有位都有用。前两个寄存器(内存地址00H,01H)用于控制寄存器和状态寄存器,内存地址02H~08H用于时钟计数器(秒~年计数器),地址09H~0CH用于报警寄存器(定义报警条件),地址0DH控制CLKOUT管脚的输出频率,地址0EH和0FH分别用于定时器控制寄存器和定时器寄存器。秒、分钟、小时、日、月、年、分钟报警、小时报警、日报警寄存器,编码格式为BCD,星期和星期报警寄存器不以BCD格式编码。当一个RTC寄存器被读时,所有计数器的内容被锁存,因此,在传送条件下,可以禁止对时钟日历芯片的错读。

  pcf8563主要特性

  1、宽电压范围1.0~5.5V,复位电压标准值Vlow=0.9V。

  2、超低功耗:典型值为0.25uA(VDD=3.0V,Tamb=25℃)。

  3、可编程时钟输出频率为:32.768KHz、1024Hz、32Hz、1Hz。

  4、四种报警功能和定时器功能。

  5、内含复位电路、振荡器电容和掉电检测电路。

  6、开漏中断输出。

  7、400kHzI2C总线(VDD=1.8~5.5V),其从地址读0A3H;写0A2H。

  pcf8563管脚及描述

LCM1602
LCM1602

  基于PCF8563时钟芯片的万年历制作

  万年历时钟芯片很多,笔者认为,比起DSl302来说,采用飞利浦公司的PCF8563时钟芯片,LCM1602作显示,可以取得较理想的效果。电路图如图1所示。

LCM1602

  PCF8563是低功耗的CMOS实时时钟/日历芯片,提供1个可编程时钟输出、1个中断输出和掉电检测器,所有的地址和数据通过I2C总线接口串行传递。最大总线速度为400kbit/s,在数据交换时只要按照I2C总线模式进行操作,对时序的要求也不是太高。PCF8563内部寄存器地址与数据格式描述如附表所示。

LCM1602

  本电路采用89S51作主控MCU,PCF8563产生时钟信息,LCM1602液晶模块作显示。Y1为32.768kHz晶振,Y2为12MHz晶振,BT1作为后备电源,保持时钟数据万年不丢失;RP1和RP2是9脚l0kΩ排阻;S1~S4用于调整时间。S2用于进入调整模式;并且每按一次改变调整项目;S1用于退出调整状态,S3、S4用于加1减1操作。

  LCMl602的驱动程序如下,可移植。

  #defineLCM1602_DB0_DB7PO//定义LCM1602的数据总线

  sbitLCM1602_RS=P2^6;//定义LCMl602的RS控制线

  sbitLCM1602_RW=P2^5;//定义LCM1602的RW控制线

  sbitLCM1602_E=P2^4;//定义LCM1602的E控制线

  sbitLCM1602_Busy=P0^7;//定义LCM1602的测忙线

  unsignedcharcodePCF8563[]={“PCF8563”};

  voidLCM1602_Delay(unsignedcharcount)

  {

  unsignedcharI;

  while(--count!=0)

  {

  for(I=0;I《125;I++);

  }

  }

  voidLCM1602_TestBusy(void)

  {

  do

  {

  LCM1602_DB0_DB7=0xff;

  LCM1602_RS=0;

  LCM1602_RW=1;

  LCM1602_E=0;

  LCM1602_Delay(2);

  LCM1602_E=1;

  }

  while(LCM1602_Busy);

  }

  voidLCM1602_WriteCMD(unsignedcharLCM1602_command)

  {

  LCM1602_DB0_DB7=LCM1602_command;

  LCM1602_RS=0;

  LCM1602_RW=0;

  LCM1602_E=0;

  LCM1602_TestBusy();

  LCM1602_E=1;

  }

  voidLCM1602_WriteData(unsignedcharLCM1602data)

  {

  LCM1602_DB0_DB7=LCM1602_data;

  LCMl602_RS=1;

  LCM1602_RW=0;

  LCM1602_E=0;

  LCM1602_TestBusy();

  LCM1602_E=1;

  }

  voidLCM1602_Int(void)

  {

  LCM1602_WriteCMD(0x01);//显示清屏

  LCM1602_WriteCMD(0x38);//显示模式设置:显示2行,每个字符为5x7个像素

  LCM1602_WriteCMD(0x06);//显示光标移动设置:文字不动,光标右移·

  LCM1602_WriteCMD(0x0c);//显示开及光标设置:显示开,光标关,闪烁关

  }

  voidprint(unsignedchara,unsignedchar*str)

  {

  LCM1602_WriteCMD(a);

  while(*str!=’’)

  {

  LCM1602_WriteData(*str++);

  }

  *str=0;

  }

  voidprint1(unsignedchara,unsignedchart)(

  LCM1602_WriteCMD(a);

  LCM1602_WriteData(t);

  }


打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分