分享

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

 共同成长888 2015-12-25
   万年历时钟芯片很多,笔者认为,比起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 ;I<125;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); 
    } 

 
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多