工业控制 | 能源技术 | 汽车电子 | 通信网络 | 安防监控 | 智能电网 | 移动手持 | 无线技术 | 家用电器 | 数字广播 | 消费电子 | 应用软件 | 其他方案

电路设计->光电电路图->其他光电实用电路图->用PCF8563时钟芯片制作的万年历

用PCF8563时钟芯片制作的万年历

作者:dolphin时间:2016-09-08

万年历时钟芯片很多,比起DSl302来说,采用飞利浦公司的PCF8563时钟芯片,LCM1602作显示,可以取得较理想的效果。电路图如图1所示。 PCF8563是低功耗的CMOS实时时钟/日历芯片,提供1个可编程时钟输出、1个中断输出和掉电检测器,所有的地址和数据通过I2C总线接口串行传递。最大总线速度为400kbit/s,在数据交换时只要按照I2C总线模式进行操作,对时序的要求也不是太高。PCF8563内部寄存器地址与数据格式描述如附表所示。本电路采用89S51作主控MCU,PCF8563产生时钟信息,LCM1602液晶模块作显示。Y1为32.768kHz晶振,Y2为12MHz晶振,BT1作为后备电源,保持时钟数据万年不丢失;RP1和RP2是9脚l0kΩ排阻;S1~S4用于调整时间。S2用于进入调整模式;并且每按一次改变调整项目;S1用于退出调整状态,S3、S4用于加1减1操作。


LCMl602的驱动程序如下,可移植。 #define LCM1602_DB0_DB7 PO //定义LCM1602的数据总线 sbit LCM1602_RS=P2^6; //定义LCMl602的RS控制线 sbit LCM1602_RW=P2^5; //定义LCM1602的RW控制线 sbit LCM1602_E=P2^4; //定义LCM1602的E控制线 sbit LCM1602_Busy =P0^7;//定义LCM1602的测忙线 unsigned char code PCF8563[]={"PCF8563"}; void LCM1602_Delay(unsigned char count){ unsigned char i; while(--count!=0){ for(i=0 ;i125;i++);}} void LCM1602_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);} void LCM1602_WriteCMD (unsigned char LCM1602_command){ LCM1602_DB0_DB7=LCM1602_command; LCM1602_RS=0; LCM1602_RW=0; LCM1602_E=0; LCM1602_TestBusy(); LCM1602_E=1;} void LCM1602_WritEDAta (unsigned char LCM1602 data){ LCM1602_DB0_DB7=LCM1602_data; LCMl602_RS=1; LCM1602_RW=0; LCM1602_E=0; LCM1602_TestBusy(); LCM1602_E=1;} void LCM1602_Int(void){ LCM1602_WriteCMD(0x01);//显示清屏 LCM1602_WriteCMD(0x38);//显示模式设置:显示2行,每个字符为5x7个像素 LCM1602_WriteCMD(0x06);//显示光标移动设置:文字不动,光标右移· LCM1602_WriteCMD(0x0c);//显示开及光标设置:显示开,光标关,闪烁关} void print(unsigned char a,unsigned char *str){ LCM1602_WriteCMD(a); while(*str!='\0'){ LCM1602_WriteData(*str++);} *str=0;} void print1(unsigned char a,unsigned char t)( LCM1602_WriteCMD(a); LCM1602_WriteData(t);}有兴趣的朋友,可仿制。源程序经过调试,运行正常,效果图如图2所示。





评论

技术专区