pcf8563簡介
PCF8563是PHILIPS公司推出的一款工業(yè)級內(nèi)含I2C總線接口功能的具有極低功耗的多功能時鐘/日歷芯片。PCF8563的多種報警功能、定時器功能、時鐘輸出功能以及中斷輸出功能能完成各種復(fù)雜的定時服務(wù),甚至可為單片機提供看門狗功能。是一款性價比極高的時鐘芯片,它已被廣泛用于電表、水表、氣表、電話、傳真機、便攜式儀器以及電池供電的儀器儀表等產(chǎn)品領(lǐng)域。
pcf8563工作原理
PCF8563有16個8位寄存器:一個可自動增量的地址寄存器,一個內(nèi)置32.768KHz的振蕩器(帶有一個內(nèi)部集成的電容)一個分頻器(用于給實時時鐘RTC提供源時鐘)一個可編程時鐘輸出,一個定時器,一個報警器,一個掉電檢測器和一個400KHzI2C總線接口。
所有16個寄存器設(shè)計成可尋址的8位并行寄存器,但不是所有位都有用。前兩個寄存器(內(nèi)存地址00H,01H)用于控制寄存器和狀態(tài)寄存器,內(nèi)存地址02H~08H用于時鐘計數(shù)器(秒~年計數(shù)器),地址09H~0CH用于報警寄存器(定義報警條件),地址0DH控制CLKOUT管腳的輸出頻率,地址0EH和0FH分別用于定時器控制寄存器和定時器寄存器。秒、分鐘、小時、日、月、年、分鐘報警、小時報警、日報警寄存器,編碼格式為BCD,星期和星期報警寄存器不以BCD格式編碼。當(dāng)一個RTC寄存器被讀時,所有計數(shù)器的內(nèi)容被鎖存,因此,在傳送條件下,可以禁止對時鐘日歷芯片的錯讀。
pcf8563主要特性
1、寬電壓范圍1.0~5.5V,復(fù)位電壓標(biāo)準(zhǔn)值Vlow=0.9V。
2、超低功耗:典型值為0.25uA(VDD=3.0V,Tamb=25℃)。
3、可編程時鐘輸出頻率為:32.768KHz、1024Hz、32Hz、1Hz。
4、四種報警功能和定時器功能。
5、內(nèi)含復(fù)位電路、振蕩器電容和掉電檢測電路。
6、開漏中斷輸出。
7、400kHzI2C總線(VDD=1.8~5.5V),其從地址讀0A3H;寫0A2H。
pcf8563管腳及描述


基于PCF8563時鐘芯片的萬年歷制作
萬年歷時鐘芯片很多,筆者認(rèn)為,比起DSl302來說,采用飛利浦公司的PCF8563時鐘芯片,LCM1602作顯示,可以取得較理想的效果。電路圖如圖1所示。
PCF8563是低功耗的CMOS實時時鐘/日歷芯片,提供1個可編程時鐘輸出、1個中斷輸出和掉電檢測器,所有的地址和數(shù)據(jù)通過I2C總線接口串行傳遞。最大總線速度為400kbit/s,在數(shù)據(jù)交換時只要按照I2C總線模式進行操作,對時序的要求也不是太高。PCF8563內(nèi)部寄存器地址與數(shù)據(jù)格式描述如附表所示。
本電路采用89S51作主控MCU,PCF8563產(chǎn)生時鐘信息,LCM1602液晶模塊作顯示。Y1為32.768kHz晶振,Y2為12MHz晶振,BT1作為后備電源,保持時鐘數(shù)據(jù)萬年不丟失;RP1和RP2是9腳l0kΩ排阻;S1~S4用于調(diào)整時間。S2用于進入調(diào)整模式;并且每按一次改變調(diào)整項目;S1用于退出調(diào)整狀態(tài),S3、S4用于加1減1操作。
LCMl602的驅(qū)動程序如下,可移植。
#defineLCM1602_DB0_DB7PO//定義LCM1602的數(shù)據(jù)總線
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);//顯示模式設(shè)置:顯示2行,每個字符為5x7個像素
LCM1602_WriteCMD(0x06);//顯示光標(biāo)移動設(shè)置:文字不動,光標(biāo)右移·
LCM1602_WriteCMD(0x0c);//顯示開及光標(biāo)設(shè)置:顯示開,光標(biāo)關(guān),閃爍關(guān)
}
voidprint(unsignedchara,unsignedchar*str)
{
LCM1602_WriteCMD(a);
while(*str!=’